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

docnext count = 10

MON$TRANSACTIONS

Décrit les transactions qui ont été lancées

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

MON$TRANSACTION_ID

BIGINT

L’identifiant (numéro) de la transaction.

MON$ATTACHMENT_ID

BIGINT

L’Id de l’attachement

MON$STATE

SMALLINT

Statut de la transaction :

  • 0 — inactif (la transaction n’est pas associée à des requêtes) ;

  • 1 — active (il y a au moins une requête associée à la transaction).

Ce lien est rompu lorsque la requête commence une nouvelle exécution dans une autre transaction, ou lorsque la transaction ou la requête est supprimée, mais pas lorsque la requête est exécutée ou que tous les enregistrements ont été sélectionnés dans le curseur.

MON$TIMESTAMP

TIMESTAMP

La date et l’heure auxquelles la transaction a commencé.

MON$TOP_TRANSACTION

INTEGER

La limite supérieure utilisée par une transaction de balayage lors de l’avancement d’un OIT global. Toutes les transactions supérieures à ce seuil sont considérées comme actives. Normalement, il est équivalent à MON$TRANSACTION_ID, mais en utilisant COMMIT RETAINING ou ROLLBACK RETAINING, MON$TOP_TRANSACTION restera inchangé ("hanging") lorsque l’ID de la transaction sera augmenté.

MON$OLDEST_TRANSACTION

INTEGER

Le numéro de la transaction intéressée la plus ancienne est OIT, Oldest Interesting Transaction.

MON$OLDEST_ACTIVE

INTEGER

Le numéro de la transaction active la plus ancienne est OAT, Oldest Active Transaction.

MON$ISOLATION_MODE

SMALLINT

Mode d’isolation (niveau) :

  • 0 — cohérent (snapshot table stability);

  • 1 — Concurrent (snapshot);

  • 2 — read committed record version;

  • 3 — read committed no record version;

  • 4 — read committed read consistency.

MON$LOCK_TIMEOUT

SMALLINT

Temps d’attente :

  • -1 — attente indéterminé (wait);

  • 0 — transaction no wait;un autre nombre est le temps d’attente en secondes (lock timeout).

MON$READ_ONLY

SMALLINT

Un flag indiquant si la transaction est en lecture seule (valeur 1) ou en lecture-écriture (0).

MON$AUTO_COMMIT

SMALLINT

Indique si auto-commit est utilisé (valeur 1) ou non (0).

MON$AUTO_UNDO

SMALLINT

Une indication pour savoir si l’auto-undo est utilisé (valeur 1) ou non (0). Si auto-undo est utilisé, un point de sauvegarde au niveau de la transaction est créé. L’existence d’un point de sauvegarde permet d’annuler les changements si ROLLBACK est appelé, après quoi la transaction est simplement validée. Si ce point de sauvegarde n’existe pas ou s’il existe, mais que le nombre de changements est très élevé, le ROLLBACK réel est exécuté et la transaction est marquée comme "morte" dans TIP.

MON$STAT_ID

INTEGER

Id.

Example 1. Récupérer toutes les connexions qui ont démarré des transactions de lecture-écriture avec un niveau d’isolation supérieur à celui de l’utilisateur. 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

Accéder aux piles en interrogeant les procédures stockées, les fonctions stockées et les déclencheurs.

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

MON$CALL_ID

BIGINT

Adresse ID.

MON$STATEMENT_ID

BIGINT

L’identifiant de haut niveau de l’instruction SQL — l’instruction qui a initié la chaîne d’appels. Cet identifiant peut être utilisé pour trouver l’enregistrement du relevé actif dans la table MON$STATEMENTS.

MON$CALLER_ID

BIGINT

L’identifiant du déclencheur, de la fonction stockée ou de la procédure stockée de référence.

MON$OBJECT_NAME

CHAR(63)

Le nom de l’objet PSQL.

MON$OBJECT_TYPE

SMALLINT

Type d’objet PSQL :

  • 2 — trigger ;

  • 5 — procédure stockée ;

  • 15 — une fonction stockée.

MON$TIMESTAMP

TIMESTAMP

Date et heure du début de l’appel.

MON$SOURCE_LINE

INTEGER

Le numéro de ligne source de l’instruction SQL en cours d’exécution.

MON$SOURCE_COLUMN

INTEGER

Le numéro de la colonne source de l’instruction SQL en cours d’exécution.

MON$STAT_ID

INTEGER

Identificateur statistique.

MON$PACKAGE_NAME

CHAR(63)

Nom du paquet pour les procédures/fonctions paquagées.

MON$COMPILED_STATEMENT_ID

BIGINT

