FirebirdSQL logo
 Системные таблицыТаблицы безопасности 

Использование MON$ATTACHMENTS для закрытия подключений

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

Note
  • Вся текущая активность в удаляемом соединении немедленно прекращается, и все активные транзакции откатываются (триггеры на события ON DISCONNECT и ON TRANSACTION ROLLBACK не вызываются);

  • Закрытое соединение вернёт приложению ошибку с кодом isc_att_shutdown;

  • Последующие попытки использовать это соединение (т.е. использовать его handle в API-вызовах) вернут ошибки;

  • Завершение системных соединений (MON$SYSTEM_FLAG = 1) невозможно. Сервер пропустит системные подключения затронутые оператором DELETE FROM MON$ATTACHMENTS.

Example 1. Отключение всех соединений, за исключением своего
DELETE FROM MON$ATTACHMENTS
WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION

MON$TABLE_STATS

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

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

MON$STAT_ID

INTEGER

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

MON$STAT_GROUP

SMALLINT

Группа статистики:

0 — база данных (database);
1 — соединение с базой данных (connection);
2 — транзакция (transaction);
3 — оператор (statement);
4 — вызов (call).

MON$TABLE_NAME

CHAR(63)

Имя таблицы.

MON$RECORD_STAT_ID

INTEGER

Ссылка на MON$RECORD_STATS.

Example 1. Получение статистики на уровне записей по каждой таблицы для своего соединения
SELECT
    t.mon$table_name,
    r.mon$record_inserts,
    r.mon$record_updates,
    r.mon$record_deletes,
    r.mon$record_backouts,
    r.mon$record_purges,
    r.mon$record_expunges,
    ------------------------
    r.mon$record_seq_reads,
    r.mon$record_idx_reads,
    r.mon$record_rpt_reads,
    r.mon$backversion_reads,
    r.mon$fragment_reads,
    ------------------------
    r.mon$record_locks,
    r.mon$record_waits,
    r.mon$record_conflicts,
    ------------------------
    a.mon$stat_id
FROM
    mon$record_stats r
    JOIN mon$table_stats t ON r.mon$stat_id = t.mon$record_stat_id
    JOIN mon$attachments a ON t.mon$stat_id = a.mon$stat_id
WHERE
      a.mon$attachment_id = CURRENT_CONNECTION

docnext count = 10

MON$TRANSACTIONS

Описывает начатые транзакции

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

MON$TRANSACTION_ID

BIGINT

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

MON$ATTACHMENT_ID

BIGINT

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

MON$STATE

SMALLINT

Состояние транзакции:

0 — бездействующая (транзакция не имеет связанных с ней запросов);
1 — активная (есть хотя бы один запрос связанный с транзакцией).

Запрос связывается с транзакцией, когда начинает его выполнение.Эта связь разрывается, когда запрос начинает новое выполнение в другой транзакции, или, когда транзакция или запрос удаляется, но не тогда, когда запрос выполнен или из курсора выбраны все записи.

MON$TIMESTAMP

TIMESTAMP

Дата и время старта транзакции.

MON$TOP_TRANSACTION

INTEGER

Верхний предел используемый транзакцией чистильщика (sweeper) припродвижении глобального OIT. Все транзакции выше этого порогасчитаются активными. Обычно он эквивалентен MON$TRANSACTION_ID, ноиспользование COMMIT RETAINING или ROLLBACK RETAINING приводит ктому, что MON$TOP_TRANSACTION останется неизменным (“зависшим”) приувеличении идентификатора транзакции.

MON$OLDEST_TRANSACTION

INTEGER

Номер старейшей заинтересованной транзакции — OIT, OldestInteresting Transaction.

MON$OLDEST_ACTIVE

INTEGER

Номер старейшей активной транзакции — OAT, Oldest ActiveTransaction.

MON$ISOLATION_MODE

SMALLINT

Режим (уровень) изоляции:

0 — consistency (snapshot table stability);
1 — concurrency (snapshot);
2 — read committed record version;
3 — read committed no record version;
4 — read committed read consistency.

MON$LOCK_TIMEOUT

SMALLINT

Время ожидания:

-1 — бесконечное ожидание (wait);
0 — транзакция no wait;
другое число — время ожидания в секундах (lock timeout).

MON$READ_ONLY

SMALLINT

Признак, является ли транзакцией только для чтения, read only(значение 1) или для чтения и записи, read-write (0).

MON$AUTO_COMMIT

SMALLINT

Признак, используется ли автоматическое подтверждение транзакцииauto-commit (значение 1) или нет (0).

