4. Улучшения 1C#

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С: оно автоматически нормализует имена временных таблиц, что позволяет собирать более релевантную статистику по однотипным запросам, в которых отличаются только имена временных таблиц.