Почему база 1С на SQL 25ГБ тормозит, если логи регулярно чистятся?

База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Почему база 1С на SQL 25ГБ тормозит, если логи регулярно чистятся?

Просмотр 1 ветки ответов
  • Автор
    Записи
    • #38994
      Фото аватараOdineski
      Участник

        база 1с SQL 25Gb стала сильно тормозить логи раз в неделю вычищаются

      • #38995
        bot_avaOdin — Одинэсник
        Участник

          25 ГБ для базы 1С на SQL Server не является большим размером. Сам по себе размер базы обычно не объясняет сильные тормоза. В вашем случае в первую очередь нужно проверить:

          1. Не переполняется ли журнал транзакций.
          2. Какая модель восстановления установлена.
          3. Выполняются ли резервные копии журнала.
          4. Не запускается ли раз в неделю тяжелая очистка или уменьшение журнала.
          5. Нет ли блокировок, фрагментации индексов и устаревшей статистики.
          6. Хватает ли места на дисках и оперативной памяти.

          ## 1. Сначала определить причину роста журнала

          Выполните в SQL Server Management Studio:

          Вместо ИмяБазы1С укажите фактическое имя базы.

          Возможные результаты log_reuse_wait_desc:

          — NOTHING , журнал может использоваться повторно, проблема не в невозможности очистки;
          — LOG_BACKUP , для базы в модели FULL не выполняются резервные копии журнала;
          — ACTIVE_TRANSACTION , есть незавершенная или зависшая транзакция;
          — DATABASE_MIRRORING , проблема связана с зеркалированием;
          — AVAILABILITY_REPLICA , проблема связана с Always On;
          — REPLICATION , журнал удерживается репликацией;
          — ACTIVE_BACKUP_OR_RESTORE , идет резервное копирование или восстановление;
          — OLDEST_PAGE , старая версия данных удерживается активной транзакцией.

          Также проверьте фактическое заполнение журнала:

          Более современный вариант:

          ## 2. Проверьте модель восстановления

          ### Если установлена модель FULL

          В этом случае журнал транзакций не будет освобождаться просто от обычного полного резервного копирования базы. Необходимо регулярно делать резервные копии журнала.

          Обычно для базы 1С достаточно выполнять их каждые 15 минут, 30 минут или 1 час, в зависимости от требований к восстановлению.

          Пример резервной копии журнала:

          Важно: файл резервной копии журнала не нужно каждый раз перезаписывать через INIT, если вы хотите хранить цепочку резервных копий. Обычно используются разные имена файлов или настроенный SQL Server Agent.

          После настройки резервного копирования журнала его физический размер сам по себе может остаться большим. Это нормально. Главное, чтобы внутри него освобождалось место для повторного использования.

          ### Если резервные копии журнала не нужны

          Для большинства обычных баз 1С можно использовать модель SIMPLE:

          После переключения модель восстановления сама по себе может не уменьшить физический файл журнала. Если журнал уже раздулся, его можно один раз уменьшить до разумного размера.

          Сначала определите логическое имя файла:

          Затем однократно:

          Здесь 2048 означает 2 ГБ. Это только пример. Размер нужно выбирать по фактической нагрузке.

          Не рекомендуется выполнять SHRINKFILE каждую неделю. После уменьшения SQL Server будет снова увеличивать журнал, что приводит к дополнительным паузам, фрагментации и тормозам.

          ## 3. Не путайте очистку журнала с уменьшением файла

          Есть две разные операции:

          1. Освободить занятые внутри журнала участки для повторного использования.
          2. Уменьшить физический файл .ldf.

          Регулярное уменьшение .ldf обычно является ошибкой. Правильная схема:

          — для FULL настроить резервное копирование журнала;
          — для SIMPLE не уменьшать журнал постоянно;
          — один раз подобрать размер журнала с запасом;
          — настроить нормальный шаг авторасширения, например 512 МБ или 1 ГБ;
          — не использовать авторасширение в процентах.

          Проверить параметры файлов можно так:

          Если is_percent_growth = 1, лучше заменить процентное увеличение на фиксированное:

          ## 4. Проверьте, не тормозит ли база во время еженедельной процедуры

          Если тормоза появляются примерно в один и тот же день или время, очень вероятно, что запускается одно из заданий:

          — уменьшение файлов базы;
          — перестроение всех индексов;
          — обновление статистики всей базы;
          — проверка целостности;
          — полное резервное копирование;
          — резервное копирование журнала;
          — обслуживание баз сразу нескольких информационных баз;
          — удаление данных в 1С;
          — очистка регистра сведений;
          — регламентное задание 1С;
          — обновление полнотекстового индекса;
          — обработка копий базы данных или 1С:Аналитики.

          Проверьте задания SQL Server Agent и регламентные задания в 1С.

          Особенно подозрительны задания, в которых присутствуют команды:

          DBCC CHECKDB сам по себе полезен, но на рабочей базе объемом 25 ГБ он может создавать заметную нагрузку. Его лучше запускать ночью и не одновременно с резервным копированием или регламентными заданиями 1С.

          ## 5. Проверьте активные блокировки

          Во время тормозов выполните:

          Если blocking_session_id не равен 0, один сеанс блокирует другой.

          Для просмотра открытых транзакций:

          Если найдена очень старая активная транзакция, она может не давать SQL Server переиспользовать журнал. Причиной может быть:

          — зависший сеанс 1С;
          — длительная обработка;
          — незавершенная транзакция в расширении;
          — массовое проведение документов;
          — удаление большого объема данных;
          — зависшая фоновая задача.

          Нельзя без проверки сразу завершать сеанс командой KILL. Сначала нужно определить, что это за пользователь, что он выполняет и не идет ли важная операция.

          ## 6. Проверьте индексы и статистику

          На базе 1С не стоит бездумно перестраивать абсолютно все индексы каждый день. Но если база давно не обслуживалась, фрагментация может влиять на скорость.

          Проверка фрагментации:

          Ориентировочно:

          — до 10% , ничего не делать;
          — от 10 до 30% , обычно REORGANIZE;
          — более 30% , возможно REBUILD, но лучше не выполнять это в рабочее время.

          Пример:

          или:

          При REBUILD существенно увеличивается нагрузка и может резко вырасти журнал транзакций. Если база работает в модели FULL, перед таким обслуживанием особенно важно, чтобы резервные копии журнала выполнялись штатно.

          Обновить статистику можно так:

          Но на рабочей базе это также может дать нагрузку. Запускайте ночью и предварительно сделайте резервную копию.

          ## 7. Проверьте крупные таблицы базы

          Размер базы 25 ГБ нужно разложить на данные и индексы:

          Если среди крупнейших объектов находятся таблицы:

          — _DbCopiesTrLogs;
          — _DbCopiesTrTables;
          — _DbCopiesTrChanges;
          — _DbCopiesTrChObj;
          — _DbCopiesInitialLast;
          — _DbCopiesUpdates;

          то в базе может накапливаться механизм «Копии баз данных», который используется, в том числе, 1С:Аналитикой. Такие таблицы иногда становятся причиной существенного роста базы.

          Удалять данные напрямую из таблиц 1С через SQL нельзя без понимания структуры и резервной копии. Сначала нужно отключать ненужные копии базы штатными средствами 1С и проверять результат. Прямое удаление из таблиц 1С может повредить логическую целостность базы.

          ## 8. Проверьте свободное место

          Нужно проверить свободное место минимум на следующих дисках:

          — диск с файлами данных .mdf и .ndf;
          — диск с журналом .ldf;
          — диск для временной базы tempdb;
          — диск для резервных копий.

          Если файл журнала растет, а на диске мало свободного места, 1С может начать выдавать ошибки и сильно замедляться.

          Рекомендуется размещать отдельно:

          — файлы данных;
          — файл журнала;
          — tempdb;
          — резервные копии.

          Для небольшой базы это не всегда обязательно, но при постоянных тормозах разделение дисков помогает определить узкое место.

          ## 9. Проверьте настройки SQL Server и 1С

          Для SQL Server стоит проверить:

          — разрядность SQL Server, желательно 64 bit;
          — достаточный объем оперативной памяти;
          — ограничение максимальной памяти SQL Server;
          — наличие свободной памяти на сервере;
          — загрузку дисков;
          — размер tempdb;
          — число файлов tempdb;
          — включенную автостатистику;
          — отсутствие запуска тяжелых заданий в рабочее время.

          Если SQL Server забирает всю память сервера, оставляя недостаточно памяти операционной системе и серверу 1С, работа также будет замедляться.

          Проверьте параметры памяти:

          Для сервера, где одновременно работают SQL Server и сервер 1С, нельзя отдавать SQL Server всю оперативную память. Нужно оставить запас для Windows, rphost, rmngr, антивируса и других служб.

          ## Что исправить в первую очередь

          Практический порядок действий такой:

          1. Узнать recovery_model_desc и log_reuse_wait_desc.
          2. Проверить фактический размер и заполнение .ldf.
          3. Если модель FULL, настроить резервное копирование журнала каждые 15 минут, 30 минут или 1 час.
          4. Если модель SIMPLE, не выполнять еженедельный SHRINK.
          5. Один раз уменьшить чрезмерно раздутый журнал после устранения причины роста.
          6. Найти еженедельное задание, во время которого начинаются тормоза.
          7. Проверить блокировки и активные транзакции именно в момент тормозов.
          8. Проверить фрагментацию индексов и статистику.
          9. Найти самые крупные таблицы.
          10. Проверить свободное место, память, tempdb и нагрузку на диски.

          Наиболее вероятные причины при вашем описании:

          — журнал не резервируется, а раз в неделю принудительно уменьшается;
          — раз в неделю выполняется тяжелый REBUILD или SHRINK;
          — зависает длительная транзакция;
          — база работает в FULL, но резервные копии журнала не настроены;
          — накопились таблицы механизма «Копии баз данных»;
          — тормоза вызываются регламентным заданием 1С, а не размером самой базы.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С