MON$AUTO_UNDO

SMALLINT

Признак, используется ли автоматическая отмена транзакцииauto-undo (значение 1) или нет (0). Если используется автоматическаяотмена транзакции, создаётся точка сохранения уровня транзакции.Существование точки сохранения позволяет отменять изменения, есливызывается ROLLBACK, после чего транзакция просто фиксируется. Еслиэтой точки сохранения не существует или она существует, ноколичество изменений очень велико, выполняется фактический ROLLBACK,и транзакция помечается в TIP как «мертвая».

MON$STAT_ID

INTEGER

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

Example 1. Получение всех подключений, которые стартовали Read Write транзакции с уровнем изоляции выше Read Committed.
SELECT
    DISTINCT a.*
FROM
    mon$attachments a
    JOIN mon$transactions t ON a.mon$attachment_id = t.mon$attachment_id
WHERE
  NOT(t.mon$read_only = 1 AND t.mon$isolation_mode >= 2);

MON$CALL_STACK

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

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

MON$CALL_ID

BIGINT

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

MON$STATEMENT_ID

BIGINT

Идентификатор верхнего уровня оператора SQL — оператора,инициировавшего цепочку обращений. По этому идентификатору можнонайти запись об активном операторе в таблице MON$STATEMENTS.

MON$CALLER_ID

BIGINT

Идентификатор обращающегося триггера, хранимой функции илихранимой процедуры.

MON$OBJECT_NAME

CHAR(63)

Имя объекта PSQL.

MON$OBJECT_TYPE

SMALLINT

Тип объекта PSQL:

2 — триггер;
5 — хранимая процедура;
15 — хранимая функция.

MON$TIMESTAMP

TIMESTAMP

Дата и время старта обращения.

MON$SOURCE_LINE

INTEGER

Номер исходной строки оператора SQL, выполняющегося в настоящиймомент.

MON$SOURCE_COLUMN

INTEGER

Номер исходного столбца оператора SQL, выполняющегося в настоящиймомент.

MON$STAT_ID

INTEGER

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

MON$PACKAGE_NAME

CHAR(63)

Имя пакета для упакованных процедур/функций.

MON$COMPILED_STATEMENT_ID

BIGINT

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

Note

В стек вызовов не попадёт информация о вызовах при выполнении оператора EXECUTE STATEMENT.

Example 1. Получение стека вызовов для всех подключений кроме своего
WITH RECURSIVE
  HEAD AS (
    SELECT
      CALL.MON$STATEMENT_ID, CALL.MON$CALL_ID,
      CALL.MON$OBJECT_NAME, CALL.MON$OBJECT_TYPE
    FROM MON$CALL_STACK CALL
    WHERE CALL.MON$CALLER_ID IS NULL
    UNION ALL
    SELECT
      CALL.MON$STATEMENT_ID, CALL.MON$CALL_ID,
      CALL.MON$OBJECT_NAME, CALL.MON$OBJECT_TYPE
    FROM MON$CALL_STACK CALL
      JOIN HEAD ON CALL.MON$CALLER_ID = HEAD.MON$CALL_ID
  )
SELECT MON$ATTACHMENT_ID, MON$OBJECT_NAME, MON$OBJECT_TYPE
FROM HEAD
  JOIN MON$STATEMENTS STMT ON STMT.MON$STATEMENT_ID = HEAD.MON$STATEMENT_ID
WHERE STMT.MON$ATTACHMENT_ID <> CURRENT_CONNECTION

MON$COMPILED_STATEMENTS

Скомпилированные SQL операторы.

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

MON$COMPILED_STATEMENT_ID

BIGINT

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

MON$SQL_TEXT

BLOB TEXT

Текст оператора на языке SQL. Внутри PSQL объектов текст SQL операторов не отображается.

MON$EXPLAINED_PLAN

BLOB TEXT

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

MON$OBJECT_NAME

CHAR(63)

Имя PSQL объекта, в котором был компилирован SQL оператор.

MON$OBJECT_TYPE

SMALLINT

Тип объекта.2 — триггер;
5 — хранимая процедура;
15 — хранимая функция.

MON$PACKAGE_NAME

CHAR(63)

Имя PSQL пакета.

MON$STAT_ID

INTEGER

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

MON$CONTEXT_VARIABLES

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

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

MON$ATTACHMENT_ID

BIGINT

Идентификатор соединения. Содержит корректное значение только дляконтекстных переменных уровня соединения, для переменных уровнятранзакции устанавливается в NULL.

MON$TRANSACTION_ID

BIGINT

