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;