Уровень 2.0
Предусловие: изучена глава «Физическое хранение данных».
В этой главе мы узнаем о действиях, выполняемых в процессе обслуживания системы управления базами данных.
Обслуживание СУБД
Обслуживание системы управления базами данных (СУБД) — это комплекс регулярных и плановых мероприятий, направленных на обеспечение ее стабильной, быстрой и безопасной работы. В состав комплекса мероприятий включены:
- контроль за дисковым пространством;
- управление данными;
- контроль статистики планировщика;
- мониторинг производительности;
- просмотр журнала событий.
Мониторинг дискового пространства
Отслеживание свободного пространства на диске критически важно для корректной работы СУБД. При недостатке памяти для операций записи данные не смогут быть сброшены из памяти на диск и СУБД аварийно завершит свою работу.
Средства операционной системы
В операционной системе есть основные инструменты для мониторинга дискового пространства — метакоманды df и du.
Команда df показывает информацию о файловых системах: их общий размер, сколько места занято и сколько осталось свободным (см. man df). Опция -h задает вывод информации в удобных единицах. В нашем случае в качестве аргумента подается корневой каталог. Если же вызвать команду df без аргументов, будет выведена информация по всем системам.
[postgres@ServerName ~]$ df -h /dev/mapper/ro_{server_name}-root
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ro_{server_name}-root 27G 14G 12G 54% /
В выводе команды видны столбцы общего размера каталога (Size), использованного (Used) и свободного (Avail), а также процент использованного пространства по отношению к общему размеру каталога (Use%).
Вторая команда, du, предназначена для более детального анализа занимаемого пространства конкретным каталогом (см. man du). По умолчанию команда рекурсивно выводит дисковое пространство, занимаемое подкаталогами, которые принадлежат указанному в качестве аргумента каталогу. Опция -s вместо этого выдает суммарное дисковое пространство, занимаемое всеми файлами в этом каталоге.
[postgres@ServerName ~]$ du -sh $PGDATA
195M /pgdata/06/data
В примере выводится размер всех файлов кластера с помощью переменной $PGDATA.
Если в файловой системе используется квотирование дискового пространства, то сведения об израсходованном пространстве и количестве файлов предоставляет команда quota (см. man quota).
Средства СУБД
В PostgreSQL также есть функции, позволяющие определить размеры базы данных, объектов и слоев:
- pg_relation_size() определяет размер слоя в байтах;
- pg_indexes_size() определяет суммарный размер всех индексов таблицы;
- pg_table_size() определяет размер таблицы с учетом TOAST;
- pg_total_relation_size() определяет общий размер таблицы, всех ее индексов и TOAST;
- pg_database_size() определяет размер, занимаемый базой данных.
Некоторые из них уже были использованы в предыдущей главе.
В СУБД Pangolin доступна функция pgstattuple, которая позволяет собирать статистику на уровне кортежей: информация о точном размере отношений, количестве мертвых версий строк, свободном пространстве для вставки данных и так далее.
Управление данными
Если не проводить регулярную чистку данных, дисковое пространство будет засорено. Это происходит из-за механизма MVCC. В результате работы команды UPDATE строки обновляются: старые версии помечаются как удаленные, а рядом появляются новые версии. И при каждом запуске команды количество обработанных ею версий строк удваивается. Команда DELETE просто помечает удаленные строки с помощью xmax. Удаленные версии строк, не входящие ни в один снимок данных, просто занимают место на диске и ни для чего не нужны. Очистка предотвращает исчерпание дискового пространства в результате раздувания таблиц и индексов.
Очистку можно произвести как вручную с помощью команды VACUUM, так и автоматически — процесс autovacuum. Для ручной очистки в командной строке ОС используется команда vacuumdb.
Поскольку для очистки есть автоматический процесс, разберем сначала его.
Автоочистка
Процесс autovacuum стирает устаревшие версии строк и оставляет на их месте на страницах пустое пространство, пригодное для вставки новых версий строк. Также в процессе очистки строятся карты видимости и свободного пространства.
Еще одна важная задача, выполняемая очисткой, — предотвращение зацикливания счетчика транзакций для 32-битных систем.
Для предотвращения переполнения используется механизм заморозки. В процессе очистки autovacuum заменяет старые номера транзакций на специальное значение FrozenTransactionId (FROZEN). Замороженные строки считаются видимыми для всех транзакций, и их XID перестает участвовать в дальнейшем исчислении счетчика. Таким образом, автоочистка не только освобождает место на страницах, но и гарантирует безопасную работу счетчика транзакций.
Очистка не блокирует операции чтения и записи, но операции, требующие блокировки таблицы, например CREATE INDEX, будут дожидаться освобождения блокировки.
Убедиться, что процесс autovacuum запущен, можно, обратившись к таблице pg_stat_activity, которая хранит все активные процессы.
postgres@postgres=# SELECT pid, backend_type FROM pg_stat_activity;
pid | backend_type
------+------------------------------
919 | autovacuum launcher
920 | autounite launcher
921 | integrity check launcher
922 | logical replication launcher
7351 | client backend
904 | background writer
7351 | client backend
904 | background writer
903 | checkpointer
917 | walwriter
(8 rows)
В примере выведены все активные процессы и их pid. Именно autovacuum представлен двумя разновидностями процессов:
autovacuum launcherотслеживает количество изменений в базах данных и при достижении заданного параметрами уровня изменений параллельно запускает процессы очистки;autovacuum worker— процесс, занимающийся непосредственно очисткой от мертвых версий строк.
Параметры автоочистки
По умолчанию механизм autovacuum активен и функционирует в автоматическом режиме. Несмотря на техническую возможность его отключения, делать это не следует.
Для работы подсистемы автоочистки требуется два параметра:
autovacuum— включение автоматической очистки (по умолчанию включен);track_counts— данный параметр контролирует, собирается ли совокупная статистика о доступе к таблицам и индексам.
Последний параметр необходим, так как autovacuum проверяет собранную статистику по количеству изменений в базах данных для запуска процесса автоочистки.
Проверить, что данные параметры включены, можно через обращение к списку конфигурационных параметров метакомандой \dconfig.
postgres@postgres=# \dconfig autovacuum|track_counts
List of configuration parameters
Parameter | Value
--------------+----------
autovacuum | on
track_counts | on
(2 rows)
Как видно, оба параметра включены.
Кроме описанных выше параметров есть еще несколько, обеспечивающих корректную работу подсистемы автоочистки.
Автоочистка запускается для конкретной базы данных при достижении порога, определяемого формулой:
количество_измененных_строк=autovacuum_vacuum_threshold+autovacuum_vacuum_scale_factor*количество_строк_в_таблице.
В этой формуле параметр autovacuum_vacuum_threshold отвечает за пороговое значение количества измененных строк, ниже которого очистка не запустится, а autovacuum_vacuum_scale_factor — за пороговый процент измененных строк, требуемый для срабатывания очистки. То есть параметры autovacuum_vacuum_threshold и autovacuum_vacuum_scale_factor минимальные для запуска процесса автоочистки.
При необходимости данный процесс можно отключить для уже существующей или при создании новой таблицы с помощью параметра autovacuum_enabled. Для TOAST таблиц есть отдельный параметр — toast.autovacuum_enabled.
Даже при отключенной автоочистке для таблицы (autovacuum_enabled = off) данный процесс все равно запустится для предотвращения переполнения счетчика транзакций (wraparound protection).
Периодичность попыток запуска очистки определяется параметром autovacuum_naptime.
Запущенный процесс очистки работает с паузами для снижения общей нагрузки на систему. Суммарные затраты на действия по очистке, по достижении которых необходимо временно приостановить очистку, прописаны в параметрах vacuum_cost_limit для VACUUM и autovacuum_vacuum_cost_limit для автоочистки. Длительность паузы указана в параметрах vacuum_cost_delay для VACUUM и autovacuum_vacuum_cost_delay для автоочистки.
Максимальное количество запущенных одновременно процессов определено параметром autovacuum_max_workers.
Освобождение места в файловой системе
Обычная очистка может лишь незначительно уменьшить размер файла и только в случае, когда после очистки в конце файла остались пустые страницы.
Более глубокую очистку выполняет команда VACUUM FULL. Она полностью блокирует таблицу и последовательно копирует актуальные версии строк в новые файлы данных. После завершения этого процесса меняется oid файлового узла, а старые файлы данных удаляются. В процессе работы VACUUM FULL на диске требуется свободное место не меньшее, чем исходный размер перестраиваемой таблицы.
Команда CLUSTER выполняет похожую работу, но дополнительно еще и упорядочивает строки по ключу при перестроении таблицы.
Перестраиваются индексы командой REINDEX. Есть и менее блокирующий аналог REINDEX CONCURRENTLY.
Конкретно в СУБД Pangolin {pangolin_version} поставляется расширение pg_repack, позволяющее в менее блокирующем режиме, чем VACUUM FULL, выполнить перестройку таблицы с уплотнением.
Статистика планировщика
На производительность базы данных сильно влияют планы выполняемых запросов. При выполнении запроса с неоптимальным планом время на его выполнение может быть на порядки хуже, чем при использовании оптимального плана.
Планировщику (оптимизатору запросов) необходимы статистические сведения о данных в объектах базы для выработки правильного плана запроса. Так как данные в отношениях базы изменяются, причем нередко весьма значительно, задача сбора статистики — одна из важнейших регулярных задач. Как и очистку, эту задачу в ранних версиях PostgreSQL доверяли системам календарного выполнения задач типа cron. Однако гораздо эффективнее эту задачу решать с помощью автоочистки. Процесс очистки последовательно просматривает страницы отношений для поиска мертвых версий строк. Разумно вместе с этим сразу заботиться и о сборе статистических сведений.
Процесс autovacuum обновляет статистику для конкретной базы данных при достижении порога, определяемого формулой:
количество_измененных_строк=autovacuum_analyze_threshold+autovacuum_analyze_scale_factor*количество_строк_в_таблице.
Параметры аналогичны тем, что используются при запуске автоочистки:
autovacuum_analyze_scale_factor— пороговый процент измененных строк;autovacuum_analyze_threshold— базовое пороговое значение количества измененных строк.
Эти параметры проверяются в списке конфигурационных параметров. Для удобства используется шаблон по началу имени.
postgres@postgres=# \dconfig autovacuum_analyze*
List of configuration parameters
Parameter | Value
---------------------------------+----------
autovacuum_analyze_scale_factor | 0.1
autovacuum_analyze_threshold | 50
(2 rows)
Для ручного сбора статистики используются команда ANALYZE и команда VACUUM ANALYZE. При работе в командной строке ОС — vacuumdb --analyze и vacuumdb --analyze-only.
Мониторинг производительности
В PostgreSQL 15 была значительно изменена система сбора статистики о работе (не путать со статистикой планировщика). Раньше имелся специальный процесс stats collector. Теперь же все процессы экземпляра самостоятельно собирают статистические данные о своей работе и запоминают их в своей локальной памяти. Периодически эти данные передаются в общую память.
Статистика является кумулятивной, то есть она накапливает подсчитанные значения:
- обращений к таблицам с подсчетом строк;
- обращений к индексам с подсчетом указателей на строки;
- обращений к таблицам с подсчетом блоков;
- обращений к индексам с подсчетом блоков;
- строк в каждой таблице;
- срабатываний очистки для каждой таблицы;
- сбора статистики планировщика для каждой таблицы.
Система кумулятивной статистики собирает информацию о текущей активности сервера и подсчитывает обращения к таблицам и индексам в терминах блоков и строк. Количество строк в таблицах, информация о выполненных очистках и сборе статистики подсчитываются для каждой таблицы. Отдельно включается подсчет обращений к пользовательским функциям, который фиксирует время, затраченное на их выполнение. При корректной остановке собранные сведения о кумулятивной статистике сохраняются в каталоге pg_stat, и они доступны при следующем старте.
Управление сбором статистики
Для настройки сбора статистики есть следующие параметры:
track_activities— включает сбор кумулятивной статистики в процессах экземпляра;track_counts— включает сбор сведений об обращениях к таблицам и индексам;track_functions— сбор сведений о пользовательских функциях (выключен по умолчанию);track_io_timing— отслеживание времени, затрачиваемого на чтение и запись блоков данных (выключен по умолчанию);track_wal_io_timing— отслеживание времени, затрачиваемого на операции записи в WAL (выключен по умолчанию).
Проверить их состояние можно в списке конфигурационных параметров. Для удобства используется маска по началу имени.
postgres@postgres=# \dconfig+ track_*
List of configuration parameters
Parameter | Value | Type | Context | Access privileges
---------------------------+---------+---------+------------+-------------------
track_activities | on | bool | superuser |
track_activity_query_size | 1kB | integer | postmaster |
track_commit_timestamp | off | bool | postmaster |
track_counts | on | bool | superuser |
track_functions | none | enum | superuser |
track_io_timing | off | bool | superuser |
track_wal_io_timing | off | bool | superuser |
(7 rows)
Параметр track_activity_query_size не показан, так как он отвечает просто за размер памяти, зарезервированной для хранения кода исполняемых сейчас команд для каждой сессии, выводимых в столбце pg_stat_activity.query.
Представления статистики
PostgreSQL предоставляет два вида представлений для просмотра собранных статистических данных. Динамические представления отражают текущую активность сервера — запущенные процессы, выполняемые запросы, прогресс операций. Представления кумулятивной статистики накапливают сведения за все время работы сервера (или с момента последней корректной остановки) — обращения к таблицам и индексам, срабатывания очистки, ввод-вывод.
Динамические представления
Динамические представления статистики информируют о происходящих в системе процессах в текущий момент времени.
Некоторые из представлений:
pg_stat_activityдля каждого процесса экземпляра содержит одну строку со сведениями о текущей работе процесса, его состоянии и обрабатываемом запросе;pg_stat_replicationсодержит по одной строке для каждого процесса-отправителяWAL, показывающей статистику репликации на подключенный резервный сервер этого отправителя;pg_stat_wal_receiverсодержит одну строку, показывающую статистику о приемникеWALс подключенного к нему сервера;pg_stat_sslсодержит по одной строке для каждого серверного процесса или процесса-отправителяWAL, показывая статистику использованияSSLв этом соединении;pg_stat_gssapiсодержит по одной строке для каждого серверного компонента, показывающей информацию об использованииGSSAPIв этом соединении;pg_stat_progress_analyzeсодержит строку для каждого серверного процесса, который в данный момент выполняет командуANALYZE;pg_stat_progress_create_indexсодержит по одной строке для каждого серверного процесса, который в данный момент выполняетCREATE INDEXилиREINDEX;pg_stat_progress_vacuumсодержит по одной строке для каждого серверного процесса, включая рабочие процессы автоочистки, который в данный момент выполняетVACUUM;pg_stat_progress_clusterсодержит строку для каждого серверного процесса, который в данный момент выполняетCLUSTERилиVACUUM FULL;pg_stat_progress_basebackupсодержит строку для каждого процесса-отправителяWAL, который в данный момент выполняет команду репликацииBASE_BACKUPи передает резервную копию в потоковом режиме;pg_stat_progress_copyсодержит строку для каждого серверного процесса, который в данный момент выполняет командуCOPY.
При этом обычные пользователи могут видеть всю информацию только о сеансах, принадлежащих к роли, членом которой они являются. В строках, описывающих другие сеансы, многие столбцы будут иметь значение NULL. Однако сам факт существования сеанса и его общие свойства, такие как пользователь сеанса и база данных, видны всем пользователям.
Суперпользователи и роли, обладающие привилегиями встроенной роли pg_read_all_stats, могут видеть всю информацию обо всех сеансах.
Кумулятивная статистика
Представления кумулятивной статистики накапливают подсчитанные значения за все время работы сервера (или с момента последней корректной остановки):
pg_stat_database— статистика на уровне БД;pg_stat_bgwriter— статистика фоновой записи и контрольных точек;pg_stat_all_tables— статистика обращений к таблицам;pg_stat_all_indexes— статистика обращений к индексам;pg_stat_io— статистика ввода-вывода;pg_statio_all_tables— статистика обращений к таблицам в блоках;pg_statio_all_indexes— статистика обращений к индексам в блоках.
Полный список представлений для отображения кумулятивной статистики.
Представления pg_statio_* и pg_stat_io используются для определения эффективности работы буферного кеша. Начиная с версии СУБД Pangolin 6.2.0 поставляются также и расширения для сбора статистики.
postgres@postgres=# SELECT name FROM pg_available_extensions WHERE name ~ 'stat';
name
--------------------
pg_dbms_stats
pg_stat_statements
pg_query_state
pgstattuple
pg_stat_kcache
(5 rows)
Активность транзакций
При работе транзакции статистика о ней самой не может быть передана в общую статистику, так как транзакция еще не завершена.
В транзакции доступна ее собственная статистика:
pg_stat_xact_all_tables— обращения ко всем таблицам;pg_stat_xact_sys_tables— обращения только к системным таблицам;pg_stat_xact_user_tables— обращение к пользовательским таблицам;pg_stat_xact_user_functions— обращение к пользовательским функциям.
Индивидуальная статистика по обращениям к объектам в транзакциях до их завершения не может быть передана в общую статистику. Поэтому для транзакций существуют собственные динамические представления.
Начнем транзакцию и посмотрим, какая статистика доступна внутри нее.
postgres@sch_db=# BEGIN;
BEGIN
Выведем доступные представления с помощью метакоманды \dv и шаблона по началу имени.
postgres@sch_db*# \dv pg_stat_xact_*
List of relations
Schema | Name | Type | Owner
------------+-----------------------------+------+----------
pg_catalog | pg_stat_xact_all_tables | view | postgres
pg_catalog | pg_stat_xact_sys_tables | view | postgres
pg_catalog | pg_stat_xact_user_functions | view | postgres
pg_catalog | pg_stat_xact_user_tables | view | postgres
(4 rows)
Завершим транзакцию.
postgres@sch_db=*# END;
COMMIT
Заголовки процессов и имя приложения
В многопользовательских и высоконагруженных системах важно не только то, что делает PostgreSQL, но и кто это делает, и каком именно кластере. Для этого PostgreSQL предоставляет набор конфигурационных параметров, которые управляют отображением информации о процессах и клиентах.
Разберем три ключевых параметра:
cluster_name— параметр, задающий уникальное имя для всего кластера баз данных (по умолчанию не задано);update_process_title— параметр, управляющий тем, будет ли PostgreSQL изменять заголовок серверного процесса при переходе к выполнению новойSQLкоманды (по умолчанию включен);application_name— сессионный параметр, который позволяет явно указать имя приложения, устанавливающего соединение с базой данных (отображаться вpg_stat_activityи может совпадать с именем драйвера).
Параметр cluster_name влияет на формирование заголовков серверных процессов, он задает имя кластера, postmaster и всех его фоновых процессов. В режиме репликации Hot Standby автоматически используется как значение application_name для сервера-реплики при подключении к мастеру.
postgres@postgres=# SHOW cluster_name;
cluster_name
--------------
(1 row)
Параметр update_process_title включает обновление заголовка процесса при выполнении следующей команды SQL.
postgres@postgres=# SHOW update_process_title;
update_process_title
----------------------
on
(1 row)
Для удобного отображения имени процесса в представлении pg_stat_activity задается параметр application_name.
postgres@postgres=# SHOW application_name;
application_name
------------------
psql
(1 row)
Журнал отчета
Журнал ошибок (error log) — это основной источник информации о работе сервера PostgreSQL. Он фиксирует запуски, подключения, ошибки выполнения, информацию о производительности и служебные события. Правильная конфигурация логирования критически важна для эксплуатации, безопасности и отладки.
Способ ведения журнала
PostgreSQL обладает возможностью вести отчеты с сообщениями разными способами. Способ хранения сообщений, записываемых в журнал, определяет параметр log_destination:
stderr— стандартный поток вывода ошибок. Это базовый внутренний механизм PostgreSQL, который сам по себе не пишет в файлы, но является обязательным источником для встроенного сборщика логов;csvlogиjsonlog— сообщения будут записываться вCSVиJSONфайлы соответственно, форматы которых описаны в документации;eventlog— предназначен для передачи сообщений системе сбора журналов в MS Windows;syslog— передача сообщений по прикладному сетевому протоколуSYSLOG, при этом необходимо указать параметр syslog_facility (канал журналирования, по умолчаниюLOCAL0).
Передача сообщений по протоколу SYSLOG подходит для построения централизованных систем сбора сообщений от разных устройств. Часто в PostgreSQL используется свой собственный сборщик сообщений, способный выполнять ротацию журналов без дополнительного ПО. В таком случае log_destination = stderr и logging_collector = on.
Сборщик сообщений
При включенном параметре logging_collector = on поток сообщений из stderr передается специальному процессу — сборщику сообщений. Сборщик сообщений самостоятельно записывает сообщения в файл журнала и может выполнять его ротацию. Каталог расположения журнала задается параметром log_directory. Шаблон для имен журнальных файлов задается параметром log_filename в формате strftime, причем суффикс имени файла (.log, .csv, .json) определяется автоматически на основе log_destination. Явно прописывать его в шаблоне не нужно.
Включим сборщик сообщений. В начале убедимся, что в системе имеются нужные папки и postgres может в них писать.
postgres@postgres=# \! ls -ld /pgerrorlogs/ /pgerrorlogs/06/
drwxr-x--- 3 postgres postgres 4096 Oct 21 16:00 /pgerrorlogs/
drwxr-x--- 2 postgres postgres 4096 Oct 21 16:42 /pgerrorlogs/06/
Папки на месте, и у postgres есть все необходимые права. Включим параметр logging_collector.
postgres@postgres=# ALTER SYSTEM SET logging_collector TO on;
ALTER SYSTEM
Установим папку для хранения файлов с логами.
postgres@postgres=# ALTER SYSTEM SET log_directory = '/pgerrorlogs/06';
ALTER SYSTEM
Включение сборщика сообщений требует перезагрузки сервера.
postgres@postgres=# \q
[student@ServerName ~]$ sudo systemctl restart postgresql
Перезагрузка прошла успешно, войдем в оболочку psql и проверим путь к файлу журнала сообщений с помощью функции pg_current_logfile().
[postgres@ServerName ~]$ psql
postgres@postgres=# SELECT pg_current_logfile();
pg_current_logfile
--------------------------------------------------
/pgerrorlogs/06/postgresql-2024-10-21_143500.log
(1 row)
Убедиться, что файл журнала открыт процессом postgres, можно с помощью команды lsof.
postgres@postgres=# \! sudo lsof /pgerrorlogs/06/postgresql-2024-10-121_143500.log
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
postgres 14732 postgres 7w REG 253,0 1533 1048581 /pgerrorlogs/06/postgresql-2024-10-21_143500.log
Как видно по третьему столбцу, процесс открыт пользователем postgres.
Ротация файлов журналов отчета
Без ротации лог-файлы будут расти бесконечно, что приведет к исчерпанию места на диске и замедлению системы. При ротации файл переименовывается или удаляется, а сборщик сообщений продолжает запись в следующий файл. В PostgreSQL сборщик поддерживает автоматическую ротацию, но для этого параметр log_filename должен использовать шаблон, а не статичное имя файла.
Для настройки ротации используются следующие параметры:
log_filename— шаблонstrftimeимени файла, соответствующий периодичности ротации;log_file_mode— параметр в числовом значении, устанавливающий права на новый файл журнала отчета;log_rotation_age— время жизни файла журнала отчета до наступления его ротации (по умолчанию 24 часа);log_rotation_size— размер файла журнала отчета, по достижении которого будет выполнена его ротация (по умолчанию 10 МБ);log_truncate_on_rotation— параметр, включающий перезапись содержимого файла вместо создания нового.
Некоторые настройки сообщений
Ниже приведены некоторые настройки журналирования, определяющие, в связи с чем писать сообщения и какие в них должны быть подробности.
Когда генерировать сообщения в журнал:
log_min_messages— порог отбрасывания сообщений недостаточной важности;log_min_duration_statement— параметр определяет порог времени, при превышении которого работающей командой, будет записано сообщение;log_startup_progress_interval— параметр определяет порог времени выполнения запроса, при превышении которого нужно сообщать о задержке процессаstartup.
log_checkpoints— контрольная точка;log_connections/log_disconnections— подключения/отключения;log_duration— включать в сообщение длительность команды;log_error_verbosity— уровень подробностей сообщения;log_line_prefix— префикс строк сообщений;log_hostname— включать имя хоста сервера;log_lock_waits— сообщать о превышенииdeadlock_timeoutпри ожидании;log_statement— о каких командах писать сообщения (off,ddl,mod,all);log_temp_files— информировать об использовании временных файлов.
Итоги
- Мониторинг дискового пространства выполняется средствами ОС (
df,du,quota) и функциями СУБД (pg_relation_size(),pg_table_size(),pg_total_relation_size(),pg_database_size()); - Механизм MVCC приводит к накоплению мертвых версий строк — своевременная очистка предотвращает распухание таблиц и индексов;
- Автоочистка (
autovacuum) должна быть включена всегда: она удаляет мертвые строки, строит карты видимости и свободного пространства, а также предотвращает переполнение счетчика транзакций; - Порог запуска автоочистки определяется параметрами
autovacuum_vacuum_thresholdиautovacuum_vacuum_scale_factor; VACUUM FULLиCLUSTERперестраивают таблицу, копируя актуальные строки в новые файлы;REINDEXперестраивает индексы;- Сбор статистики планировщика выполняется автоматически процессом
autovacuumпо порогу, определяемому параметрамиautovacuum_analyze_thresholdиautovacuum_analyze_scale_factor; - Кумулятивная статистика накапливает данные за все время работы сервера; динамические представления (
pg_stat_activity,pg_stat_progress_vacuum,pg_stat_progress_create_indexи другие) отражают текущую активность процессов; - Параметры
track_activitiesиtrack_countsвключают базовый сбор статистики;track_functionsиtrack_io_timingвключаются дополнительно; - Журнал отчета настраивается через
log_destination(stderr/csvlog/jsonlog/syslog) и включение сборщика сообщений (logging_collector); - Ротация файлов журнала управляется параметрами
log_rotation_age,log_rotation_sizeи шаблономlog_filename.
Самопроверка
Вопрос 1
С помощью какой команды операционной системы можно проверить общий уровень занятости смонтированных файловых систем?
Вопрос 2
С помощью какой команды операционной системы можно узнать общий размер конкретного каталога (например, $PGDATA) без детализации по подкаталогам?
Вопрос 3
Таблица сильно выросла, и появилась необходимость уменьшить ее размер на диске. Какая команда позволяет полностью перестроить таблицу и освободить неиспользуемое пространство?
Вопрос 4
Какая команда перестроит таблицу и дополнительно упорядочит строки по индексу?
Вопрос 5
Что делает процесс autovacuum launcher?
Вопрос 6
Какие команды собирают статистику планировщика?
Вопрос 7
Какой параметр контролирует сбор статистики о доступе к таблицам и индексам, необходимой для работы autovacuum?
Вопрос 8
Какое представление динамической статистики показывает текущие активные процессы сервера?
Вопрос 9
В чем отличие представлений кумулятивной статистики от динамических представлений?
Вопрос 10
Какой параметр необходимо включить для того, чтобы поток сообщений stderr передавался специальному процессу — сборщику сообщений?
Вопрос 11
Какая функция возвращает имя текущего файла журнала PostgreSQL?
Вопрос 12
Какие параметры влияют на ротацию файлов журналов отчета?