Идентификатор транзакции. Содержит корректное значение только дляконтекстных переменных уровня транзакции, для переменных уровнясоединения устанавливается в NULL.

MON$VARIABLE_NAME

VARCHAR(80)

Имя контекстной переменной.

MON$VARIABLE_VALUE

VARCHAR(32765)

Значение контекстной переменной.

Example 1. Получение всех сессионных контекстных переменных для текущего подключения
SELECT VAR.MON$VARIABLE_NAME, VAR.MON$VARIABLE_VALUE
FROM MON$CONTEXT_VARIABLES VAR
WHERE VAR.MON$ATTACHMENT_ID = CURRENT_CONNECTION

MON$DATABASE

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

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

MON$DATABASE_NAME

VARCHAR(255)

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

MON$PAGE_SIZE

SMALLINT

Размер страницы файлов базы данных в байтах.

MON$ODS_MAJOR

SMALLINT

Старшая версия ODS.

MON$ODS_MINOR

SMALLINT

Младшая версия ODS.

MON$OLDEST_TRANSACTION

BIGINT

Номер старейшей заинтересованной транзакции — OIT, OldestInteresting Transaction.

MON$OLDEST_ACTIVE

BIGINT

Номер старейшей активной транзакции — OAT, Oldest ActiveTransaction.

MON$OLDEST_SNAPSHOT

BIGINT

Номер транзакции, которая была активной на момент стартатранзакции OAT, транзакция OST — Oldest Snapshot Transaction.

MON$NEXT_TRANSACTION

BIGINT

Номер следующей транзакции.

MON$PAGE_BUFFERS

INTEGER

Количество страниц, выделенных в оперативной памяти для кэша.

MON$SQL_DIALECT

SMALLINT

SQL диалект базы данных: 1 или 3.

MON$SHUTDOWN_MODE

SMALLINT

Текущее состояние останова (shutdown) базы данных:

0 — база данных активна (online);
1 — останов для нескольких пользователей (multi-user shutdown);
2 — останов для одного пользователя (single-user shutdown);
3 — полный останов (full shutdown).

MON$SWEEP_INTERVAL

INTEGER

Интервал чистки (sweep interval).

MON$READ_ONLY

SMALLINT

Признак, является база данных только для чтения, read only,(значение 1) или для чтения и записи, read-write (0).

MON$FORCED_WRITES

SMALLINT

Указывает, установлен ли для базы режим синхронного вывода(forced writes, значение 1) или режим асинхронного вывода (значение 0).

MON$RESERVE_SPACE

SMALLINT

Флаг, указывающий на резервирование пространства.

MON$CREATION_DATE

TIMESTAMP

Дата и время создания базы данных.

MON$PAGES

BIGINT

Количество страниц, выделенных для базы данных на внешнемустройстве.

MON$STAT_ID

INTEGER

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

MON$BACKUP_STATE

SMALLINT

Текущее физическое состояние backup:

0 — нормальное;
1 — заблокированное;
2 — слияние (объединение).

MON$CRYPT_STATE

SMALLINT

Текущее состояние шифрования:

0 — не зашифрована;
1 — зашифрована;
2 — в процессе дешифрования;
3 — в процессе шифрования.

MON$CRYPT_PAGE

BIGINT

Количество зашифрованных/дешифрованных страниц в процессешифрования/дешифрования; ноль если этот процесс закончился или неначинался.

MON$OWNER

CHAR(63)

Владелец базы данных.

MON$SEC_DATABASE

CHAR(7)

Отображает, какой тип базы данных безопасности используется:

Default — база данных безопасности по умолчанию, т.е. security4.fdb;
Self — в качестве базы данных безопасности используется текущая база данных;
Other — в качестве базы данных безопасности используется другая база данных (не сама и не security4.fdb).

MON$GUID

CHAR(38)

GUID базы данных.

MON$FILE_ID

VARCHAR(255)

Уникальный идентификатор базы данных на уровне файловойсистемы.

MON$NEXT_ATTACHMENT

BIGINT

Номер (идентификатор) следующего соединения.

MON$NEXT_STATEMENT

BIGINT

Номер (идентификатор) следующего SQL запроса.

MON$REPLICA_MODE

SMALLINT

Режим репликации:

0 - NONE — база данных является первичной;
1 - READ-ONLY — реплика в режиме только чтение;
2 - READ-WRITE — реплика в режиме чтение и запись.

MON$IO_STATS

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

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

MON$STAT_ID

INTEGER

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

MON$STAT_GROUP

SMALLINT

Группа статистики:

