analyzedb
Утилита, которая выполняет операции ANALYZE для таблиц инкрементально и параллельно.
Для оптимизированных для добавления (AO) таблиц analyzedb обновляет статистику только если она неактуальна.
Синтаксис
analyzedb -d <dbname>
{ -s <schema>
| -t <schema>.<table>
[ -i <col1>[,<col2>, ...]
| -x <col1>[,<col2>, ...] ]
| { -f | --file } <config_file>
}
[ -l | --list ]
[ --gen_profile_only ]
[ -p <parallel_level> ]
[ --full ]
[ --skip_root_stats ]
[ --skip_orca_root_stats ]
[ -v | --verbose ]
[ -a ]
analyzedb { --clean_last | --clean_all }
analyzedb --version
analyzedb { -? | -h | --help }
Описание
Утилита analyzedb обновляет статистику по данным для указанных таблиц инкрементально и параллельно.
При выполнении ANALYZE утилита analyzedb создает снимок метаданных таблицы и сохраняет его на диске мастер-хоста.
ANALYZE выполняется только если таблица была изменена.
Если таблица или партиция не были изменены с момента последнего анализа, analyzedb автоматически пропускает таблицу или партицию, так как она уже содержит актуальную статистику:
-
Для оптимизированных для добавления таблиц
analyzedbобновляет статистику инкрементально, если статистика неактуальна (например, если данные таблицы изменились после того, как статистика была собрана). Если статистики для таблицы нет, она собирается. -
Для heap-таблиц статистика обновляется всегда.
Чтобы обновить статистику оптимизированных для добавления таблиц, даже если статистика актуальна, укажите параметр --full.
По умолчанию analyzedb использует до 5 параллельных сессий для анализа таблиц.
Для каждой сессии analyzedb выполняет команду ANALYZE для конкретной базы данных и указывает разные имена таблиц.
Параметр -p <parallel_level> управляет максимальным количеством параллельных сессий.
Партиционированные оптимизированные для добавления таблицы
Для партиционированной оптимизированной для добавления таблицы analyzedb проверяет родительскую партицию и конечные дочерние партиции.
При необходимости утилита обновляет статистику для неактуальных партиций и родительской партиции.
Утилита analyzedb должна выборочно анализировать дополнительные партиции внутри партиционированной таблицы при обнаружении устаревшей партиции, даже если статистика уже была собрана.
Рекомендуется запускать analyzedb для родительской партиции каждый раз при добавлении новых партиций.
В ходе этой операции конечные дочерние партиции анализируются параллельно, а обновленная статистика агрегируется в родительской партиции.
Примечания
Утилита analyzedb обновляет статистику для оптимизированных для добавления таблиц, если таблица была изменена командами DML или DDL, включая INSERT, DELETE, UPDATE, CREATE TABLE, ALTER TABLE и TRUNCATE.
Утилита определяет факт изменения таблицы, сравнивая метаданные системного каталога с предыдущим снимком метаданных, созданным во время предыдущего запуска analyzedb.
Снимки метаданных таблиц сохраняются в виде файлов состояния в каталоге db_analyze/<db_name>/<timestamp> внутри каталога данных мастера Greengage DB.
Утилита сохраняет информацию о снимках за последние 8 дней, а также три последних каталога состояния независимо от их возраста; все остальные каталоги автоматически удаляются.
Вы также можете указать параметры --clean_last или --clean_all, чтобы удалить файлы состояния, созданные утилитой analyzedb.
Если вы не указали таблицу, набор таблиц или схему, утилита analyzedb собирает статистику для всех таблиц системного каталога и пользовательских таблиц в базе данных по мере необходимости.
Внешние таблицы не обрабатываются утилитой analyzedb.
Имена таблиц, содержащие пробелы, не поддерживаются.
Выполнение команды ANALYZE для таблицы без использования утилиты analyzedb не обновляет метаданные, которые analyzedb использует для определения актуальности статистики таблицы.
Параметры
- --clean_last
-
Удаляет файлы состояния, созданные последней операцией
analyzedb. Все остальные параметры, кроме-d, игнорируются. - --clean_all
-
Удаляет все файлы состояния, созданные
analyzedb. Все остальные параметры, кроме-d, игнорируются. - -d <dbname>
-
Имя базы данных, содержащей таблицы для анализа. Если этот параметр не указан, имя базы данных берется из переменной окружения
PGDATABASE. Если переменнаяPGDATABASEне установлена, используется имя пользователя, указанное при подключении. - -f <config_file>, --file <config_file>
-
Текстовый файл, содержащий список таблиц для анализа. Можно указать путь к файлу относительно текущего каталога.
Файл перечисляет по одной таблице на строку. Имена таблиц должны включать имя схемы. Опционально можно указать список столбцов с помощью
-iили-x. Никакие другие параметры в файле не допускаются. Параметры, такие как--full, должны быть указаны в командной строке.Для указания таблиц для анализа допускается использовать только один из следующих параметров:
-f/--file,-tили-s.При выполнении
ANALYZEдля нескольких таблицanalyzedbсоздает параллельные сессии для одновременного анализа. Параметр-pзадает максимальное количество параллельных сессий.Пример содержимого файла:
public.nation public.lineitem -i l_shipdate,l_receiptdate
- --full
-
Выполняет операцию
ANALYZEдля всех указанных таблиц, даже если их статистика актуальна. - --gen_profile_only
-
Обновляет снимок статистики таблиц, используемый
analyzedb, без выполнения операцийANALYZE.Если другие параметры указывают таблицы или схему, снимок обновляется только для указанных таблиц.
Используйте этот параметр, если команда
ANALYZEбыла выполнена вручную и необходимо синхронизировать снимокanalyzedb. - -i <col1>,<col2>,…
-
(Опционально) Собирает статистику только для указанных столбцов таблицы. Используется вместе с
-t.Можно указать только один из параметров:
-iили-x. - -l, --list
-
Выводит список таблиц, которые будут проанализированы с указанными параметрами. Операции
ANALYZEпри этом не выполняются. - -p <parallel_level>
-
Количество таблиц, анализируемых параллельно. Значение должно быть целым числом от
1до10включительно. По умолчанию —5. - --skip_root_stats
-
Параметр устарел и больше не используется. Его можно удалить из скриптов.
- --skip_orca_root_stats
-
Пропускает сбор статистики для родительской партиции.
ПРИМЕЧАНИЕНе используйте этот параметр, если включен оптимизатор GPORCA.
Используйте данный параметр только в случае, если команды
ANALYZE ROOTPARTITIONвыполняются слишком долго.ВНИМАНИЕПосле запуска
analyzedbс этим параметром последующие операции не будут обновлять статистику родительской партиции, если таблица не была изменена. - -s <schema>
-
Выполняет анализ всех таблиц в указанной схеме. Допускается указание только одного имени схемы.
Для указания таблиц для анализа можно использовать только один из следующих параметров:
-f/--file,-tили-s. - -t <schema>.<table>
-
Выполняет анализ только указанной таблицы. Имя таблицы должно включать имя схемы. Допускается указание только одной таблицы.
Для указания таблиц для анализа можно использовать только один из следующих параметров:
-f/--file,-tили-s. - -x <col1>,<col2>,…
-
(Опционально) Исключает указанные столбцы из сбора статистики. Используется вместе с
-t.Можно указать только один из параметров:
-iили-x. - -a
-
Тихий режим. Не требует подтверждения от пользователя.
- -h, -?, --help
-
Показывает справочную информацию.
- -v, --verbose
-
Включает подробное логирование. Вывод содержит список проанализированных таблиц (включая конечные дочерние партиции) и длительность каждой операции
ANALYZE. - --version
-
Показывает версию утилиты.
Примеры
Пример сбора статистики только для набора столбцов таблицы.
Собрать статистику для столбцов shipdate и receiptdate таблицы public.orders в базе данных mytest:
$ analyzedb -d mytest -t public.orders -i shipdate,receiptdate
Пример сбора статистики для таблицы с исключением набора столбцов.
Собрать статистику для таблицы public.foo в базе данных mytest, исключив столбцы bar и test2:
$ analyzedb -d mytest -t public.foo -x bar,test2
Пример сбора статистики таблиц, указанных в файле.
Собрать статистику для таблиц, перечисленных в файле analyze-tables, в базе данных mytest:
$ analyzedb -d mytest -f analyze-tables
Если не указаны таблица, набор таблиц или схема, утилита analyzedb собирает статистику по мере необходимости для всех таблиц системного каталога и пользовательских таблиц в указанной базе данных.
Собрать статистику для всех таблиц системного каталога и пользовательских таблиц в базе данных mytest:
$ analyzedb -d mytest
Можно создать функцию PL/Python, чтобы запускать утилиту analyzedb как функцию Greengage DB.
Команда CREATE FUNCTION создает пользовательскую функцию PL/Python, которая выполняет analyzedb и выводит результат в командную строку.
Параметры analyzedb передаются как аргумент функции:
CREATE OR REPLACE FUNCTION analyzedb(params TEXT)
RETURNS VOID AS
$BODY$
import subprocess
cmd = ['analyzedb', '-a'] + params.split()
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# подробный вывод процесса
for line in iter(p.stdout.readline, ''):
plpy.info(line);
p.wait()
$BODY$
LANGUAGE plpythonu VOLATILE;
При выполнении этой команды SELECT пользователем gpadmin утилита analyzedb выполняет анализ таблицы public.mytable в базе данных mytest:
SELECT analyzedb('-d mytest -t public.mytable');
Чтобы создать функцию PL/Python, процедурный язык PL/Python должен быть зарегистрирован в базе данных.
Например, эта команда CREATE LANGUAGE, выполненная от имени gpadmin, регистрирует PL/Python как недоверенный язык:
CREATE LANGUAGE plpythonu;