Приветствую Вас ГостьВторник, 14.05.2024, 14:53

Каталог статей


Вопросы производительности регистра бухгалтерии

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

Индексы.

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

Для хранения одного значения составного типа данных (содержащего только ссылки) системой используются три поля базы данных: фактический тип значения, имя таблицы и идентификатор записи в этой таблице.
Для хранения каждого примитивного типа данных (Число, Дата, Строка, Булево) в таблицу базы данных будет добавлено еще по одному полю. 
Т.е. если в составной тип добавить все 4 примитивных типа, то количество полей будет равно 7.

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

Так как в SQL Server есть ограничение на 16 возможных индексов, то в индекс попадут только период, счет, измерение и первое субконто.

Пример определения количества полей для регистра бухгалтерии с 2-мя измерениями (Организация и Валюта) и 5 субконто без примитивных типов в составе.

№ поля Поле Комментарий
1 Период Обязательное поле
2 Счет Счет плана счетов (ПланСчетовСсылка.<имя>)
3 Организация Измерение регистра бухгалтерии Организация (СправочникСсылка.<имя>)
4 Валюта Измерение регистра бухгалтерии Валюта (СправочникСсылка.<имя>)
5, 6, 7 Субконто1 Три поля для хранения составного типа данных (только ссылки)
8, 9, 10 Субконто2 Три поля для хранения составного типа данных (только ссылки)
11, 12, 13 Субконто3 Три поля для хранения составного типа данных (только ссылки)
14, 15, 16 Субконто4 Три поля для хранения составного типа данных (только ссылки)
  Субконто5 Три поля для хранения составного типа данных (только ссылки)

Из таблицы видно, что если количество субконто больше 4, то последние субконто не входят в индекс.

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

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

Во время записи движений в регистр блокируются строки таблицы итогов для внесения в них изменений.

Если индекс охватывает все поля регистра, блокируется одна изменяемая и соседние (блокировка соседних строк связана с особенностями работы SQL) строки.

Если вместо одной строки итогов был получен диапазон строк, блокируется весь диапазон (плюс соседние строки). Вероятность, что пользователи «столкнутся» при проведении документов, увеличивается.

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

Если же постановка задачи исключает возможность решить ее с помощью объекта Регистр накопления, следует располагать субконто с малой селективностью (обладающие малым количеством значений и редко используемые для отбора в отчетах) последними на счетах. Это сократит диапазон полученных по индексу строк и время на поиск в нем нужной строки.

Влияние Субконто 

Рекомендуется располагать субконто на счете с учетом следующего правила:

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

Также на производительность влияет и то, в каком порядке привязаны на разные счета одни и те же виды субконто, если запрос выполняется сразу по нескольким счетам. 
Упорядочить виды субконто в запросе можно используя параметр виртуальной таблицы "Субконто".

Категория: Регистры | Добавил: leshic (14.02.2023)
Просмотров: 284 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0