gpcheckcat
Утилита gpcheckcat выполняет проверку таблиц каталога Greengage DB на наличие несогласованностей.
Утилита располагается в каталоге $GPHOME/bin/lib.
Синтаксис
gpcheckcat [<options>] [<dbname>]
Параметры:
-g <data_directory>
-p <port>
-s <test_name> | '<test_name1>, <test_name2> [, ...]'
-P <password>
-U <user_name>
-S {none | only}
-O
-R <test_name> | '<test_name1>, <test_name2> [, ...]'
-C <catalog_table>
-B <parallel_processes>
-v
-A
-x "<parameter_name>=<value>"
gpcheckcat -l
gpcheckcat -? | --help
Описание
Утилита gpcheckcat выполняет несколько тестов для проверки несогласованности каталога базы данных.
Некоторые тесты нельзя запускать одновременно с другими рабочими нагрузками, иначе результаты могут быть недостоверными.
Перед запуском gpcheckcat рекомендуется перезапустить базу данных в ограниченном режиме, чтобы исключить влияние текущей активности на результаты проверки.
Если запуск gpcheckcat выполняется без остановки активности базы данных, используйте параметр -O.
При каждом запуске утилита проверяет указанные базы данных на наличие оставшихся временных схем (схем без идентификатора сессии) и удаляет их. Результаты проверки отображаются в командной строке и одновременно записываются в лог.
Несогласованность каталога — это расхождения между системными таблицами Greengage DB. Существуют три типа несогласованностей:
-
Несогласованность в системных таблицах на уровне сегментов. Например, расхождение между системной таблицей с данными таблицы и системной таблицей с данными столбцов. Другой пример — наличие дубликатов в столбце, который должен быть уникальным.
-
Несогласованность между одной и той же системной таблицей на разных сегментах. Например, строка отсутствует на одном сегменте, хотя на других сегментах она есть. Другой пример — значения в некоторых столбцах строк различаются на разных сегментах, например, владелец таблицы или привилегии доступа.
-
Несогласованность между таблицей каталога и файловой системой. Например, файл существует в каталоге базы данных, но для него нет записи в таблице pg_class.
Параметры
- -A
-
Запускает
gpcheckcatдля всех баз данных кластера Greengage DB. - -B <parallel_processes>
-
Количество процессов для параллельного выполнения.
Утилита
gpcheckcatпытается определить оптимальное количество одновременно выполняемых процессов (размер пакета). Она предполагает, что каждому процессу потребуется буфер минимум 20 МБ. Максимальное количество параллельных процессов ограничено числом сегментов в кластере Greengage DB. Утилита отображает количество использованных параллельных процессов при запуске проверки каталога.ПРИМЕЧАНИЕУ утилиты может закончиться память, если количество обнаруженных ошибок превышает размер буфера. Если ошибка возникает из-за нехватки памяти, можно уменьшить размер пакета с помощью параметра
-B. Например, если утилита показывает размер пакета 936 и исчерпывает память, можно указать-B 468для параллельного выполнения 468 процессов. - -C <catalog_table>
-
Выполняет перекрестную проверку согласованности, проверку внешних ключей и ACL-тесты для указанной системной таблицы.
- -g <data_directory>
-
Генерирует SQL-скрипты для исправления несогласованностей каталога. Скрипты будут сохранены в
data_directory. - -l
-
Выводит список доступных тестов
gpcheckcat. - -O
-
Запускает только те тесты
gpcheckcat, которые можно выполнять в онлайн-режиме (без перевода БД в ограниченный режим). - -p <port>
-
Устанавливает порт для подключения к Greengage DB.
- -P <password>
-
Пароль пользователя для подключения к Greengage DB.
- -R <test_name> | '<test_name1>, <test_name2> [, …]'
-
Выполняет один или несколько указанных тестов. Для нескольких тестов перечислите их через запятую в кавычках.
Некоторые тесты могут выполняться только в ограниченном режиме работы Greengage DB.
Доступны следующие тесты:
-
acl— проверка согласованности привилегий контроля доступа. -
aoseg_table— проверка согласованности информации о вертикальном партиционировании (vpinfo) на сегментных экземплярах с pg_attribute (только для оптимизированных для добавления (AO) колоночных таблиц). -
duplicate— проверка на наличие повторяющихся записей. -
foreign_key— проверка корректности внешних ключей. -
inconsistent— перекрестная проверка на несогласованность между мастером и сегментами. -
missing_extraneous— проверка на отсутствующие или лишние записи. -
mix_distribution_policy— проверка таблиц на одновременное использование устаревших и актуальных операторов хеширования (hashops) в политиках распределения данных на основе каталоговpg_opclassиpg_amproc. -
owner— проверка согласованности владения таблицами с мастером. -
orphaned_toast_tables— проверка на наличие брошенных (orphaned) TOAST-таблиц.ПРИМЕЧАНИЕСуществует несколько ситуаций, при которых TOAST-таблица может считаться потерянной, когда скрипт восстановления не может быть автоматически сгенерирован и требуется ручное исправление каталога. Одна из таких ситуаций — если запись
reltoastrelidвpg_classуказывает на неправильную TOAST-таблицу (несоответствие TOAST-таблицы). Другая ситуация — если одновременно отсутствуютreltoastrelidвpg_classи соответствующая запись в pg_depend (двойная потеря TOAST-таблицы). Если требуется ручное исправление каталога,gpcheckcatпокажет подробные шаги, которым необходимо следовать для обновления каталога. -
part_integrity— проверяет целостность структурыpg_partition, OID партиций и политику их распределения. -
part_constraint— проверка ограничений для партиционированных таблиц. -
unique_index_violation— проверка таблиц с уникальными индексами на наличие повторяющихся записей. -
dependency— проверка зависимостей на несуществующие объекты (только в ограниченном режиме). -
distribution_policy— проверка ограничений на таблицах со случайным распределением (только в ограниченном режиме). -
namespace— проверка схем на отсутствие определения схемы (только в ограниченном режиме). -
pgclass— проверка записей вpg_class, не имеющих соответствующих записей вpg_attribute(только в ограниченном режиме).
-
- -s <test_name | 'test_name1, test_name2 [, …]'>
-
Указывает один или несколько тестов, которые следует пропустить. Несколько тестов указываются в виде списка имен, разделенных запятыми и заключенных в кавычки.
- -S {none | only}
-
Управляет тестированием таблиц каталога, общих для всех баз данных в кластере Greengage DB (например, pg_database).
Значение
noneотключает проверку общих таблиц каталога. Значениеonlyвыполняет тестирование только общих таблиц каталога. - -U <user_name>
-
Имя пользователя для подключения к Greengage DB.
- -? | --help
-
Отображает справку.
- -v
-
Выводит подробную информацию о выполняемых тестах.
- -x "<parameter_name>=<value>"
-
Устанавливает параметр конфигурации сервера, например
log_min_messages, на уровне сессии. Для задания нескольких параметров конфигурации используйте-xнесколько раз.
Примечания
Утилита определяет таблицы с отсутствующими атрибутами и отображает их в различных разделах вывода в нестандартизированном формате.
Также она формирует сводный список таких таблиц в формате <database>.<schema>.<table>.<segment_id> после основной информации.
Если gpcheckcat обнаруживает несогласованную информацию OID (идентификатор объекта), она создает один или несколько файлов проверки с SQL-запросами.
Эти SQL-запросы можно выполнить для изучения деталей несоответствий OID.
Файлы создаются в каталоге, из которого был запущен gpcheckcat.
Формат файла:
gpcheckcat.verify.dbname.catalog_table_name.test_name.TIMESTAMP.sql
Пример имени файла проверки, который создает gpcheckcat при обнаружении несогласованной информации OID в таблице pg_type базы данных mydb:
gpcheckcat.verify.mydb.pg_type.missing_extraneous.20251223160542.sql
Пример запроса из файла проверки:
SELECT *
FROM (SELECT relname, oid
FROM pg_class
WHERE reltype
IN (1305822, 1301043, 1301069, 1301095)
UNION ALL
SELECT relname, oid
FROM gp_dist_random('pg_class')
WHERE reltype
IN (1305822, 1301043, 1301069, 1301095)) alltyprelids
GROUP BY relname, oid
ORDER BY count(*) desc;