2.4. Анализ и очистка

Базы данных Shardman требуют периодического обслуживания, такого как очистка.

2.4.1. Демон автоочистки

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

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

2.4.2. Анализ всей базы данных

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

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

Вместо этого используйте функцию shardman.global_analyze() для выполнения анализа на уровне кластера. Сначала эта функция выполняет ANALYZE на каждом узле для всех локальных секций сегментированных таблиц, а затем отправляет эту статистику на другие узлы. Затем она выбирает один узел для каждой глобальной таблицы и запускает ANALYZE этой таблицы на выбранном узле. Собранная статистика транслируется на все остальные узлы кластера.

2.4.3. Анализ глобальных таблиц

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

2.4.4. Анализ сегментированных таблиц

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

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

2.4.5. Очистка

Команда VACUUM, запущенная для всей базы данных, выполняет очистку на текущем узле.

Вы можете транслировать эту команду для выполнения кластерной очистки на всех узлах. Установите значение on для параметра конфигурации shardman.broadcast_ddl, запустите VACUUM и установите значение off для shardman.broadcast_ddl.

При запуске VACUUM для сегментированной или глобальной таблицы оператор автоматически транслируется. Эта команда на всех узлах очищает все локальные секции сегментированных таблиц и все локальные таблицы глобальной таблицы.