Identifiant de la requête compilée (référence à MON$COMPILED_STATEMENTS)

Note

La pile d’appel n’obtiendra pas les informations d’appel lorsque l’opérateur EXECUTE STATEMENT est exécuté.

Example 1. Obtenez une pile d’appels pour toutes les connexions, sauf la vôtre.
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

Instructions SQL compilées.

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

MON$COMPILED_STATEMENT_ID

BIGINT

L’identifiant de la demande compilée.

MON$SQL_TEXT

BLOB TEXT

Texte de la déclaration SQL en langage SQL. Le texte des instructions SQL n’est pas affiché à l’intérieur des objets PSQL.

MON$EXPLAINED_PLAN

BLOB TEXT

Plan de l’opérateur sous forme d’explication.

MON$OBJECT_NAME

CHAR(63)

Nom de l’objet PSQL dans lequel l’instruction SQL a été préparée.

MON$OBJECT_TYPE

SMALLINT

Type d’objet.

  • 2 — trigger ;

  • 5 — procédure stockée ;

  • 15 — une fonction stockée.

MON$PACKAGE_NAME

CHAR(63)

Le nom du paquet PSQL.

MON$STAT_ID

INTEGER

Id.

MON$CONTEXT_VARIABLES

Informations sur les variables du contexte de l’utilisateur.

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

MON$ATTACHMENT_ID

BIGINT

Identifiant de connexion. Contient la valeur correcte uniquement pour les variables de contexte de niveau connexion, définie à NULL pour les variables de niveau transaction.

MON$TRANSACTION_ID

BIGINT

Identifiant de la transaction. Contient la valeur correcte uniquement pour les variables de contexte de niveau transaction, définie à NULL pour les variables de niveau connexion.

MON$VARIABLE_NAME

VARCHAR(80)

Le nom de la variable contextuelle.

MON$VARIABLE_VALUE

VARCHAR(32765)

La valeur de la variable contextuelle.

Example 1. Obtenir toutes les variables de contexte de session pour la connexion actuelle
SELECT VAR.MON$VARIABLE_NAME, VAR.MON$VARIABLE_VALUE
FROM MON$CONTEXT_VARIABLES VAR
WHERE VAR.MON$ATTACHMENT_ID = CURRENT_CONNECTION

MON$DATABASE

Détails de la base de données à laquelle la connexion a été établie.

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

MON$DATABASE_NAME

VARCHAR(255)

Chemin complet et nom du fichier de la base de données primaire ou de l’alias de la base de données.

MON$PAGE_SIZE

SMALLINT

Taille de la page des fichiers de la base de données en octets.

MON$ODS_MAJOR

SMALLINT

La version majeur de l’ODS.

MON$ODS_MINOR

SMALLINT

La version mineur de l’ODS.

MON$OLDEST_TRANSACTION

BIGINT

Le numéro de la transaction intéressée la plus ancienne est OIT, Oldest Interesting Transaction.

MON$OLDEST_ACTIVE

BIGINT

Le numéro de la transaction active la plus ancienne est OAT, Oldest Active Transaction.

MON$OLDEST_SNAPSHOT

BIGINT

Le numéro de la transaction qui était active lorsque la transaction OAT a commencé, la transaction OST — Oldest Snapshot Transaction.

MON$NEXT_TRANSACTION

BIGINT

Le numéro de la prochaine transaction.

MON$PAGE_BUFFERS

INTEGER

Nombre de pages allouées en RAM pour le cache.

MON$SQL_DIALECT

SMALLINT

Dialecte de base de données SQL : 1 ou 3.

MON$SHUTDOWN_MODE

SMALLINT

État d’arrêt actuel de la base de données :

  • 0 — base de données active (en ligne) ;

  • 1 — arrêt multi-utilisateurs ;

  • 2 — arrêt pour un seul utilisateur ;

  • 3 — arrêt complet.

MON$SWEEP_INTERVAL

INTEGER

L’intervalle de balayage.

MON$READ_ONLY

SMALLINT

Indique si la base de données est en lecture seule, read-only, (valeur 1) ou en lecture-écriture, read-write (0).

MON$FORCED_WRITES

SMALLINT

Indique si la base est en mode d’écriture forcée (valeur 1) ou en mode d’écriture asynchrone (valeur 0).

MON$RESERVE_SPACE

SMALLINT

Flag indiquant la réservation d’un espace.

MON$CREATION_DATE

TIMESTAMP

Date et heure de création de la base de données.

MON$PAGES

BIGINT

Nombre de pages allouées à la base de données sur le périphérique externe.

MON$STAT_ID

INTEGER

Id.

MON$BACKUP_STATE

SMALLINT

