×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

6.1.44. ANALYZE

6.1.44. ANALYZE

ANALYZE — сбор статистики о базе данных

Синтаксис

ANALYZE [ ( option [, ...] ) ] [ table_and_columns [, ...] ]

где option может быть одним из:

    VERBOSE [ boolean ]
    SKIP_LOCKED [ boolean ]
    BUFFER_USAGE_LIMIT size

и table_and_columns имеет вид:

    table_name [ ( column_name [, ...] ) ]

Описание

ANALYZE собирает статистику о содержимом таблиц в базе данных и сохраняет результаты в системном каталоге pg_statistic. Впоследствии планировщик запросов использует эту статистику, чтобы помочь определить наиболее эффективные планы выполнения запросов.

Без списка table_and_columns ANALYZE обрабатывает каждую таблицу и материализованное представление в текущей базе данных, которые текущий пользователь имеет право анализировать. При наличии списка ANALYZE обрабатывает только указанные таблицы. Дополнительно можно указать список имен столбцов для таблицы, и в этом случае будет собрана статистика только для этих столбцов.

Параметры

VERBOSE

Включает отображение сообщений о прогрессе.

SKIP_LOCKED

Указывает, что ANALYZE не должен ждать освобождения конфликтующих блокировок при начале работы с отношением: если отношение не может быть заблокировано немедленно без ожидания, оно пропускается. Обратите внимание, что даже с этой опцией ANALYZE все еще может блокироваться при открытии индексов отношения или при получении строк-образцов из секций, дочерних таблиц наследования и некоторых типов внешних таблиц. Также, хотя ANALYZE обычно обрабатывает все секции указанных секционированных таблиц, эта опция приведет к тому, что ANALYZE пропустит все секции, если на секционированной таблице есть конфликтующая блокировка.

BUFFER_USAGE_LIMIT

Задает размер кольцевого буфера Buffer Access Strategy (стратегии доступа к буферам) для ANALYZE. Этот размер используется для вычисления количества разделяемых буферов, которые будут повторно использоваться в рамках этой стратегии. 0 отключает использование Buffer Access Strategy. Когда эта опция не указана, ANALYZE использует значение из vacuum_buffer_usage_limit. Более высокие настройки могут позволить ANALYZE выполняться быстрее, но слишком большое значение может привести к вытеснению слишком многих других полезных страниц из разделяемых буферов. Минимальное значение — 128 kB, а максимальное — 16 GB.

boolean

Указывает, следует ли включить или выключить выбранную опцию. Вы можете написать TRUE, ON или 1, чтобы включить опцию, и FALSE, OFF или 0, чтобы выключить ее. Значение boolean также может быть опущено, и в этом случае предполагается TRUE.

size

Указывает объем памяти в килобайтах. Размеры также могут быть указаны строкой, содержащей числовое значение, за которым следует одна из следующих единиц измерения памяти: B (байты), kB (килобайты), MB (мегабайты), GB (гигабайты) или TB (терабайты).

table_name

Имя (возможно, с указанием схемы) конкретной таблицы для анализа. Если опущено, анализируются все обычные таблицы, секционированные таблицы и материализованные представления в текущей базе данных (но не внешние таблицы). Если указанная таблица является секционированной, обновляется как статистика наследования секционированной таблицы в целом, так и статистика отдельных секций.

column_name

Имя конкретного столбца для анализа. По умолчанию — все столбцы.

Вывод

При указании VERBOSE команда ANALYZE выводит сообщения о прогрессе, указывая, какая таблица в данный момент обрабатывается. Также выводятся различные статистические данные о таблицах.

Замечания

Для анализа таблицы обычно необходимо иметь привилегию MAINTAIN на таблицу. Однако владельцам базы данных разрешено анализировать все таблицы в своих базах данных, кроме общих каталогов. ANALYZE пропустит любые таблицы, на которые у вызывающего пользователя нет права на анализ.

Внешние таблицы анализируются только при явном выборе. Не все оболочки сторонних данных (foreign data wrappers) поддерживают ANALYZE. Если оболочка таблицы не поддерживает ANALYZE, команда выводит предупреждение и ничего не делает.

В конфигурации Digital Q.DataBase по умолчанию демон автоочистки (см. Раздел 3.9.1.6) заботится об автоматическом анализе таблиц, когда они впервые загружаются данными, и по мере их изменения в ходе обычной работы. Когда автоочистка отключена, рекомендуется периодически запускать ANALYZE или сразу после внесения основных изменений в содержимое таблицы. Точная статистика поможет планировщику выбрать наиболее подходящий план запроса и тем самым повысить скорость обработки запросов. Распространенная стратегия для баз данных с преимущественно чтением — запускать VACUUM и ANALYZE один раз в день в период низкой нагрузки. (Этого будет недостаточно, если есть высокая активность обновлений.)

Пока выполняется ANALYZE, search_path временно изменяется на pg_catalog, pg_temp.

