Задание 3: Периодичность проверки целостности
По итогам выполнения данной лабораторной работы вы научитесь управлять параметрами конфигурации проверки целостности, настраивать периодичность и временные ограничения автоматических проверок, а также анализировать работу процесса IntCheckWorker при различных сценариях.
Параметры настройки проверки целостности
-
Подключитесь к экземпляру СУБД суперпользователем:
[postgres@srv1 ~]$ psql -
Просмотрите параметры конфигурации, связанные с целостностью:
postgres=# \dconfig integrity*Parameter | Value-----------------------------+-------integrity_check_delay | 1dintegrity_check_select_wait | 10sintegrity_check_wait | 5s(3 rows) -
Получите подробную информацию о параметре
integrity_check_delay:postgres=# SELECT * FROM pg_settings WHERE name = 'integrity_check_delay' \gx-[ RECORD 1 ]---+---------------------------name | integrity_check_delaysetting | 86400unit | scategory | Ungroupedshort_desc | Sleep time between rounds.extra_desc |context | sighupvartype | integersource | defaultmin_val | 5max_val | 86400...Внимание!Минимальное значение параметра составляет 5 секунд, максимальное — 86400 секунд (1 сутки). По умолчанию проверка выполняется раз в сутки.
-
Изучите параметры, связанные с временными ожиданиями:
postgres=# \dconfig+ integrity_*waitList of configuration parametersParameter | Value | Type | Context | Access privileges-----------------------------+-------+---------+---------+-------------------integrity_check_select_wait | 10s | integer | sighup |integrity_check_wait | 5s | integer | sighup |(2 rows)
Изучение процесса IntCheckWorker
-
Проверьте, что процесс
integrity check launcher(IntCheckWorker) запущен:[student@srv1 ~]$ ps f -C postgresОжидаемый результат: в списке процессов присутствует строка:
... \_ postgres: integrity check launcher -
Изучите назначение процесса
IntCheckWorkerиз документации или справки:- этот процесс автоматически запускается при старте СУБД;
- он создает JSON-файлы для контролируемых объектов, если они отсутствуют;
- для проверки целостности объектов запускает рабочие процессы, а не выполняет проверку самостоятельно;
- при успешном завершении проверок сообщает об этом;
- если сообщение о завершении проверки не поступает, происходит блокировка СУБД и принудительное завершение процесса через сигнал
SIGTERM; - если процесс не завершается после
SIGTERM, применяетсяSIGKILLс последующей перезагрузкой всех процессов СУБД.
Настройка периодичности проверки
-
Установите периодичность проверки целостности равной двум минутам:
postgres=# ALTER SYSTEM SET integrity_check_delay = '2min';postgres=# SELECT pg_reload_conf(); -
Проверьте применение новой настройки:
postgres=# SHOW integrity_check_delay;integrity_check_delay-----------------------2min(1 row)Так как конфигурация кластерная, дополнительно сделайте
restart:[postgres@srv1 ~]$ restart -
Проследите за работой процесса проверки через журнал сообщений. В терминале с запущенным
tail -fвы должны периодически видеть записи о начале и завершении проверок:[postgres@srv1 ~]$ tail -f $(cut -d' ' -f2 /pgdata/06/data/current_logfiles) -n 20LOG: Start of integrity checkLOG: Start of integrity check -
Восстановите значение по умолчанию:
postgres=# ALTER SYSTEM RESET integrity_check_delay;postgres=# SELECT pg_reload_conf();[postgres@srv1 ~]$ restart
Настройка временных ограничений
-
Изучите назначение параметров ожидания:
integrity_check_wait— ограничивает время, затрачиваемое на проверку целостности. При превышении этого значения происходит блокировка сеансов пользователей. Предусмотрен для случаев постановки на контроль большого количества объектов одномоментно;integrity_check_select_wait— задает период запуска автоматической проверки контроля целостности объектов.
-
Измените параметр
integrity_check_waitна 30 секунд:postgres=# ALTER SYSTEM SET integrity_check_wait = 30; -
Измените параметр
integrity_check_select_waitна 20 секунд:postgres=# ALTER SYSTEM SET integrity_check_select_wait = 20;postgres=# SELECT pg_reload_conf();[postgres@srv1 ~]$ restart -
Проверьте оба параметра:
postgres=# SELECT name, setting, unit FROM pg_settingsWHERE name LIKE 'integrity_check%wait';name | setting | unit---------------------------+---------+------integrity_check_select_wait | 20 | sintegrity_check_wait | 30 | s(2 rows)