L’état physique actuel de la sauvegarde :

  • 0 — normal ;

  • 1 — verrouillé ;

  • 2 — fusionné.

MON$CRYPT_STATE

SMALLINT

État actuel du cryptage :

  • 0 — non crypté ;

  • 1 — crypté ;

  • 2 — En cours de décryptage.

  • 3 — En cours de cryptage.

MON$CRYPT_PAGE

BIGINT

Nombre de pages cryptées/décryptées pendant le processus de cryptage/décryptage ; zéro si ce processus est terminé ou n’a pas commencé.

MON$OWNER

CHAR(63)

Le propriétaire de la base de données.

MON$SEC_DATABASE

CHAR(7)

Affiche quel type de base de données de sécurité est utilisé :

  • Default — base de données de sécurité par défaut, c’est-à-dire security4.fdb ;

  • Self — la base de données actuelle est utilisée comme base de données de sécurité ;

  • Other — une autre base de données est utilisée comme base de données de sécurité (pas elle-même et pas security4.fdb).

MON$GUID

CHAR(38)

Le GUID de la base de données.

MON$FILE_ID

VARCHAR(255)

Identifiant unique pour la base de données au niveau du système de fichiers.

MON$NEXT_ATTACHMENT

BIGINT

Le numéro (identifiant) de la prochaine connexion.

MON$NEXT_STATEMENT

BIGINT

Le numéro (identifiant) de la prochaine requête SQL.

MON$REPLICA_MODE

SMALLINT

Mode de réplication :

  • 0 - NONE — la base de données est primaire ;

  • 1 - READ-ONLY — réplique en mode lecture seule ;

  • 2 - READ-WRITE — réplique en mode lecture et écriture.

MON$IO_STATS

Statistiques d’entrée/sortie.

Table 1. Description des colonnes de la table MON$IO_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 — statement (statement);

  • 4 — Appel (call).

MON$PAGE_READS

BIGINT

Le nombre de pages de la base de données lues.

MON$PAGE_WRITES

BIGINT

Le nombre de pages écrites de la base de données.

MON$PAGE_FETCHES

BIGINT

Nombre de pages de la base de données chargées en mémoire (fetch).

MON$PAGE_MARKS

BIGINT

Le nombre de pages marquées (mark) dans la base de données.

Les compteurs de cet table sont cumulatifs et accumulent des informations pour chacun des groupes statistiques.

MON$MEMORY_USAGE

Statistiques d’utilisation de la mémoire.

Table 1. Description des colonnes de la table MON$MEMORY_USAGE
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 — statement (statement);

  • 4 — Appel (call).

MON$MEMORY_USED

BIGINT

Quantité de mémoire utilisée, en octets. Informations sur les allocations de mémoire de haut niveau effectuées par le serveur à partir de pools. Peut être utile pour repérer les fuites de mémoire et la consommation excessive de mémoire dans les connexions, les procédures, etc.

MON$MEMORY_ALLOCATED

BIGINT

La quantité de mémoire allouée par le système d’exploitation, en octets. Informations sur l’allocation de mémoire de bas niveau faite par le gestionnaire de mémoire de Firebird — la quantité de mémoire allouée par le système d’exploitation, ce qui permet de contrôler la consommation de mémoire physique. Note, toutes les entrées de cette colonne n’ont pas des valeurs non nulles. Les petites allocations de mémoire ne sont pas fixées ici, mais ajoutées au pool de mémoire de la base de données. Seuls MON$DATABASE (MON$STAT_GROUP = 0) et les objets liés à l’allocation de mémoire ont des valeurs non nulles.

MON$MAX_MEMORY_USED

BIGINT

Le nombre maximum d’octets utilisés par cet objet.

MON$MAX_MEMORY_ALLOCATED

BIGINT

Le nombre maximum d’octets alloués par le système d’exploitation à un objet donné.

Note

Les compteurs associés aux enregistrements de niveau base de données MON$DATABASE (MON$STAT_GROUP = 0) indiquent les allocations de mémoire pour toutes les connexions. Dans les architectures Classic et SuperClassic, les compteurs nuls indiquent qu’il n’y a pas de cache partagé dans ces architectures.

Example 1. Récupérer les 10 requêtes qui consomment le plus de mémoire
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

Statistiques au niveau des enregistrements.

Table 1. Description des colonnes de la table MON$RECORD_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 — statement (statement);

  • 4 — Appel (call).

MON$RECORD_SEQ_READS

BIGINT

Le nombre d’enregistrements lus séquentiellement.

MON$RECORD_IDX_READS

BIGINT

Le nombre d’enregistrements lus via un index.

MON$RECORD_INSERTS

BIGINT

