Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

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;