- •Предисловие
- •Об этой книге
- •Глава 1. Обзор статистики
- •Внутреннее устройство PostgreSQL
- •Установка соединений и работа сеансов
- •Запросы как базовая единица рабочей нагрузки
- •Планирование и выполнение запросов
- •Ввод-вывод при выполнении запросов
- •Журнал сообщений СУБД
- •Репликация изменений
- •Архивирование журнала предзаписи
- •Фоновая синхронизация данных
- •Автоочистка
- •Интерфейс статистики
- •Статистика как отправная точка инструментов мониторинга
- •Особенности статистики
- •Тестовое окружение
- •Глава 2. Статистика активности
- •Ключ к пониманию происходящего в СУБД
- •Взаимодействие клиента и сервера
- •Источники информации об активности
- •Представление pg_stat_activity
- •Представление pg_locks
- •Особенности pg_stat_activity и pg_locks
- •Представление pg_stat_database
- •Подключенные клиенты
- •Отслеживание клиентских сеансов
- •Транзакционная активность
- •Статусы завершения сеансов
- •Состояния сеансов
- •Отслеживание состояний
- •Ожидания и блокировки
- •Отслеживание состояний с учетом ожиданий
- •Взаимоблокировки
- •Бездействующие транзакции
- •Время выполнения запросов и транзакций
- •Отслеживание времени ожидания блокировок
- •Использование pg_locks.waitstart
- •Использование pg_stat_activity.state_change
- •Дерево блокировок
- •Глава 3. Выполнение запросов и функций
- •Зачем нужен мониторинг запросов
- •Расширение pg_stat_statements
- •Метаданные запроса
- •Планирование запроса
- •Исполнение запроса
- •Сквозная идентификация с queryid
- •Построение отчетов на основе pg_stat_statements
- •Представление pg_stat_statements_info
- •Выполнение процедур и функций
- •Глава 4. Базы данных
- •Иерархия объектов СУБД
- •Кластер баз данных
- •Табличные пространства
- •Базы данных
- •Схемы
- •Таблицы и индексы
- •TOAST
- •События в кластере баз данных
- •Рабочая нагрузка в отношении таблиц и индексов
- •Ошибки и нежелательные события
- •Функции для работы с объектами СУБД
- •Определение размеров объектов СУБД
- •Размещение объектов в файловой системе
- •Глава 5. Область общей памяти и ввод-вывод
- •Анализ общей памяти
- •Представление pg_buffercache
- •Представление pg_shmem_allocations
- •Анализ памяти клиентских процессов
- •Оценка использования SLRU-кешей
- •Ввод-вывод в контексте объектов СУБД
- •Базы данных
- •Ввод-вывод в контексте выполнения запросов
- •Временные файлы
- •Уровень баз данных
- •Ввод-вывод при выполнении запросов
- •Отслеживание в журнале сообщений
- •Отслеживание активных временных файлов
- •Ввод-вывод фоновых процессов
- •Глава 6. Журнал упреждающей записи
- •Отслеживание активности в журнале
- •Представление pg_stat_wal
- •Представление pg_stat_statements
- •Архивирование журнала
- •Представление pg_stat_archiver
- •Очередь архивирования
- •Глава 7. Репликация
- •Обзор репликации
- •Инструменты отслеживания репликации
- •Представление pg_stat_replication
- •Представление pg_stat_wal_receiver
- •Cлоты репликации и pg_replication_slots
- •Публикации и подписки
- •Конфликты восстановления
- •Глава 8. Очистка
- •Введение в очистку
- •Особенности очистки на практике
- •Когда выполняется автоочистка?
- •Статистика выполнения очистки
- •Счетчик транзакций и предотвращение ошибок, связанных с его зацикливанием
- •Раздувание таблиц и индексов
- •Отслеживание активных процессов очистки
- •Представление pg_stat_activity
- •Представление pg_stat_progress_vacuum
- •Глава 9. Ход выполнения операций
- •Представление pg_stat_progress_analyze
- •Представление pg_stat_progress_basebackup
- •Представление pg_stat_progress_cluster
- •Представление pg_stat_progress_create_index
- •Представление pg_stat_progress_copy
- •Предметный указатель
1.3. Интерфейс статистики |
23 |
области в общей памяти. До версии PostgreSQL 15 получением и хранением статистики занималсяотдельныйпроцессstatscollector.Статистикапередаваласьемубэкендамипопротоколу UDP, и затем она сохранялась на диск. С версии 15 статистика сохраняется сразу в общей памяти1 и необходимость в отдельном процессе отпала. На протяжении всей книги мы будем использоватьэту статистическую информациюдля понимания работы СУБД,идентификации и устранения проблем.
1.3. Интерфейс статистики
Подсистема сбора статистики накапливает различную информацию, которая может понадобиться при устранении проблем. Чтобы воспользоваться этой информацией, достаточно иметь под рукой любой SQL-клиент, который поддерживает подключение к PostgreSQL. В ка- чествепримераможнопривестиpsql—этоофициальныйклиентдляPostgreSQL.Такжеможно использоватьклиенты,которыеявляютсячастьюпродвинутыхинструментовсрасширенным набором функций для работы с СУБД. Примерами таких инструментов являются pgAdmin, DBeaver или DataGrip.
Вся статистика представлена в виде служебных данных СУБД, и для доступа к ней не нужно предпринимать дополнительных действий. Получить статистику можно с помощью служебных функций. Однако пользоваться ими не всегда удобно, поэтому получение статистики из функций организовано через системные представления (view), к которым можно выпол- нятьSQL-запросы.Такиепредставленияаналогичнытаблицам,нонеимеютфизическогослоя хранения данных, и при работе с ними пользователю доступны почти все (кроме записи) возможности языка SQL: соединения,агрегации,оконные функции,подзапросы и т. д.
Со временем при работе со статистикой у пользователя могут появиться «любимые» запросы, которые расширены дополнительной логикой, — в одном запросе может использоваться несколько представлений, возможно, в сочетании с функциями, результаты могут преобразовываться и форматироваться. С помощью SQL такие запросы можно оформить в отдельные представления. В дальнейшем это избавляет от необходимости искать или вспоминать текст запроса, писать его заново: достаточно лишь сделать запрос к представлению и получить готовый результат.
Одной из сильных сторон PostgreSQL является возможностьсоздания расширений (extensions), специальных модулей, устанавливаемых в СУБД с целью добавления новой функциональности, без необходимости изменения основного исходного кода системы. Используя этот меха- низм,разработчикимогутсоздатьнедостающуюфункциональность,апользователи—относи- тельнолегкоподключитьее и использовать.Частьстатистикираспространяетсяв видерасширений.Можно подключитьэти расширения идополнитьстатистику новымиданными.В некоторыхглавахмыбудемтакжерассматриватьстатистику,поставляемуючерезрасширения,что будет отмечено отдельно.
1 git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=5891c7a8ed8f2d3d577e7eea34dacff12d7b6bbd
24Глава 1. Обзор статистики
1.4.Статистика как отправная точка инструментов мониторинга
Статистика, поставляемая в виде функций и представлений, является прочным фундаментом, на основе которого можно строить более продвинутые инструменты для мониторинга и наблюдения за СУБД. Самый простой вариант — это такие же представления с расширенной статистикой, отформатированные для более удобного восприятия человеком. Примерами могут служить различные репозитории с SQL-скриптами1.Более сложные варианты могут встраивать в себя клиентское подключение к PostgreSQL и обеспечивать сбор, обработку, передачу и предоставление информации.По сути,это реализовано практически во всех агентах мониторинга и утилитахдля администраторов БД.Задачатаких агентов сводится к подключениюкСУБД,снятиюинформацииспомощьюзаготовленныхзапросовиотправкееевсистему мониторинга или отображению в собственном пользовательском интерфейсе. Пользователю лишь остается запустить агента и указать реквизиты подключения к СУБД (и, возможно, дополнительные параметры работы,специфичныедля агента).Примерамитаких инструментов являются pgAdmin,pgcenter,pg_activity,pgstats2.
1.5. Особенности статистики
Простота интерфейса статистики влечет за собой и некоторые особенности. Одна из основных — это порог вхождения. Для использования статистики необходимо знание языка SQL набазовомуровне,чтобыделатьпростейшиеSELECT-запросы.Дляболеесложныхприемов,на- примердляизвлечениястатистикиизнесколькихпредставлений,потребуетсяиспользование соединений, подзапросов и более продвинутых возможностей SQL. Другая особенность — это большой набор представлений и функций,что можетвызватьсложности в запоминании имен представлений и их содержимого. Особенно сложно вспоминать имена и названия в аварийной ситуации, когда счет может идти на секунды. Также работа со статистикой усложняется тем, что пользователь должен работать в командном режиме: следует написать и отправить запрос, получить и проанализировать результат, при необходимости повторить. Обычно этот недостатоккомпенсируюторганизациейрепозиторияснаборомскриптов,которыевсегдапод рукой или заранее установлены в БД.
Помимо psql PostgreSQL не предоставляет собственного продвинутого инструмента для работы со статистикой и представлениями. Его отсутствие является причиной появления множества сторонних инструментов работы со статистикой для администраторов БД. У каждого автора есть свое видениетого,как следуетотображать статистику,что и приводитк большому разнообразию среди инструментов и функциональности.
1 github.com/dataegret/pg-utils/tree/master/sql
2 wiki.postgresql.org/wiki/Monitoring
1.6. Тестовое окружение |
25 |
Отдельнойособенностьюидаженедостаткомявляетсяотсутствиестатистикипожурналамсообщений. Чтобы работать с журналами, пользователю необходимо иметь к ним доступ. Чаще всего это файлы в операционной системе, где запущена СУБД. Некоторые расширения пытаются решитьэту проблему,но,к сожалению,они не имеютофициальной поддержки разработчиков PostgreSQL,что уменьшает их распространенность и усложняет использование.
1.6. Тестовое окружение
В приложении приведены описание и инструкция по развертыванию тестового окружения. Тестовое окружение используется на протяжении всей книги для практических задач и примеров. На основе тестового окружения будет демонстрироваться использование статистики
ибудут объясняться важные особенности. Тестовое окружение также будет полезно любознательным читателям,желающим поэкспериментировать,усвоить материал книги на практике
ивыйти за рамки основного повествования. При желании установку текстового окружения можно пропустить без значительного ущерба для понимания материала.
Резюме
•PostgreSQL—этосложноеповнутреннемуустройствуПО,состоящееизразныхподсистем.
•При эксплуатации всегда есть риск возникновения различных проблем.
•Статистика активности позволяет отслеживать работу СУБД и дает администратору возможность упреждать проблемы.
•Статистика доступна с помощью SQL-функций и представлений.
•Для работы со статистикой потребуется знание языка SQL.
•Минималистичный интерфейс статистики является причиной многообразия инструментов для администраторов БД.
•Для рассмотрения практических аспектов статистики можно воспользоваться тестовым окружением.
