Оптимизация конфигураций при работе с базами данных в формате SQL

Одним из основных принципов архитектуры 1С:Предприятия является одинаковое функционирование конфигурации при работе с базами данных в формате DBF/CDX и базами данных в формате SQL. Это необходимо для широкого распространения единых прикладных решений и обеспечения плавной масштабируемости. Идентичность работы конфигураций в полной мере относится к их функциональной части, но, разумеется, не относится к производительности конкретных режимов и алгоритмов. Типовые конфигурации могут использоваться с любыми версиями 1С:Предприятия от однопользовательских до клиент-серверных. В них выбираются, обычно, алгоритмы и решения обеспечивающие приемлемые показатели при работе с обоими форматами хранения. В то же время, при внедрении или создании конфигурации, которая будет заведомо использоваться с базой данных в формате SQL имеет смысл в отдельных алгоритмах учесть особенности работы различных механизмов 1С:Предприятия в клиент-серверном варианте.

Одним из основных принципов архитектуры 1С:Предприятия является одинаковое функционирование конфигурации при работе с базами данных в формате DBF/CDX и базами данных в формате SQL. Это необходимо для широкого распространения единых прикладных решений и обеспечения плавной масштабируемости. Идентичность работы конфигураций в полной мере относится к их функциональной части, но, разумеется, не относится к производительности конкретных режимов и алгоритмов. Типовые конфигурации могут использоваться с любыми версиями 1С:Предприятия от однопользовательских до клиент-серверных. В них выбираются, обычно, алгоритмы и решения обеспечивающие приемлемые показатели при работе с обоими форматами хранения. В то же время, при внедрении или создании конфигурации, которая будет заведомо использоваться с базой данных в формате SQL имеет смысл в отдельных алгоритмах учесть особенности работы различных механизмов 1С:Предприятия в клиент-серверном варианте.

Основной выигрыш с точки зрения производительности при работе с базами данных в формате SQL достигается за счет применения тех механизмов 1С:Предприятия, которые осуществляют значительный обЪем операций по выборке данных непосредственно на SQL сервере. Так как сам алгоритм встроенного языка всегда отрабатывает на клиентском компьютере, то максимальный выигрыш достигается при использовании обЪектов языка, выполняющих групповую выборку данных в одном вызове метода обЪекта. Список таких обЪектов и режимов в которых они дают серьезные преимущества приведен в документации поставляемой с версиями 1С:Предприятия для SQL в разделе "Производительность системы".

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

Приведем пример. Обычно, одним из узких мест является проведение документов, выполняющих автоматическое списание товаров или материалов. Для автоматического списания используется обращение к текущим остаткам регистра оперативного учета с помощью обЪекта "Регистр" или обЪекта "Запрос". При проведении задним числом будут также рассчитываться итоги на проводимый документ (обЪектом "Запрос" при указании в качестве границы текущего документа, а обЪектом "Регистр" при выполнении временного расчета на текущий документ). Получение итогов по большому количеству товаров, а особенно с расчетом итогов на документ, может выполняться достаточно долго. В алгоритме проведения существует возможность обрабатывать каждый товар документа отдельно или выполнить один запрос (или обращение к регистру) для получения итогов по всем товарам документа, выгруженным предварительно в список значений. В запросе будет использован оператор "В", а при работе с обЪектом "Регистр" установка фильтра. Временный расчет в любом случае имеет смысл, очевидно, выполняться по всем товарам документа, так как многократная обработка движений регистра существенно замедлит выполнение алгоритма (исключение может составлять вариант, когда для измерения регистра "Товар" установлен в метаданных признак отбора). Обработка текущих итогов по списку товаров при использовании обычных версий 1С:Предприятия будет не вполне эффективной, так как время обработки будет зависеть от общего количества итогов по товарам в информационной базе. В то же время, при использовании версий 1С:Предприятия для SQL более производительным будет вариант единовременной выборки всех итогов по товарам документа с помощью запроса с условием или метода "ВыгрузитьИтоги" обЪекта "Регистр" с установкой фильтра. Это обЪясняется тем, что оба эти механизма будут использовать для отбора необходимой информации возможности SQL-сервера и на клиентском компьютере будет выполняться обработка только необходимой информации.

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

При работе с базой данных в формате DBF/CDX выборка может осуществляться как перебором документов обЪектом "Документ" (с поверкой реквизита в алгоритме модуля) так и с помощью обЪекта "Запрос" с соответствующим условием. Причем скорость выполнения обоих алгоритмов будет различаться не существенно (разумеется, если не существует подходящей графы отбора). При использовании версий для SQL использование запроса будет существенно эффективнее, разумеется, если количество выбираемых документов значительно меньше их общего количества в выбранном интервале. При работе с базой данных в формате DBF/CDX обЪект "Запрос" редко используется для выборки элементов справочника. Однако, при использовании версий для SQL применение запроса для отбора элементов справочника по некоторому критерию будет весьма эффективным.

Следует заметить, что при использовании обЪекта "Запрос" для получения существенного выигрыша в версиях для SQL следует придерживаться общих рекомендаций по оптимизации запросов, приведенных в других разделах, так как значительный выигрыш будет достигаться только в том случае, если сам запрос максимально отрабатывает непосредственно на SQL-сервере.

При обращении к бухгалтерским итогам при использовании версий для SQL часто использование метода "ВыполнитьЗапрос" и обращение затем к результатам запроса эффективнее, чем использование отдельных вызовов методов для обращения к остаткам и оборотам.

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

При необходимости получения некоторой выборки бухгалтерских проводок рекомендуется использовать обЪект "Операция" в режиме "ВыбратьОперацииСПроводками" с максимальным указанием критериев отбора в параметрах метода и методами "ИспользоватьСубконто" и "ИспользолватьКорСубконто". Такая выборка будет существенно эффективнее, чем фильтрация проводок проверками в алгоритме модуля.

(По материалам ИТС фирмы 1С)

 

Комментарии

2
  • Хранитель_врат
    обзор поверхностный, и все теперь под оптимизацией под sql будут понимать изменение кода в конфигураторе, а есть еще и сам sql server.
    может кто даст рекомендации по этому поводу ?.
  • Хранитель_врат
    уважаемый peka!

    рекомедация тут может быть дана не вам, а господам ис 1с. не надо сидеть между стульев (sql-dbf) делать надо одну версию - sql и под нее оптимизировать все. проблемы 1с привнедрении такого решения состоят в том, что им приется раскрыть карты и показать, что стоимость их решения совсем не та что в прайсе. на чем строиться маркетинговая политика 1с - народной бухлалтерской программы в ценовой политике. версия sql существенно удорожит продукт (раза в два точно). но если собрать в итоге те деньги, которые предприятие платит за внедрение (стоимость решения) то здесь цифры будут отличаться немного. зато какая скорость! сколько денег удасться сохранить для бизнеса.
    пример. напутали менеджеры чтото в системе. нужно провести документы по новой за неделю. чистое время 18 часов (2xpiii 1000, 256 sql). самопальная система в той же конфигурации м тем же сервером бд при подключенныз 120 пользователях возвращает успешное завершение операции за 5-10 минут.