FirebirdSQL logo

MON$STATEMENTS

Выполняемые SQL операторы.

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

MON$STATEMENT_ID

BIGINT

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

MON$ATTACHMENT_ID

BIGINT

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

MON$TRANSACTION_ID

BIGINT

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

MON$STATE

SMALLINT

Состояние оператора:

0 — бездействующий (idle);
1 — выполняемый (active);
2 — приостановленный (stalled).

MON$TIMESTAMP

TIMESTAMP

Дата и время старта оператора.

MON$SQL_TEXT

BLOB TEXT

Текст оператора на языке SQL.

MON$STAT_ID

INTEGER

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

MON$EXPLAINED_PLAN

BLOB TEXT

План оператора в explain форме.

MON$STATEMENT_TIMEOUT

INTEGER

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

MON$STATEMENT_TIMER

TIMESTAMP

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

MON$COMPILED_STATEMENT_ID

BIGINT

Идентификатор скомпилированного запроса (ссылка на MON$COMPILED_STATEMENTS).

Состояние оператора STALLED — это состояние “приостановлено”. Возможно для запроса, который начал своё выполнение, ещё не завершил его, но в данный момент не выполняется.Например, ждёт входных параметров или очередного фетча (fetch) от клиента.

Example 1. Отображение активных запросов за исключением тех, что выполняются в своём соединении
SELECT ATT.MON$USER, ATT.MON$REMOTE_ADDRESS, STMT.MON$SQL_TEXT, STMT.MON$TIMESTAMP
FROM MON$ATTACHMENTS ATT
  JOIN MON$STATEMENTS STMT ON ATT.MON$ATTACHMENT_ID = STMT.MON$ATTACHMENT_ID
WHERE ATT.MON$ATTACHMENT_ID <> CURRENT_CONNECTION
  AND STMT.MON$STATE = 1

Использование MON$STATEMENTS для отмены запросов

Таблицы мониторинга доступны только для чтения.Однако в сервер встроен механизм для удаления (и только удаления) записей в таблице MON$STATEMENTS, что позволяет завершить активный запрос.

Note
  • Попытка отмены запросов не выполняется, если в соединении в настоящее время нет никаких выполняющихся операторов.

  • После отмены запроса вызов API-функций execute/fetch вернёт ошибку с кодом isc_cancelled.

  • Последующие запросы в данном соединении не запрещены.

  • Отмена запроса не происходит синхронно, оператор лишь помечает запрос на отмену, а сама отмена производится ядром асинхронно.

Example 1. Отмена всех активных запросов для заданного соединения
DELETE FROM MON$STATEMENTS
WHERE MON$ATTACHMENT_ID = 32