4. Улучшения 1C#
4. Улучшения 1C #
4.1. Ядро #
Решена проблема легких блокировок при большом количестве одновременных подключений к СУБД.
Максимальный размер данных в ячейках таблицы, поддерживаемый модулем pg_dump, был увеличен с 1 ГБ до 2 ГБ.
Изменены значения параметров, которые при значениях по умолчанию могли приводить к ухудшению производительности 1С.
Оптимизирована работа блокировок с временными таблицами:
Не устанавливаются блокировки на системных таблицах каталога для записей о временных таблицах.
Оптимизация отправки инвалидационных сообщений при работе с временными таблицами путем замены
spin lock
на барьер памяти.
Реализована возможность повышать точность оценки скалярных статистик для таблиц со сложным распределением данных без увеличения параметра
default_statistics_target
.Реализовано отложенное размещение временных таблиц: СУБД откладывает физическое выделение места на диске до момента фактической необходимости, что существенно снижает нагрузку на подсистему ввода-вывода.
Оптимизирован механизм работы с временными таблицами, который позволяет хранить информацию о временных таблицах в оперативной памяти. Это позволяет избежать так называемой проблемы “раздутия системного каталога”, которая может происходить в высоконагруженных системах или системах с ограниченными вычислительными ресурсами. В том числе оптимизировано количество системных вызовов синхронизации с диском при работе с временными таблицами.
Оптимизирована работа оператора
LIKE
для типаmchar/mvarchar
. Оптимизация заключается в том, что для простого шаблона, которому требуется найти подстроку в строке, используется более оптимальные функции библиотеки по работе с Юникодом.Оптимизирована работа команды
ANALYZE
для широких таблиц. Это обеспечивает прирост производительности командыANALYZE
для широких таблиц на порядок.
4.2. Планировщик #
Оптимизировано выполнение запросов, использующих агрегатные функции, за счет изменения порядка полей группировки.
Улучшено прогнозирование соединений таблиц с многоколоночными индексами, что позволяет получить более точную оценку количества строк и выбрать оптимальный оператор план запроса.
Оптимизировано кеширование временных таблиц за счет уменьшения списка инвалидации.
Оптимизированы различные операции со списком колонок, используемых в запросе, для снижения накладных расходов на выполнение запросов и оптимизацию использования памяти.
Оптимизировано выполнение запросов путем выделения общих условий для операций
OR
иAND
в выраженияхWHERE
, с целью ускорения фильтрации на ранних этапах их обработки.Ускорено выполнение запросов, использующих конструкцию
В (&МассивЗначений)
. Подробнее в статье Решение проблемы Values в Postgres.Исправлена ошибка некорректной оценки строк в результате соединения нескольких таблиц, когда из одной таблицы выбиралось 0 строк и на результат соединения накладывались дополнительные условия.
Улучшен алгоритм оценки селективности на основе гистограмм для запросов, использующих соединения по нескольким столбцам таблиц.
Доработан алгоритм выбора подходящего индекса путем учета селективности каждого рассматриваемого планировщиком индекса. Это позволяет с большей вероятностью задействовать покрывающий все условия индекс, что приводит к более быстрому выполнению запросов и экономии вычислительных ресурсов. Как пример, это позволяет ускорить обновление итогов регистров накопления. Подробнее в статье СУБД Tantor Special Edition 1C: ускоряем обновление итогов регистров накопления.
Исправлена ошибка в механизме
multicolumn index
(функцияlocate_inner_multicolumn_index
), приводившая к выбору неправильного индекса для определения селективности по заданным условиям.Реализована трансформация
EXISTS
-подзапросов вLATERAL SEMI JOIN
, которая значительно ускоряет обработку сложных аналитических запросов, использующих механизм ограничения доступа на уровне записей (РЛС) в 1С.Реализован механизм
Join Predicate Pushdown
, который значительно ускоряет обработку сложных аналитических запросов, использующих, как пример, обращение к виртуальным таблицам регистров сведений, накопления, бухгалтерии.Дополнительно оптимизировано выполнение запросов, использующих агрегатные функции, за счет изменения порядка полей при группировке с предварительной операцией сортировки.
4.3. Модули #
Поддержаны логические слоты репликации для механизма копий баз данных в dbcopies_decoding.
Ускорена функция
SELECT FASTTRUNCATE
, предназначенная для усечения временных таблиц в fasttrun. Подробнее в статье Временные таблицы и SELECT FASTTRUNCATE.Ускорено выполнение запросов, использующих временные таблицы, которые были созданы из таблицы значений, переданной в запрос в качестве параметра в online_analyze. Подробнее в статье 1С и СУБД Tantor: история одного внедрения.
Реализовано расширение pg_trace, предназначенное для удобного профилирования SQL-запросов согласно установленным условиям сбора трассировки. Подробнее в документации pg_trace и статье pg_trace — трассировщик запросов от компании Тантор Лабс.
Реализовано расширение
pg_stat_advisor
, которое автоматически анализирует планы выполнения запросов и выявляет проблемные места с неточной оценкой планировщика. Расширение предоставляет конкретные рекомендации по созданию расширенной статистики или автоматически её создает, в зависимости от настройки. В некоторых ситуациях это позволяет значительно ускорить работу критически важных запросов без глубокого погружения в их внутреннюю структуру.Расширение pg_stat_statements адаптировано под специфику 1С: оно автоматически нормализует имена временных таблиц, что позволяет собирать более релевантную статистику по однотипным запросам, в которых отличаются только имена временных таблиц.