ANALYZE требует только блокировку на чтение целевой таблицы, поэтому может выполняться параллельно с другой не-DDL активностью на таблице.

Статистика, собираемая командой ANALYZE, обычно включает список некоторых наиболее частых значений в каждом столбце и гистограмму, показывающую приблизительное распределение данных в каждом столбце. Одно или оба из этих значений могут быть опущены, если ANALYZE считает их неинтересными (например, в столбце с уникальным ключом нет общих значений) или если тип данных столбца не поддерживает соответствующие операторы. Подробнее о статистике можно прочитать в Глава 3.9.

Для больших таблиц ANALYZE берет случайную выборку содержимого таблицы, а не проверяет каждую строку. Это позволяет анализировать даже очень большие таблицы за небольшое время. Однако обратите внимание, что статистика является лишь приблизительной и будет немного меняться каждый раз при запуске ANALYZE, даже если фактическое содержимое таблицы не изменилось. Это может привести к небольшим изменениям в расчетной стоимости планировщика, отображаемой командой EXPLAIN. В редких случаях эта недетерминированность вызовет изменение выбора планов запросов планировщиком после выполнения ANALYZE. Чтобы избежать этого, увеличьте объем собираемой статистики командой ANALYZE, как описано ниже.

Объем анализа можно контролировать, настраивая конфигурационную переменную default_statistics_target, или для каждого столбца отдельно, устанавливая цель статистики для столбца с помощью ALTER TABLE ... ALTER COLUMN ... SET STATISTICS. Целевое значение устанавливает максимальное количество записей в списке наиболее частых значений и максимальное количество корзин в гистограмме. Целевое значение по умолчанию равно 100, но его можно увеличить или уменьшить, чтобы сбалансировать точность оценок планировщика со временем, затрачиваемым на выполнение ANALYZE, и объемом пространства, занимаемым в pg_statistic. В частности, установка цели статистики в ноль отключает сбор статистики для этого столбца. Это может быть полезно для столбцов, которые никогда не используются как часть предложений WHERE, GROUP BY или ORDER BY запросов, поскольку планировщик не будет использовать статистику по таким столбцам.

Наибольшая цель статистики среди анализируемых столбцов определяет количество строк таблицы, выбираемых для подготовки статистики. Увеличение цели приводит к пропорциональному увеличению времени и пространства, необходимых для выполнения ANALYZE.

Одним из значений, оцениваемых командой ANALYZE, является количество уникальных значений, появляющихся в каждом столбце. Поскольку проверяется только подмножество строк, эта оценка иногда может быть довольно неточной, даже при максимально возможной цели статистики. Если эта неточность приводит к плохим планам запросов, более точное значение можно определить вручную и затем установить с помощью ALTER TABLE ... ALTER COLUMN ... SET (n_distinct = ...).

Если анализируемая таблица имеет дочерние таблицы наследования, ANALYZE собирает два набора статистики: один по строкам только родительской таблицы, и второй, включающий строки как родительской таблицы, так и всех ее дочерних таблиц. Этот второй набор статистики необходим при планировании запросов, которые обрабатывают дерево наследования как единое целое. Сами дочерние таблицы в этом случае не анализируются индивидуально. Однако демон автоочистки будет учитывать только вставки или обновления в самой родительской таблице при принятии решения о запуске автоматического анализа для этой таблицы. Если в эту таблицу редко вставляют или обновляют, статистика наследования не будет актуальной, пока вы не запустите ANALYZE вручную.

Для секционированных таблиц ANALYZE собирает статистику путем выборки строк из всех секций; кроме того, он рекурсивно перейдет в каждую секцию и обновит ее статистику. Каждая конечная (листовая) секция анализируется только один раз, даже при многоуровневом секционировании. Статистика не собирается для только родительской таблицы (без данных из ее секций), поскольку при секционировании гарантируется, что она пуста.

Демон автоочистки не обрабатывает секционированные таблицы, а также не обрабатывает родителей наследования, если изменяются только дочерние таблицы. Обычно необходимо периодически запускать ручной ANALYZE, чтобы поддерживать статистику иерархии таблиц в актуальном состоянии.

Если какие-либо дочерние таблицы или секции являются внешними таблицами, чьи оболочки сторонних данных (foreign data wrappers) не поддерживают ANALYZE, эти таблицы игнорируются при сборе статистики наследования.

Если анализируемая таблица полностью пуста, ANALYZE не запишет новую статистику для этой таблицы. Любая существующая статистика будет сохранена.

Каждый серверный процесс (backend), выполняющий ANALYZE, будет сообщать о своем прогрессе в представлении pg_stat_progress_analyze. См. Раздел 3.12.4.1 для получения подробной информации.

Совместимость

В стандарте SQL нет оператора ANALYZE.

Следующий синтаксис использовался до версии Digital Q.DataBase 11 и до сих пор поддерживается:

ANALYZE [ VERBOSE ] [ table_and_columns [, ...] ]

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению