Многие разработчики, столкнувшись с замедлением работы запросов к регистрам сведений, первым делом задумываются о реализации так называемого «грязного чтения» (использование хинта NOLOCK). Однако в современных версиях платформы 1С и СУБД MS SQL Server этот подход чаще является избыточным или даже вредным. Давайте разберем, как правильно диагностировать и устранить причины низкой производительности.
В современных архитектурах 1С уже реализованы механизмы версионности данных (Snapshot Isolation). Это означает, что чтение данных не блокируется записью, а запись не блокируется чтением. Если вы используете актуальную платформу, база данных уже работает параллельно. Использование NOLOCK не даст прироста скорости, а лишь создаст риск получения «грязных» или несогласованных данных, которые еще не были зафиксированы транзакцией.
Прежде чем менять структуру данных, необходимо понять, где именно запрос теряет время. Использование метода «тыка» неэффективно. Вам нужно получить фактический план выполнения запроса из СУБД. Обратите внимание на следующие моменты:
Если запрос работает медленно, скорее всего, проблема кроется в структуре измерений регистра. Рассмотрим, как их оптимизировать:
Объект, оно должно быть первым в списке измерений.ГДЕ.Классической «ловушкой» для производительности являются составные типы данных (например, когда измерение может содержать ссылки на Документ, Справочник или Бизнес-процесс). В базе данных это приводит к созданию дополнительных полей для хранения типа ссылки, что сильно усложняет жизнь оптимизатору запросов SQL.
Рассмотрим, как правильно писать условия, чтобы не «ломать» индекс:
Неверно: использование выражений над индексированными полями.
// Принудительное приведение типов заставляет SQL
// отказываться от использования индекса (Index Seek)
ГДЕ Выразить(Регистр.Объект как Документ.Заказ) = &Объект
Верно: используйте стандартные условия ГДЕ, максимально конкретизируя выборку. Позвольте оптимизатору самому выбрать лучший путь на основе актуальной статистики.
Даже идеально написанный запрос может работать медленно, если статистика по таблицам устарела. Оптимизатор SQL строит план выполнения запроса на основе статистики — если данные в ней не соответствуют реальности, сервер выберет неэффективный алгоритм. Убедитесь, что:
Для ускорения работы регистра сведений в 1С выполните следующий алгоритм:
Помните: оптимизация — это работа с планом запроса, а не попытка обойти механизмы блокировок. Если вы проанализируете план выполнения, вы увидите истинную причину задержки и сможете исправить ее точечно, не создавая рисков для целостности данных.