online_analyze. Поддержка 1С:Предприятие. Анализ данных после вызова SQL команд типа DML#
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: отсутствуют.
Схема размещения:
ext.
Библиотека online_analyze предоставляет набор функций, которые немедленно обновляют статистику после операций INSERT, UPDATE, DELETE или SELECT INTO в целевых таблицах. Этот модуль требуется для поддержки системы 1С:Предприятие.
Доработка#
Доработка не проводилась.
Ограничения#
Ограничения отсутствуют.
Установка#
Установка расширения online_analyze осуществляется во всех случаях, однако автоматическое включение и активация происходят только при выборе установки с поддержкой 1С, а также установки ролевой модели. Для установки данного расширения на уже развернутом экземпляре СУБД Pangolin необходимо загрузить расширение:
LOAD 'online_analyze';
SET online_analyze.enable = on;
Настройка#
Настройте online_analyze, используя следующие дополнительные переменные (указаны значения по умолчанию):
online_analyze.enable(off): включаетonline_analyze;online_analyze.table_type(temporary): типы таблиц, для которых выполняется немедленный анализ;online_analyze.verbose(off): выполняетANALYZE VERBOSE;online_analyze.threshold(50): минимальное число изменений строк, после которого может начаться немедленный анализ;online_analyze.scale_factor(0.1): процент от размера таблицы, при котором начинается немедленный анализ;online_analyze.local_tracking(on): включает отслеживание временных таблиц в рамках обслуживающего процесса. Когда эта переменная отключена (off),online_analyzeиспользует для временных таблиц системную статистику по умолчанию;online_analyze.min_interval(10000): минимальный интервал времени между вызовамиANALYZEдля отдельной таблицы (в миллисекундах).
Использование модуля#
Далее описывается пример использования расширения:
Загрузите и выключите расширение:
LOAD 'online_analyze'; SET online_analyze.enable = off;Создайте временную таблицу и заполните ее данными:
CREATE TEMP TABLE t (a INTEGER,v TEXT); INSERT INTO t (SELECT *, CASE WHEN random() >= 0.5 THEN NULL ELSE 'y' END FROM generate_series(1,100));Проверьте, что при добавлении новых данных количество ожидаемых строк в плане запроса не изменилось:
EXPLAIN SELECT * FROM t WHERE v IS NOT NULL; INSERT INTO t (SELECT *, CASE WHEN random() >= 0.5 THEN NULL ELSE 'y' END FROM generate_series(200,300)); EXPLAIN SELECT * FROM t WHERE v IS NOT NULL;В первом и втором плане одинаковое количество ожидаемых строк (значение
rows=):QUERY PLAN ------------------------------------------------------ Seq Scan on t (cost=0.00..22.70 rows=1264 width=36) Filter: (v IS NOT NULL) (2 rows) > INSERT 0 101 QUERY PLAN ------------------------------------------------------ Seq Scan on t (cost=0.00..22.70 rows=1264 width=36) Filter: (v IS NOT NULL) (2 rows)Включите расширение:
SET online_analyze.enable = on;Проверьте, что при добавлении новых данных произведен автоматический анализ таблицы и количество ожидаемых строк в плане запроса изменилось:
EXPLAIN SELECT * FROM t WHERE v IS NOT NULL; INSERT INTO t (SELECT *, CASE WHEN random() >= 0.5 THEN NULL ELSE 'y' END FROM generate_series(200,300)); EXPLAIN SELECT * FROM t WHERE v IS NOT NULL;Во втором плане должно быть другое количество ожидаемых строк (значение
rows):QUERY PLAN ------------------------------------------------------ Seq Scan on t (cost=0.00..22.70 rows=1264 width=36) Filter: (v IS NOT NULL) (2 rows) > INFO: analyzing "pg_temp_4.t" INFO: "t": scanned 2 of 2 pages, containing 302 live rows and 0 dead rows; 302 rows in sample, 302 estimated total rows INFO: analyze "t" took 0.00 seconds INSERT 0 101 QUERY PLAN --------------------------------------------------- Seq Scan on t (cost=0.00..5.02 rows=150 width=6) Filter: (v IS NOT NULL) (2 rows)Удалите временную таблицу:
DROP TABLE t;