При работе в клиент-серверном варианте базы данных на MS SQL Server пользователи часто сталкиваются со специфической проблемой: отчет «Оборотно-сальдовая ведомость по счету» для счета 43 («Готовая продукция») намертво зависает, если в настройках установлен отбор по конкретному складу. При этом формирование отчета с группировкой по складам без отбора или напрямую по конкретным субсчетам (43.01, 43.02) может отрабатывать за считанные секунды. Проанализируем причину такого поведения и разберем эффективные шаги по устранению неполадки.
Основным и наиболее эффективным решением со стороны платформы является запуск комплексной процедуры тестирования и исправления. Нарушения в таблицах итогов или повреждения структурных связей регистра бухгалтерии приводят к тому, что платформенный генератор запросов начинает бесконечный обход записей при попытке развернуть иерархию родительского счета с фильтрацией по субконто.
Разберем по шагам порядок действий для восстановления работоспособности базы:
Как показывает практика, полная реструктуризация таблиц совместно с пересчетом итогов сбрасывает ошибочные состояния таблиц регистра бухгалтерии и восстанавливает нормальную скорость формирования отчета.
Если тестирование и исправление базы не решило проблему полностью, проанализируем настройки СУБД. Зависание отчета по родительскому счету 43 при выборе фильтра по субконто часто связано со спецификой оптимизатора запросов MS SQL Server (явление Parameter Sniffing) и неоптимальной работой параллелизма.
Когда запрос адресуется к родительскому счету 43, система генерирует обращение к виртуальной таблице ОстаткиИОбороты с параметризованным фильтром. Если оптимизатор СУБД сохраняет кэшированный план, построенный для иных условий, выполняя внутренний оператор Nested Loops вместо Hash Match, построение отчета зависает.
Для исправления работы оптимизатора СУБД выполним следующие операции:
Max Degree of Parallelism в экземпляре SQL Server равным 1 (или от 2 до 4 для многоядерных систем согласно рекомендациям 1С). Это предотвратит зацикливание потоков СУБД и появление ожиданий типа CXPACKET при обработке сложных иерархических выборок.
DBCC FREEPROCCACHE;
DBCC CHECKDB ('ИмяБазыДанных');
Сложные бухгалтерские отчеты активно используют служебную базу TempDB для создания временных таблиц при сопоставлении субконто и счетов. Чтобы исключить задержки на уровне дискового ввода-вывода, проверим настройки серверного окружения:
TempDB на несколько файлов данных равного размера (из расчета 1 файл на ядро процессора, но не более 8 файлов).
EXEC sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN';
Рабочие процессы сервера 1С:Предприятия (rphost) могут удерживать устаревшие схемы компоновки данных. Для полного сброса состояний выполним следующие действия:
srvinfo) и удалим содержимое папок кэша сеансов для проблемной базы.Если требуется срочно получить данные до проведения регламентных технических работ на сервере, рассмотрим альтернативные варианты выборок: