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

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

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

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

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

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

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

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

6.1.49. CLUSTER

6.1.49. CLUSTER

CLUSTER — кластеризация таблицы в соответствии с индексом

Синтаксис

CLUSTER [ ( option [, ...] ) ] [ table_name [ USING index_name ] ]

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

    VERBOSE [ boolean ]

Описание

CLUSTER указывает Digital Q.DataBase кластеризовать таблицу, указанную параметром table_name, на основе индекса, указанного параметром index_name. Индекс должен быть уже определен для table_name.

Когда таблица кластеризуется, она физически переупорядочивается на основе информации индекса. Кластеризация — это однократная операция: при последующем обновлении таблицы изменения не кластеризуются. То есть не делается попыток сохранить новые или обновленные строки в соответствии с порядком индекса. (При желании можно периодически выполнять повторную кластеризацию, снова выполняя эту команду. Также установка параметра хранения fillfactor таблицы меньше 100% может помочь сохранить порядок кластеризации при обновлениях, поскольку обновленные строки остаются на той же странице, если там достаточно места.)

Когда таблица кластеризована, Digital Q.DataBase запоминает, по какому индексу она была кластеризована. Форма CLUSTER table_name повторно кластеризует таблицу, используя тот же индекс, что и раньше. Вы также можете использовать формы CLUSTER или SET WITHOUT CLUSTER команды ALTER TABLE для установки индекса, который будет использоваться для будущих операций кластеризации, или для очистки любой предыдущей настройки.

CLUSTER без указания table_name повторно кластеризует все ранее кластеризованные таблицы в текущей базе данных, для которых у вызывающего пользователя есть привилегии. Эта форма CLUSTER не может быть выполнена внутри блока транзакции.

Когда таблица кластеризуется, на нее накладывается блокировка ACCESS EXCLUSIVE. Это предотвращает любые другие операции с базой данных (как чтение, так и запись) с этой таблицей до завершения CLUSTER.

Параметры

table_name

Имя (возможно, с указанием схемы) таблицы.

index_name

Имя индекса.

VERBOSE

Выводит отчет о прогрессе по мере кластеризации каждой таблицы.

boolean

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

Замечания

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

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

CLUSTER может повторно сортировать таблицу, используя либо сканирование по индексу указанного индекса, либо (если индекс является B-деревом) последовательное сканирование с последующей сортировкой. Он попытается выбрать метод, который будет быстрее, на основе параметров стоимости планировщика и доступной статистической информации.

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

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

При использовании последовательного сканирования и сортировки также создается временный файл сортировки, так что пиковая потребность во временном пространстве составляет до удвоенного размера таблицы плюс размеры индексов. Этот метод часто быстрее метода сканирования по индексу, но если требования к дисковому пространству неприемлемы, вы можете отключить этот выбор, временно установив параметр enable_sort в значение off.

Рекомендуется установить параметр maintenance_work_mem в достаточно большое значение (но не больше объема ОЗУ, который вы можете выделить для операции CLUSTER) перед кластеризацией.

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

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

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

Кластеризация секционированной таблицы кластеризует каждую из ее секций, используя соответствующий секционированный индекс. При кластеризации секционированной таблицы индекс не может быть опущен. CLUSTER для секционированной таблицы не может быть выполнен внутри блока транзакции.

Примеры

Кластеризовать таблицу employees на основе её индекса employees_ind:

CLUSTER employees USING employees_ind;

Кластеризовать таблицу employees, используя тот же индекс, что и раньше:

CLUSTER employees;

Кластеризовать все таблицы в базе данных, которые ранее были кластеризованы:

CLUSTER;

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

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

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

CLUSTER [ VERBOSE ] [ table_name [ USING index_name ] ]

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

CLUSTER index_name ON table_name

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

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