[Системное администрирование, PostgreSQL, Администрирование баз данных] Что нового в плане мониторинга в PostgreSQL 14

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
23-Май-2021 00:30

Всем привет, на этой неделе вышел бета-релиз PostgreSQL 14. В этом небольшом посте я сделаю краткий обзор того что есть нового и полезного в плане мониторинга и наблюдения.
По идее пост должен быть интересен тем кому небезразлична тема мониторинга и поиска проблем в PostgreSQL — системные администраторы, DBA, SRE, DBRE.
  • В pg_stat_activity добавлено новое поле query_id. Поле содержит идентификатор запроса аналогичный тому что есть в pg_stat_statements. Таким образом с помощью трио полей datid/userid/query_id можно присоединить pg_stat_statements и посмотреть накопленную статистику по конкретному типу запросов. Забавный нюанс — имена полей для объединения между pg_stat_activity и pg_stat_statements отличаются.

    Осторожно, текст

    SPL
    select a.*, s.* from pg_stat_activity a inner join pg_stat_statements s on (a.datid = s.dbid AND a.usesysid = s.userid AND a.query_id = s.queryid) where a.pid = 1001291;
    -[ RECORD 1 ]-------+-----------------------------------------------------------
    datid               | 16413
    datname             | pgbench
    pid                 | 1001291
    leader_pid          |
    usesysid            | 10
    usename             | postgres
    application_name    | pgbench
    client_addr         |
    client_hostname     |
    client_port         | -1
    backend_start       | 2021-05-22 10:15:57.299468+05
    xact_start          | 2021-05-22 10:16:25.566151+05
    query_start         | 2021-05-22 10:16:25.566623+05
    state_change        | 2021-05-22 10:16:25.566763+05
    wait_event_type     |
    wait_event          |
    state               | idle in transaction
    backend_xid         | 237577
    backend_xmin        |
    query_id            | 2517686606037258902
    query               | SELECT abalance FROM pgbench_accounts WHERE aid = 1715456;
    backend_type        | client backend
    userid              | 10
    dbid                | 16413
    toplevel            | t
    queryid             | 2517686606037258902
    query               | SELECT abalance FROM pgbench_accounts WHERE aid = $1
    plans               | 0
    total_plan_time     | 0
    min_plan_time       | 0
    max_plan_time       | 0
    mean_plan_time      | 0
    stddev_plan_time    | 0
    calls               | 209439
    total_exec_time     | 4251.98569499987
    min_exec_time       | 0.005414
    max_exec_time       | 0.435581
    mean_exec_time      | 0.020301785698938563
    stddev_exec_time    | 0.005889254053319066
    rows                | 209439
    shared_blks_hit     | 884097
    shared_blks_read    | 0
    shared_blks_dirtied | 0
    shared_blks_written | 0
    local_blks_hit      | 0
    local_blks_read     | 0
    local_blks_dirtied  | 0
    local_blks_written  | 0
    temp_blks_read      | 0
    temp_blks_written   | 0
    blk_read_time       | 0
    blk_write_time      | 0
    wal_records         | 149
    wal_fpi             | 2
    wal_bytes           | 9870


    • В pg_stat_activity в списке процессов теперь также отображается WAL archiver. Пока информации не так много, так что не особо информативно и есть куда развиваться далее.
    • В pg_stat_activity для wal sender процессов (участвуют в репликации), в поле query отображается команда протокола репликации. Это небольшое улучшение позволяет отслеживать команды репликации между мастером и репликами, раньше это возможно было только через логи с включенным параметром log_replication_commands.
    • В pg_locks добавлено поле waitstart — время с которого началось ожидание. Поле позволяет получить время ожидания и при этом не присоединять pg_stat_activity. С одной стороны вроде и удобно, но чтобы взять текст запроса, все равно понадобится присоединить pg_stat_activity. А вот для использования в качестве метрики, вполне подходит т.к. в таком случае текст запроса может быть неинтересен.

      Выглядит так

      SPL
      # select pid,mode,now()-waitstart as wait_time from pg_locks where not granted;
      -[ RECORD 1 ]--------------
      pid       | 1068094
      mode      | ShareLock
      wait_time | 00:00:12.669753
      -[ RECORD 2 ]--------------
      pid       | 1068093
      mode      | ShareLock
      wait_time | 00:00:14.789208


      • Пара групп полей в pg_stat_database. Первая группа это session_time, active_time, idle_in_transaction_time — коротко, в этих полях посчитано сколько времени проведено сессиями. Есть нюанс — счетчики обновляются в момент смены состояния (поле state), поэтому если сессия долгое время находится в одном состоянии, то это время засчитается только тогда когда оно (состояние) сменится на другое или сессия завершится. Вторая группа полей — sessions, sessions_abandoned, sessions_fatal, sessions_killed определяет статистику по сессиям и причинам их завершения. Обе группы счетчиков так и просятся в графики на мониторинг.
      • Новое представление pg_stat_progress_copy. По названию очевидно что представление показывает ход выполнения команд COPY. Полезно за наблюдением того как 1) выполняется выгрузка и загрузка дампов (pg_dump), 2) непосредственное выполнение команд COPY, 3) выполнение начальной загрузки таблиц при использовании логической репликации через публикации/подписки.

        Пример копирования из файла в таблицу

        SPL
        -[ RECORD 1 ]----+----------
        pid              | 1068106
        datid            | 16413
        datname          | pgbench
        relid            | 17612
        command          | COPY FROM
        type             | FILE
        bytes_processed  | 30998528
        bytes_total      | 195764221
        tuples_processed | 313263
        tuples_excluded  | 0


        • Новое представление pg_stat_wal — с помощью него можно получить подробное представление об объемах генерируемого WAL. До версии 13 ничего подобного не было. Затем в 13-й версии подобная статистика была добавлена в pg_stat_statements и если ее просуммировать можно получить нечто похожее. Теперь эта статистика расширена и есть в более обобщенном виде (не привязана к запросам).

          Пример

          SPL
          -[ RECORD 1 ]----+------------------------------
          wal_records      | 40811237
          wal_fpi          | 1551923
          wal_bytes        | 13744020096
          wal_buffers_full | 509935
          wal_write        | 1177449
          wal_sync         | 666045
          wal_write_time   | 26449.751
          wal_sync_time    | 10956905.427
          stats_reset      | 2021-05-21 10:33:39.009804+05


Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 24-Ноя 18:16
Часовой пояс: UTC + 5