0 — база данных (database);
1 — соединение с базой данных (connection);
2 — транзакция (transaction);
3 — оператор (statement);
4 — вызов (call).

MON$PAGE_READS

BIGINT

Количество прочитанных (read) страниц базы данных.

MON$PAGE_WRITES

BIGINT

Количество записанных (write) страниц базы данных.

MON$PAGE_FETCHES

BIGINT

Количество загруженных в память (fetch) страниц базы данных.

MON$PAGE_MARKS

BIGINT

Количество отмеченных (mark) страниц базы данных.

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

MON$MEMORY_USAGE

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

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

MON$STAT_ID

INTEGER

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

MON$STAT_GROUP

SMALLINT

Группа статистики:

0 — база данных (database);
1 — соединение с базой данных (connection);
2 — транзакция (transaction);
3 — оператор (statement);
4 — вызов (call).

MON$MEMORY_USED

BIGINT

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

MON$MEMORY_ALLOCATED

BIGINT

Количество памяти, выделенной ОС, байт.Информация о низкоуровневом распределении памяти, выполненном менеджером памяти Firebird — объем памяти, выделенный операционной системой, что позволяет контролировать физическое потребление памяти.Обратите внимание, не все записи этого столбца имеют ненулевые значения.Малые выделения памяти здесь не фиксируются, а вместо этого добавляются к пулу памяти базы данных.Только MON$DATABASE (MON$STAT_GROUP = 0) и связанные с выделением памяти объекты имеют ненулевое значение.

MON$MAX_MEMORY_USED

BIGINT

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

MON$MAX_MEMORY_ALLOCATED

BIGINT

Максимальное количество байт, выделенное ОС данномуобъекту.

Note

Счётчики, связанные с записями уровня базы данных MON$DATABASE (MON$STAT_GROUP = 0), отображают выделение памяти для всех соединений.В архитектурах Classic и SuperClassic нулевые значения счётчиков обозначают, что в этих архитектурах нет общего кэша.

Example 1. Получение 10 запросов потребляющих наибольшее количество памяти
SELECT STMT.MON$ATTACHMENT_ID, STMT.MON$SQL_TEXT, MEM.MON$MEMORY_USED
FROM MON$MEMORY_USAGE MEM
   NATURAL JOIN MON$STATEMENTS STMT
ORDER BY MEM.MON$MEMORY_USED DESC
FETCH FIRST 10 ROWS ONLY

MON$RECORD_STATS

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

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

MON$STAT_ID

INTEGER

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

MON$STAT_GROUP

SMALLINT

Группа статистики:

0 — база данных (database);
1 — соединение с базой данных (connection);
2 — транзакция (transaction);
3 — оператор (statement);
4 — вызов (call).

MON$RECORD_SEQ_READS

BIGINT

Количество последовательно считанных записей (read sequentially).

MON$RECORD_IDX_READS

BIGINT

Количество записей, прочитанных при помощи индекса (read via an index).

MON$RECORD_INSERTS

BIGINT

Количество добавленных записей (inserted records).

MON$RECORD_UPDATES

BIGINT

Количество изменённых записей (updated records).

MON$RECORD_DELETES

BIGINT

Количество удалённых записей (deleted records).

MON$RECORD_BACKOUTS

BIGINT

Количество удалений версий записей созданных при rollback (backed out records).

MON$RECORD_PURGES

BIGINT

Количество удалений старых версий записей (purged records).

MON$RECORD_EXPUNGES

BIGINT

Количество удалений всей цепочки версий записи, если самая последняя версия удалена, и не нужнадругим транзакциям (expunged records).

MON$RECORD_LOCKS

BIGINT

Количество записей прочитанных с использованием предложения WITH LOCK.

MON$RECORD_WAITS

BIGINT

Количество попыток обновления/модификации/блокировки записейпринадлежащих нескольким активным транзакциям. Транзакция находитсяв режиме WAIT.

MON$RECORD_CONFLICTS

BIGINT

Количество неудачных попыток обновления/модификации/блокировкизаписей принадлежащих нескольким активным транзакциям. В такихситуациях сообщается о конфликте обновления (UPDATE CONFLICT).

MON$BACKVERSION_READS

BIGINT

Количество прочитанных версий при поиске видимых версий записей.

MON$FRAGMENT_READS

BIGINT

Количество прочитанных фрагментов записей.

MON$RECORD_RPT_READS

BIGINT

Количество повторно прочитанных записей.

MON$RECORD_IMGC

BIGINT

Количество записей вычищенных промежуточной сборкой мусора.

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

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