FirebirdSQL logo

СУБД Firebird предоставляет возможность отслеживать работу с конкретной базой данных, выполняемую на стороне сервера.Для этих целей используются таблицы мониторинга. Таблицы мониторинга имеют префикс имени MON$. Эти таблицы являются виртуальными в том смысле, что до обращения к ним со стороны пользователя, никаких данных в них не записано.Они заполняются данными только в момент запроса пользователя (в том числе, поэтому на такие таблицы бесполезно пытаться создавать триггеры). При этом описания этих таблиц в базе данных присутствуют постоянно.

Ключевым понятием функции мониторинга является снимок активности.Снимок представляет собой текущее состояние базы данных, содержащее множество информации о самой базе данных, активных соединениях, пользователях, транзакциях, подготовленных и выполняемых запросах и т.д.

Снимок создаётся при первой выборке из любой таблицы мониторинга и сохраняется до конца текущей транзакции, чтобы запросы к множеству таблиц (например, главная-подчинённая) всегда возвращал непротиворечивые данные.

Другими словами таблицы мониторинга ведут себя подобно SNAPSHOT TABLE STABILITY (isc_tpb_consistency) транзакции, даже если запросы к ним выполняются в транзакции с меньшим уровнем изолированности.

Для обновления снимка, текущая транзакция должна быть завершена и таблицы мониторинга должны быть запрошены в новом контексте транзакции.

Безопасность:* Полный доступ ко всей информации, предоставляемой таблицами мониторинга, имеют SYSDBA и владелец базы данных;
  • Обычные пользователи ограничены информацией о собственных соединениях, другие соединения невидимы для них.

Note

Частый сбор информации с помощью таблиц мониторинга в сильно нагруженной среде может негативно отразиться на производительности системы.

Таблицы мониторинга
MON$ATTACHMENTS

Сведения о текущих соединениях с базой данных.

MON$CALL_STACK

Обращения к стеку активными запросами хранимых процедур итриггеров.

MON$COMPILED_STATEMENTS

Подготовленные к выполнению запросы и PSQL модули.

MON$CONTEXT_VARIABLES

Сведения о пользовательских контекстных переменных.

MON$DATABASE

Сведения о базе данных, с которой выполнено соединение.

MON$IO_STATS

Статистика по вводу-выводу.

MON$MEMORY_USAGE

Статистика использования памяти.

MON$RECORD_STATS

Статистика на уровне записей.

MON$STATEMENTS

Выполняемые запросы.

MON$TABLE_STATS

Статистика на уровне таблиц.

MON$TRANSACTIONS

Запущенные транзакции.

MON$ATTACHMENTS

Сведения о текущих соединениях с базой данных.

Table 1. Описание столбцов таблицы MON$ATTACHMENTS
Наименование столбца Тип данных Описание

MON$ATTACHMENT_ID

BIGINT

Идентификатор соединения.

MON$SERVER_PID

INTEGER

Идентификатор серверного процесса.

MON$STATE

SMALLINT

Состояние соединения:

0 — бездействующее;
1 — активное.

MON$ATTACHMENT_NAME

VARCHAR(255)

Строка соединения — полный путь к файлу и имя первичного файлабазы данных.

MON$USER

CHAR(63)

Имя пользователя, соединённого с базой данных.

MON$ROLE

CHAR(63)

Имя роли, указанное при соединении. Если роль во время соединенияне была задана, поле содержит текст NONE.

MON$REMOTE_PROTOCOL

VARCHAR(10)

Используемый сетевой протокол.

MON$REMOTE_ADDRESS

VARCHAR(255)

Адрес удалённого клиента.

MON$REMOTE_PID

INTEGER

Идентификатор клиентского процесса.

MON$CHARACTER_SET_ID

SMALLINT

Идентификатор набора символов в соединении.

MON$TIMESTAMP

TIMESTAMP

Дата и время начала соединения.

MON$GARBAGE_COLLECTION

SMALLINT

Флаг сборки мусора (указывается в DPB при подключении):1 - позволяется, 0 - не позволяется.

MON$REMOTE_PROCESS

VARCHAR(255)

Полный путь к файлу и имя программного файла, выполнившего данноесоединение.

MON$STAT_ID

INTEGER

Идентификатор статистики.

MON$CLIENT_VERSION

VARCHAR(255)

Версия клиентской библиотеки.

MON$REMOTE_VERSION

VARCHAR(255)

Версия сетевого протокола.

MON$REMOTE_HOST

VARCHAR(255)

Имя удалённого клиентского хоста.

MON$REMOTE_OS_USER

VARCHAR(255)

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

MON$AUTH_METHOD

VARCHAR(255)

Метод проверки подлинности, используемый при подключении.

MON$SYSTEM_FLAG

SMALLINT

Флаг того, что подключение системное:

0 — пользовательское подключение;
1 — системное подключение.

MON$IDLE_TIMEOUT

INTEGER

Тайм-аут простоя соединения уровня соединения. Содержит значениетайм-аута простоя уровня соединения, в секундах. Если тайм-аут неустановлен — 0.

MON$IDLE_TIMER

TIMESTAMP

Время истечения таймера ожидания. Содержит NULL, если тайм-аутпростоя соединения не установлен, или если таймер не запущен.

MON$STATEMENT_TIMEOUT

INTEGER

Тайм-аут SQL оператора уровня соединения. Содержит значениетайм-аута, установленное на уровне соединения, в миллисекундах. Еслитайм-аут не установлен — 0.

MON$WIRE_COMPRESSED

BOOLEAN

Используется ли сжатие сетевого трафика. Если используется сжатиесетевого трафика значение равно TRUE, если не используется — FALSE.Для встроенных соединений — возвращает NULL.

MON$WIRE_ENCRYPTED

BOOLEAN

Используется ли шифрование сетевого трафика. Если используетсяшифрование сетевого трафика значение равно TRUE, если неиспользуется — FALSE. Для встроенных соединений — возвращает NULL.

MON$WIRE_CRYPT_PLUGIN

CHAR(63)

Имя текущего плагина для шифрования сетевого трафика, если оноиспользуется, в противном случае NULL.

MON$SESSION_TIMEZONE

CHAR(63)

Текущий часовой пояс соединения.

MON$PARALLEL_WORKERS

INTEGER

Максимальное количество параллельных рабочих процессов для этого соединения, 1 означает отсутствие параллельных рабочих процессов.Соединения "Garbage Collector" и "Cache Writer" могут сообщать 0.

Example 1. Получение сведений о клиентских приложениях
SELECT MON$USER, MON$REMOTE_ADDRESS, MON$REMOTE_PID, MON$TIMESTAMP
FROM MON$ATTACHMENTS
WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION