Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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;