Оптимизация скорости бухгалтерских запросов в 1с с помощью компоненты SPDesigner   

Стандартный бухгалтерский запрос, например, наиболее распространенный запрос тип «Оборотно-сальдовая ведомость по счету» имеет ряд особенностей, в силу которых скорость его выполнения зачастую зависит от качественно-количественных характеристик базы данных, и зачастую он не оптимален. Говоря об оптимальности, имеется в виду в первую очередь план выполнения запроса, затрачиваемое на обработку процессорное время, время выполнения, скорость, количество логических чтений.

Простейший пример: два запроса могут выполняться одинаковое количество времени, но при этом потреблять разное количество ресурсов процессора и памяти. Если оперировать терминами MS-SQL профайлера, то это такие показатели как: CPU, Duration, Reads, где CPU – суммарно затраченное процессорное время в миллисекундах, Duration – время выполнения запроса, Reads – количество логических операций чтения. При прочих равных условиях следует стремиться к уменьшению значений каждого из этих показателей.
В нашем продукте SPDesigner мы представили квинтэссенцию нашего опыта по оптимизации запросов для бухгалтерских баз данных. Путем несложных манипуляций программист может использовать ВК для автоматической оптимизации имеющихся в конфигурации запросов. Для этого требуется расставить несколько дополнительных конструкций в коде существующих запросов. При этом вмешательство в конфигурацию будет минимальным.
 
Преимущества такого подхода:
  • Не требуется самостоятельно исследовать запрос и искать пути его оптимального исполнения.
  • По сравнению с прямым запросом гораздо меньший объем изменений кода и легкость чтения.
  • Результаты выполнения запроса обрабатываются как стандартный результат запроса 1С – не требуется переписывать код, отвечающий за обработку результатов, как в случае прямого запроса.
  • Не зависит от изменения конфигурации.
Пример оптимизации.
Ниже представлен пример оптимизации запроса с указанием одиночного фильтра по двум субконто. Синим цветом на рисунке выделены пары запросов. Первая пара – работа 1С в стандартном режиме, вторая пара – режим перехвата и автоматической оптимизации. Как можно видеть на рисунке, суммарное время выполнения второй пары запросов более чем в два раза ниже, чем время выполнения запросов первой пары (неоптимизированных).

Пример трассы в MS-SQL профайлере

Ниже представлен пример кода, который потребовался для интеграции компоненты в стандартный отчет из типовой бухгалтерской конфигурации «оборотно-сальдовая ведомость по счету». Как можно видеть, интеграция совсем не сложная.

Пример кода 1С по перехвату и оптимизации запроса.

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

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

При использовании все той же "оборотно-сальдовой ведомости по счету", с указанием фильтров по двум большим группам товаров и контрагентов разница в производительности получилась еще больше.
 

Оборотно-сальдовая ведомость по счету

 
На скриншоте время указано в миллисекундах, замер производился с помощью "_GetPerformanceCounter();". Замер распространялся только на время выполнения метода "Ит.ВыполнитьЗапрос(Дата1, Дата2, Счет);". Как можно видеть в обычном режиме запрос работал 1793 секунды, или 29 минут 53 секунды. В режиме оптимизации запрос отработал за 39 секунд. Разница - в 46 раз!
Ниже представлен скриншот трассы из профайлера:

Пример трассы без оптимизации и с оптимизацией.

На скриншоте красным цветом выделены запросы без оптимизации, зеленым - с оптимизацией. Следует обратить внимание не только на время выполнения запросов, но, в частности, и на показатель READS. Количество чтений базы данных для оптимизированного запроса значительно меньше, чем для неоптимизированного.
По результатам одного из внедрений на одном из примеров была достигнута эффективность оптимизации в виде сокращения времени выполнения запроса в 100 раз.
Чем больше план счетов, чем больше количество элементов в справочниках, тем выше будет эффективность работы автоматически оптимизированного запроса.
 

Перепечатка, воспроизведение в любой форме, распространение, в том числе в переводе, любых материалов с сайта www.softpoint.ru возможны только с письменного разрешения компании "СофтПоинт". Это правило действует для всех без исключения случаев, кроме тех, когда в материале прямо указано разрешение на копирование (основание: Закон Российской Федерации "Об авторском праве и смежных правах").