19.06.2019 Игорь Торба 13668
Трассировка и оптимизация запросов на PostgreSQL

Содержание:

    

Поиск длительных запросов, установление причин их длительности и ускорение выполнения является едва ли не основной и часто используемой операцией повышения производительности информационной системы на платформе 1С:Предприятие. Процесс сбора и анализа запросов на стороне системы управления базами данных (СУБД) иногда называют трассировкой. Для некоторых СУБД существуют специальные инструменты, позволяющие выполнить трассировку. 


Например, для MSSQL сервер - SQLServerProfiler, ExtendedEvents. Они имеют широкий набор метрики и функционал для группировки, агрегирования, сохранения в промежуточные таблицы и т.д. Но что делать, если информационная система 1С работает на платформе PostgreSQL? Для решения этой задачи существует метод, который и будет описан в данной статье.


Конечно же, если есть возможность установить такой популярный инструмент, как Центр управления производительностью (ЦУП), то расследовать неоптимальные запросы можно и его помощью. Это достаточно удобный и интуитивно понятный инструмент. Но очень часто, особенно в небольших организациях нет возможности использовать ЦУП, поэтому приходится использовать штатные средства платформы 1С и СУБД.


Операцию оптимизации запросов можно разделить на четыре основные задачи:

·         Определить список «тяжелых» запросов

·         Установить их место вызова в конфигурации 1С

·         Получить их планы выполнения и метрику на стороне СУБД

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


1.      1С сервер postgresql. Собираем информацию о длительных запросах


На этом этапе нужно собрать sql тексты длительных запросов и информацию об их расположении в конфигурации 1С. Для начала необходимо настроить технологический журнал для получения длительных запросов. Длительность, начиная с которой запрос можно считать потенциально неоптимальным, регулируется свойством Durationus. Это свойство измеряется в микросекундах и подбирается интуитивным способом. В журнале нам понадобятся: текст запроса на языке запросов SQL (свойство Sql) и контекст вызова этого запроса на встроенном языке 1С (свойство Context), чтобы в дальнейшем найти этот запрос в модуле конфигурации базы данных.


Создаем файл logcfg.xml и помещаем его в папку conf каталога конфигурационных файлов системы «1С:Предприятие»




Убедившись, что в указанной папке (атрибут location) начали собираться логи, выполняем операции в программе 1С.


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


Запись в логах ТЖ найдена, найден текст запроса в конфигурации.




Переходим к получению планов и метрики на стороне СУБД PostgreSQL. 

 

2.      Как сделать трассировку postgresql запросов. Создаем файл запросов для трассировки


Создаем в текстовом редакторе файл с расширением .sql

В этот файл необходимо будет скопировать тексты запросов на языке запросов Sql. Но перед этим в самое начало файла необходимо записать команды установки параметров, которые система выполняет при старте сервера. Эти параметры нужны для того, чтобы показатели трассировки соответствовали реальным условиям работы СУБД.


Команды можно скопировать из лог-файлов, расположенных в папке pg_log каталога кластера PostgreSQL. Для того чтобы они залогировались, потребуется в конфигурационном файле postgresql.conf установить параметр log_statement = 'all'

Ниже приведен пример такого лога.




Нужные записи можно найти по ключевым словам statement:SET




Теперь можно вставлять запросы. Перед каждым запросом необходимо установить команду EXPLAIN ANALYZE, а после каждого запроса знак;

EXPLAIN – получаем план запроса, ANALYZE – получаем актуальную статистику для плана




Файл готов… Теперь необходимо выполнить трассировку с помощью командной строки.

Запускаем консоль командной строки в директории PostgreSQL




Командная строка имеет следующий шаблон

psql -U [имя пользователя] -h [имя сервера] -d [имя базы] -f [путь к исходномуфайлу запросов] -o [путь к файлу трассировки]




Для продолжения выполнения потребуется ввести пароль пользователя 


3.      Анализируем трассировку postgresql запросов


Итоговый файл трассировки postgresql запросов имеет следующий вид




Результаты трассировки расположены в том же порядке, что и запросы в исходном файле.

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


Основные показатели:

·         actualtime – фактическое время выполнения в миллисекундах первой .. последней строки

·         rows – количество обработанных строк

·         loops – количество выполнений операции


Итоговый показатель Executiontime, показывающий не только общую длительность запроса, но и позволяющий оценить насколько эффективно стал работать запрос после оптимизации запросов. После устранения причин неоптимальности на стороне 1С исходный файл запросов можно дополнить оптимизированными текстами. А после сравнить значения Executiontime «старого» текста с «новым».


