Анализ производительности запросов на уровне СУБД
Ранее, я рассматривал, причины неоптимальной работы запросов в 1С. Однако, эти действия иногда могут не помочь в борьбе за повышение производительности системы. В этом случае, необходимо обратиться к внесистемным средствам анализа на уровне СУБД, к SQL Server Profiler.
Приложение SQL Server Profiler — это графический пользовательский интерфейс для трассировки SQL, с помощью которого программист 1С может наблюдать за экземпляром компонента Компонент Database Engine или службами Analysis Services. С помощью данной утилиты, мы может анализировать план выполнения запроса в пошаговом режиме. Приложение позволяет собирать и сохранять данные о каждом событии в файле или в таблице для последующего анализа.
Признаки выбора неоптимального плана запроса СУБД
Как правило, MS SQL подбирает для 1С оптимальный план запроса, но бывает СУБД ошибается. Связано это может быть, например, с неактуальной статистикой или высокой загруженностью системы. Программисту 1С, для того, что бы помочь оптимизатору строить правильный план запроса, необходимо проверить настройку регламентных операция на СУБД MS SQL. Среди признаков неоптимального построения плана запроса для 1С могут быть конструкции:
- NESTED LOOPS
- SCAN (TABLE SCAN, INDEX SCAN, CLUSTERED INDEX SCAN)
- SEEK … WHERE
NESTED LOOPS
Алгоритм соединения вложенными циклами, по сути своей, это простой перебор двух таблиц и вывод удовлетворяющих соединению строк. Данный вид соединения недопустим для ведущей таблицы, с большим количество записей. Однако данный вид соединения самый простой и часто используется когда СУБД MS SQL не может подобрать другой вариант соединения. В целом, NESTED LOOPS допустим к использованию, когда в ведущей таблице не более двух записей и скорее всего он быстрее отработает в такой ситуации.
SCAN
Сканирование таблицы или индекса. К этому признаку относятся — TABLE SCAN, INDEX SCAN, CLUSTERED INDEX SCAN. Скорость этого метода очень сильно зависит от количества записей в системе. Однако, сканирование само по себе не является ошибкой. Сканирование может негативно сказываться в случаях когда таблица содержит большое количество записей, а запрос возвращает незначительное количество записей. Т.е по сути СУБД впустую тратит ресурсы.
SEEK … WHERE
Аналог сканирования (SCAN), за тем исключением, что сканируется часть таблицы, по установленному условию.
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!