Обслуживание и управление

Просмотр состояния выполнения

Параметр Описание
domino.decoder_info() Отображает информацию о декодере для текущей базы данных.
domino.decoder_info_all() Отображает информацию о декодере для всех баз данных.
domino.decoder_workers() Запрашивает PID рабочих процессов и базы данных, к которым они подключены.
domino.decoder_metrics() Показывает счетчики производительности для декодеров.
domino.stream_metrics() Показывает счетчики производительности планировщика и информацию об ошибках для потоков.
domino.stream_strategy() Отображает стратегию планирования и статус потоков.
domino.stream_progress() Показывает прогресс потока и статус удержания XLog.
domino.ticker_info() Проверяет, запущен ли тикер или он приостановлен.
domino.ticker_metric() Показывает условия, вызвавшие срабатывание тикера.
domino.tlog_page(text) Отображает содержимое TLog; используется для отладки.

Примеры использования

  • domino.decoder_workers(): Запрос PID рабочих процессов и подключенных баз данных.

    =# select * from domino.decoder_workers();
    segid | dbid  | dbname |  pid
    -------+-------+--------+-------
       0 | 18745 | haoyu  | 20351
       1 | 18745 | haoyu  | 20353
       2 | 18745 | haoyu  | 20352
      -1 | 18745 | haoyu  | 20354
    (4 rows)
  • domino.decoder_metrics(): Просмотр счетчиков производительности декодеров.

    =# select * from domino.decoder_metrics();
    segid | dbid  | dbname | bytes_in | xacts | spills | tuples_new | tuples_old | snapshots | latency_ms | loops | total_duration_ms | last_duration_ms
    -------+-------+--------+----------+-------+--------+------------+------------+-----------+------------+-------+-------------------+------------------
       0 | 18745 | haoyu  |    36048 |     0 |      0 |          0 |          0 |       119 |          0 | 25851 |             26616 |                1
       1 | 18745 | haoyu  |    35872 |     0 |      0 |          0 |          0 |       119 |          0 | 26755 |             27517 |                1
       2 | 18745 | haoyu  |    36048 |     0 |      0 |          0 |          0 |       119 |          0 | 25814 |             26576 |                1
      -1 | 18745 | haoyu  |    36784 |     0 |      0 |          0 |          0 |       119 |          0 | 22781 |             23444 |                1
    (4 rows)
  • domino.stream_metrics(): Просмотр счетчиков производительности планировщика потоков и сообщений об ошибках.

    =# select * from domino.stream_metrics();
    db   | db_name | stream | stream_name | loops | tuples | total_slip_ms | last_slip_ms | last_lag_ms | total_duration_ms | last_duration_ms |           last_run            |          held_until           | has_error | error_message | error_detail | error_hint | error_context
    -------+---------+--------+-------------+-------+--------+---------------+--------------+-------------+-------------------+------------------+-------------------------------+-------------------------------+-----------+---------------+--------------+------------+---------------
    18745 | haoyu   |  18792 | s1          |     4 |      0 |             6 |            2 |        1709 |                57 |                7 | 2025-05-23 14:14:26.249188+08 | 2025-05-23 14:14:27.242299+08 | f         |               |              |            |
    (1 row)
  • domino.stream_strategy(): Просмотр стратегии планирования и статуса потоков.

    =# select * from domino.stream_strategy();
    id |  db   | db_name | stream | stream_name |  strategy  |                 summary
    ----+-------+---------+--------+-------------+------------+------------------------------------------
    0 | 18745 | haoyu   |  18792 | s1          | roundrobin | held until 2025-05-23 14:14:56.279678+08
    (1 row)
  • domino.stream_progress(): Просмотр прогресса потока и статуса удержания XLog.

    =# select * from domino.stream_progress();
    segid |  db   | db_name | stream | stream_name | restart_lsn | flush_lsn |   tsn   | xmin |  end_lsn  | lag_size | pending_xid | pending_restart | pending_flush | pending_tsn | pending_xmin | wal_status | safe_wal_size
    -------+-------+---------+--------+-------------+-------------+-----------+---------+------+-----------+----------+-------------+-----------------+---------------+-------------+--------------+------------+---------------
       0 | 18745 | haoyu   |  18792 | s1          | 0/C246788   | 0/C249420 | 0/1A160 |  645 | 0/C249CE0 |     2240 |         647 | 0/C246788       | 0/C249610     | 0/1A240     |          646 | reserved   |
       1 | 18745 | haoyu   |  18792 | s1          | 0/C2466F0   | 0/C249388 | 0/1A160 |  645 | 0/C249C48 |     2240 |         647 | 0/C2466F0       | 0/C249578     | 0/1A240     |          646 | reserved   |
       2 | 18745 | haoyu   |  18792 | s1          | 0/C246788   | 0/C249420 | 0/1A160 |  645 | 0/C249CE0 |     2240 |         647 | 0/C246788       | 0/C249610     | 0/1A240     |          646 | reserved   |
    (3 rows)
  • domino.ticker_info(): Проверка, запущен ли тикер или он приостановлен.

    -- Return values: (invalid: not started, running: active, paused: paused)
    ticker_info
    -------------
    running
    (1 row)
  • domino.ticker_metric(): Просмотр условий, вызывающих срабатывание тикера.

    =# SELECT * FROM domino.ticker_metric();
    segid | ticks_by_time | ticks_by_size | ticks_by_force
    -------+---------------+---------------+----------------
       0 |         18894 |             2 |              1
       1 |         18894 |             2 |              1
       2 |         18894 |             2 |              1
      -1 |             0 |             0 |              0
    (4 rows)

Представления информации