Для анализа плана запроса можно воспользоваться ресурсом 

Результат разборки плана данным ресурсом на скриншотах:






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

SeqScan – последовательное сканирование таблицы. Индекс не используется.

BitmapIndexScan, BitmapHeapScan – чтение большого количества строк. Возможно комбинирование индексов.

IndexScan – поиск в индексе. Может использоваться в ситуации с «не покрывающим» индексом, когда за частью данных приходиться обращаться в таблицу. Если индекс сделать «покрывающим», то оператор может быть заменен на более «скоростной» IndexOnlyScan.

 

В заключение хочется отметить , что поиск длительных postgresql запросов можно выполнять и без использования технологического журнала. Например, настроить параметры log duration = onиlog_min_duration_statement = [время в миллисекундах] конфигурационного файла Postgre. Тогда в логиpg_log будут попадать и тексты запросов, превышающих по длительности необходимое время. Но в этом случае будет тяжело отыскать точку вызова данного запроса в конфигурации 1С, поэтому в данной статье такой подход я рассматривать не стал.

 

Специалист компании ООО «Кодерлайн» 

Игорь Торба.

Наши проекты

Госкорпорация «Ростех»
Госкорпорация «Ростех»

Отрасль:
Производство, ТЭК >> Машиностроение, приборостроение

Внедренное типовое решение:
1С:Управление холдингом 1.3.

Специалисты «Кодерлайн» помогли разработать и внедрить автоматизированную...

ООО “РТИТС”
ООО “РТИТС”

Отрасль:
Транспортные системы

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Блок регламентированного кадрового учета и расчета заработной платы в 1С:ERP;...

АО «Вертолетная сервисная компания»
АО «Вертолетная сервисная компания»

Отрасль:
МТО эксплуатации вертолетной техники

Внедренное типовое решение:
1С:Бухгалтерия КОРП

- Консультации по сложным вопросам налогового и бухгалтерского учета;
- Ра...

ООО "ЛИКАРД" (Лукойл)
ООО "ЛИКАРД" (Лукойл)

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Делопроизводство
• Учет и контроль исполнения поручений
Учет и хранение...

ООО «Стейдж Энтертейнмент Россия»
ООО «Стейдж Энтертейнмент Россия»

Отрасль:
Театральная деятельность

Внедренное типовое решение:
Платформа 1С:Предприятие 8

Реализован процесс трансформации данных бухгалтерского учета по РСБУ в дан...

ООО "СЖД"
ООО "СЖД"

Отрасль:
Торговля, склад, логистика, транспорт

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Расчет зарплаты
Подбор кадров
Кадровый учет
Анализ кадрового состава...

Автоматизация интеграции с информсистемами клиентов на базе «1С:Предприятие 8. WMS Логистика. Управление складом»
ОАО «Фрейт Линк»

Отрасль:
Логистика и грузоперевозки

Внедренное типовое решение:
«1С:Предприятие 8. WMS Логистика. Управление складом»

– Управление складскими запасами;
– Оформление заказов покупателей;
– ...

ХИТЕК-ГРУП
ХИТЕК-ГРУП

Отрасль:
Продажа парикмахерского инструмента и аксессуаров

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Документооборот (ECM)
• Делопроизводство
Управление бизнес-процессами и И...

ПАО «АрселорМиттал Кривой Рог»
ПАО «АрселорМиттал Кривой Рог»

Отрасль:
Металлургическая промышленность

Внедренное типовое решение:
1С:Управление производственным предприятием для Украины

- Кадровый учет
- Расчет зарплаты
- Регламентированная отчетность
- Уч...

Внедрение системы финансового учета БИТ:Финанс
ООО «Алькор и Ко» (Л’Этуаль)

Отрасль:
Торговля

Внедренное типовое решение:
БИТ.Финанс

- Финансовый учет;
- Поддержка проекта внедрения МСФО;
- Регламентные рабо...

ПЭК
ПЭК

Отрасль:
Грузоперевозки

Внедренное типовое решение:
1С:Управление производственным предприятием

- Внедрение функционала управления НСИ;
- Рефакторинг;
- Оптимизация общег...

Внедрение 1С:Управление торговлей в оптово-розничной компании «Ална-Байк»
ИП Титов Виктор Сергеевич «Ална-Байк»

Отрасль:
Торговля

Внедренное типовое решение:
1С:Управление торговлей

- Управление складами;
- Управление заказами поставщиков;
- Управление зак...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение