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
для сегментированной или глобальной таблицы оператор автоматически транслируется. Эта команда на всех узлах очищает все локальные секции сегментированных таблиц и все локальные таблицы глобальной таблицы.