FirebirdSQL logo
 Tables systèmeTables de sécurité 

Utiliser les MON$ATTACHMENTS pour fermer les connexions

Les tables de surveillance sont en lecture seule, mais le serveur dispose d’un mécanisme intégré pour supprimer (et uniquement supprimer) les enregistrements de la table MON$ATTACHMENTS, ce qui vous permet de fermer la connexion à la base de données.

Note
  • Toute activité en cours sur la connexion supprimée est immédiatement arrêtée et toutes les transactions actives sont annulées (les déclencheurs des événements "ON DISCONNECT" et "ON TRANSACTION ROLLBACK" ne sont pas appelés) ;

  • Une connexion fermée renverra un code d’erreur isc_att_shutdown à l’application ;

  • Les tentatives ultérieures d’utilisation de cette connexion (c’est-à-dire l’utilisation de son handle dans les appels API) renverront des erreurs ;

  • La fin des connexions système (MON$SYSTEM_FLAG = 1) n’est pas possible. Le serveur ignore les connexions système affectées par l’instruction DELETE FROM MON$ATTACHMENTS.

Example 1. Déconnecter toutes les connexions sauf la vôtre
DELETE FROM MON$ATTACHMENTS
WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION

MON$TABLE_STATS

Les statistiques sont au niveau des tables.

Table 1. Description des colonnes de la table MON$TABLE_STATS
Nom de la colonne Type de données Description

MON$STAT_ID

INTEGER

Id.

MON$STAT_GROUP

SMALLINT

Groupe de statistiques :

  • 0 — base de données (database);

  • 1 — connexion à la base de données (connection);

  • 2 — transaction (transaction);

  • 3 — opérateur (statement);

  • 4 — Appel (call).

MON$TABLE_NAME

CHAR(63)

Nom de la table.

MON$RECORD_STAT_ID

INTEGER

Référence à MON$RECORD_STATS.

Example 1. Obtenir des statistiques au niveau des enregistrements pour chaque table pour sa connexion
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