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