Le nombre d’enregistrements insérés.

MON$RECORD_UPDATES

BIGINT

Le nombre d’enregistrements mis à jour.

MON$RECORD_DELETES

BIGINT

Le nombre d’enregistrements supprimés.

MON$RECORD_BACKOUTS

BIGINT

Nombre de suppressions de versions d’enregistrements créés par le retour en arrière (enregistrements sauvegardés).

MON$RECORD_PURGES

BIGINT

Le nombre d’enregistrements purgés supprimés.

MON$RECORD_EXPUNGES

BIGINT

Nombre de fois où d’anciennes versions d’enregistrements (enregistrements purgés) ont été supprimées.

MON$RECORD_LOCKS

BIGINT

Nombre d’entrées de lecture utilisant la phrase WITH LOCK.

MON$RECORD_WAITS

BIGINT

Nombre de tentatives de mise à jour/modification/blocage d’enregistrements appartenant à plusieurs transactions actives. La transaction est en mode WAIT.

MON$RECORD_CONFLICTS

BIGINT

Nombre d’échecs de tentatives de mise à jour/modification/blocage d’enregistrements appartenant à plusieurs transactions actives. Dans de telles situations, un conflit de mise à jour (UPDATE CONFLICT) est signalé.

MON$BACKVERSION_READS

BIGINT

Nombre de versions lues lors de la recherche des versions visibles des enregistrements.

MON$FRAGMENT_READS

BIGINT

Nombre de fragments d’enregistrement lus.

MON$RECORD_RPT_READS

BIGINT

Nombre d’enregistrements relus.

MON$RECORD_IMGC

BIGINT

Nombre d’entrées nettoyées par la collecte intermédiaire des déchets.

Les compteurs de cet table sont cumulatifs et accumulent les informations pour chacun des groupes statistiques.

MON$STATEMENTS

Les instructions SQL à exécuter.

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

MON$STATEMENT_ID

BIGINT

ID de l’instruction SQL.

MON$ATTACHMENT_ID

BIGINT

Id de l’attachement

MON$TRANSACTION_ID

BIGINT

Id de la transaction

MON$STATE

SMALLINT

Statut d’opérateur :

  • 0 — inactif (idle);

  • 1 — actif (active);

  • 2 — suspendu (stalled).

MON$TIMESTAMP

TIMESTAMP

Date et heure de début de l’activité de l’opérateur.

MON$SQL_TEXT

BLOB TEXT

Texte de l’instruction SQL.

MON$STAT_ID

INTEGER

Id.

MON$EXPLAINED_PLAN

BLOB TEXT

Plan de l’opérateur sous forme d’explication.

MON$STATEMENT_TIMEOUT

INTEGER

Délai d’attente SQL au niveau de l’instruction SQL. Contient la valeur du délai d’attente définie au niveau de la connexion/de l’opérateur, en millisecondes. Si le délai n’est pas défini — 0.

MON$STATEMENT_TIMER

TIMESTAMP

Heure d’expiration de la minuterie de l’instruction SQL. Contient NULL si le délai d’attente de l’instruction SQL n’est pas défini, ou si aucune minuterie n’est en cours d’exécution.

MON$COMPILED_STATEMENT_ID

BIGINT

L’identifiant de la requête compilée (une référence à MON$COMPILED_STATEMENTS).

L’état de l’instruction STALLED est "paused". Il est possible qu’une requête qui a commencé son exécution, n’est pas encore terminée, mais n’est pas en cours d’exécution. Par exemple, elle attend des paramètres d’entrée ou une autre récupération du client.

Example 1. Afficher les demandes actives, à l’exception de celles qui s’exécutent sur leur propre connexion
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

Utilisation de MON$STATEMENTS pour annuler des requêtes

Les tables de surveillance sont en lecture seule, mais le serveur a un mécanisme intégré pour supprimer (et seulement supprimer) les entrées de la table MON$STATEMENTS, permettant ainsi de mettre fin à la requête active.

Note
  • Une tentative d’annulation des requêtes n’est pas effectuée s’il n’y a pas d’instructions en cours d’exécution dans la connexion.

  • Après l’annulation d’une requête, les fonctions API d’exécution et de récupération renverront le code d’erreur isc_cancelled.

  • Les demandes ultérieures dans cette connexion ne sont pas interdites.

  • L’annulation de la demande n’est pas synchrone, l’opérateur marque seulement la demande pour l’annulation, et l’annulation elle-même est effectuée de manière asynchrone par le noyau.

Example 1. Annuler toutes les demandes actives pour une connexion donnée
DELETE FROM MON$STATEMENTS
WHERE MON$ATTACHMENT_ID = 32