Плагин Domino предоставляет два представления: domino.decoder_info и domino.stream_info, используемые для мониторинга состояния и метрик логических декодеров и потоков данных.

decoder_info

domino.decoder_info отображает состояние выполнения и метрики логических декодеров на каждом сегменте.

Описание полей

Имя поля Тип Описание
segid integer Идентификатор сегмента
dbid oid OID базы данных
dbname text Имя базы данных
restart_lsn pg_lsn Начальный LSN удерживаемого XLog (XLog удерживается с этой позиции)
confirmed_flush pg_lsn LSN, до которого выполнен flush XLog
start_tsn pg_lsn Начальный TSN последнего сгенерированного TLog
end_tsn pg_lsn Конечный TSN последнего сгенерированного TLog
prog_xmin xid xmin таблиц каталога/измерений (данные удерживаются на основе этого xmin)
pid integer ID процесса декодера; 0 означает, что процесс не запущен
bytes_in bigint Общий объем потребленных данных XLog
xacts bigint Общее количество потребленных транзакций
spills bigint Количество транзакций, вытесненных на диск
tuples_new bigint Количество вставленных строк
tuples_old bigint Количество старых строк, обновленных/удаленных
snapshots bigint Количество созданных снимков
latency_ms bigint Задержка последнего цикла декодирования
loops bigint Количество циклов выполнения декодера
total_duration_ms bigint Суммарное время выполнения
last_duration_ms bigint Длительность последнего цикла выполнения

Пример запроса

-- Check segments with high decoding latency
SELECT segid, dbid, dbname, dbname, latency_ms
FROM domino.decoder_info
WHERE latency_ms > 60 * 1000;

stream_info

domino.stream_info отображает общий прогресс, статус и информацию о планировании для каждого логического потока.

Описание полей

Имя поля Тип Описание
segid integer Идентификатор сегмента
db oid OID базы данных
db_name text Имя базы данных
stream oid OID потока
stream_name text Имя потока
restart_lsn pg_lsn Начальный LSN удерживаемого XLog (XLog удерживается с этой позиции)
flush_lsn pg_lsn LSN, до которого выполнен flush XLog
start_tsn pg_lsn Начальный TSN последнего потребленного TLog
end_tsn pg_lsn Конечный TSN последнего потребленного TLog
xmin xid xmin таблиц каталога/измерений (данные удерживаются на основе этого xmin)
end_lsn pg_lsn Последний LSN на этом сегменте
lag_size bigint Разница размера между flush_lsn и end_lsn
pending_xid xid ID незавершенной транзакции
pending_restart pg_lsn Незавершенный LSN перезапуска XLog (XLog удерживается с этой позиции)
pending_flush pg_lsn Незавершенный LSN flush XLog
pending_tsn pg_lsn Незавершенный начальный TSN TLog
pending_xmin xid Незавершенный xmin таблиц каталога/измерений
wal_status text Статус WAL: active: в пределах max_wal_size, не очищается; reserved: превышает max_wal_size, но защищен логическим слотом или потоком, не очищается; unprotected: вышел за пределы защиты слота и потока, будет очищен на следующей контрольной точке; removed: уже очищен
safe_wal_size bigint Безопасный максимальный предел размера WAL; WAL, превышающий этот размер, может быть очищен
loops bigint Количество циклов выполнения
tuples bigint Количество обработанных строк
total_slip_ms bigint Суммарное время ожидания (задержка планирования задачи)
last_slip_ms bigint Длительность последнего ожидания
last_lag_ms bigint Задержка обработки потока (разница во времени между последней обработанной меткой и последней доступной меткой)
total_duration_ms bigint Общее время выполнения
last_duration_ms bigint Длительность последнего выполнения
last_run timestamp with time zone Время последнего выполнения
held_until timestamp with time zone Время следующего запланированного выполнения (при ошибке — ожидание одной минуты перед повторной попыткой)
has_error boolean Произошла ли ошибка
error_message text Сообщение об ошибке
error_detail text Детали ошибки
error_hint text Подсказка по ошибке
error_context text Контекст ошибки
slot_id integer Слот рабочего процесса Domino, используемый в данный момент
strategy text Стратегия планирования
summary text Краткое описание стратегии

Примеры запросов

-- Check all streams with errors
SELECT stream_name, error_message
FROM domino.stream_info
WHERE has_error;

-- Check streams with large lag
SELECT stream_name, pg_size_pretty(lag_size) AS lag
FROM domino.stream_info
WHERE lag_size > 64*1024*1024;

Функции управления

Функция Описание
domino.start_all() Запускает все компоненты. После создания плагина компоненты v2 не запускаются автоматически при перезагрузке; требуется ручной запуск.
domino.stop_all() Останавливает все компоненты.
domino.start_decoder() Запускает декодер.
domino.stop_decoder() Останавливает декодер.
domino.start_ticker() Запускает тикер.
domino.stop_ticker() Останавливает тикер.
domino.pause_ticker() Приостанавливает тикер.
domino.resume_ticker() Возобновляет тикер.
domino.reset_ticker() Сбрасывает тикер.
domino.wait_next_tick() Ожидает следующий тик.

Управление прогрессом

Используется в основном для устранения неполадок.

Функция Описание
domino.wait_for_decoder() Ожидает, пока декодер догонит текущее состояние.
domino.wait_for_stream() Ожидает, пока поток догонит текущее состояние.
domino.pause_stream(oid) Приостанавливает конкретный поток.
domino.pause_all_streams() Приостанавливает все потоки.
domino.resume_stream(oid) Возобновляет конкретный поток.
domino.resume_all_streams() Возобновляет все потоки.
domino.rotate_tlog() Переключает файл TLog (сегмент).