Почему при закрытии месяца в 1С сильно растет tempdb на SQL Server?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Почему при закрытии месяца в 1С сильно растет tempdb на SQL Server?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #34310
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        при закрытии месяца сильно растет tempdb на sql

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

          S, при закрытии месяца в 1С tempdb на SQL Server может сильно расти по следующим причинам:

          1. **Активное использование временных таблиц и сложных запросов**
          В процессе закрытия месяца 1С выполняет множество сложных запросов с группировками (GROUP BY), объединениями (UNION), сортировками, агрегациями и временными таблицами. Все эти операции активно используют tempdb для хранения промежуточных данных.

          2. **Длительные транзакции и блокировки**
          Если в процессе закрытия месяца есть длительные транзакции, tempdb не может освободить занятую им память и пространство, что приводит к его росту. Особенно это актуально, если запросы не завершаются быстро или есть блокировки.

          3. **Большие объемы данных**
          Закрытие месяца обычно обрабатывает большие объемы данных, что требует значительных ресурсов tempdb для хранения временных объектов.

          4. **Передача больших массивов параметров в запросах**
          При передаче больших массивов данных в параметры запросов 1С создает временные таблицы в tempdb, что увеличивает его размер.

          5. **Отсутствие оптимизации запросов и индексов**
          Неоптимальные запросы и отсутствие нужных индексов могут привести к увеличению использования tempdb.

          ### Рекомендации по решению и оптимизации:

          — **Диагностика «тяжелых» запросов**
          Используйте системные представления SQL Server (`sys.dm_db_session_space_usage`, `sys.dm_db_task_space_usage`) и профайлер для выявления запросов, которые занимают много места в tempdb.

          — **Оптимизация запросов 1С**
          Проверьте и оптимизируйте запросы, участвующие в закрытии месяца, уменьшите использование временных таблиц, если возможно.

          — **Перенос tempdb на быстрый диск или RAM-диск**
          Перенос tempdb на SSD или RAM-диск значительно ускорит работу и уменьшит проблемы с ростом. При этом важно настроить несколько файлов tempdb для параллелизма.

          — **Настройка размера tempdb и автоприроста**
          Задайте фиксированный размер tempdb с отключенным автоприростом, чтобы избежать фрагментации и резких скачков размера.

          — **Регулярное обслуживание и сжатие tempdb**
          Настройте план обслуживания для сжатия tempdb, если он вырос сверх нормы.

          — **Пересмотр архитектуры закрытия месяца**
          Возможно, стоит разбить процесс на этапы или использовать пакетную обработку, чтобы снизить нагрузку на tempdb.

          ### Пример команды для диагностики сессий с большим использованием tempdb:

          SELECT 
              session_id, 
              SUM(internal_objects_alloc_page_count) * 8 AS internal_objects_kb,
              SUM(user_objects_alloc_page_count) * 8 AS user_objects_kb
          FROM sys.dm_db_session_space_usage
          GROUP BY session_id
          ORDER BY internal_objects_kb + user_objects_kb DESC;
          

          Если нужна помощь с конкретным запросом или настройкой, могу помочь с анализом и написанием кода.

          Рекомендую посмотреть здесь:
          https://infostart.ru/1c/articles/1880561/
          https://infostart.ru/1c/articles/990824/
          https://helpf.pro/faq/view/449.html

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