web-dev-qa-db-fra.com

Tables de surveillance Firebird

Je travaille avec une base de données Firebird 2.1.1 et j'ai commencé à lire sur les Tables de surveillance.

J'essaie de voir en quelque sorte en temps réel quelles requêtes chaque client effectue chaque client dans la base de données.

J'ai regardé le MON$STATEMENTS table mais cela ne fournit pas beaucoup d'informations. J'aurais attendu plus de contenu à l'intérieur de la table.

Screenshot from Flamerobin when table is displayed

Est-ce que je cherche au mauvais endroit ou n'ai-je pas compris le but/l'utilisation des tables de surveillance de Firebird?

7
Valentin Despa

Vous devez savoir un certain nombre de choses lorsque vous utilisez les tables de surveillance:

  1. Les tables de surveillance (comme MON$STATEMENTS) Vous fournit une liste des déclarations actives ou préparées au moment où une requête a été exécutée.
  2. Le résultat de la requête reste stable jusqu'à ce que la transaction soit commise! Cela signifie que l'exécution répétée de la requête sans vous engager ne donnera pas de nouvelles informations.
  3. Seulement SYSDBA, le nairatier de base de données ou un utilisateur avec rôle RDB$ADMIN Peut voir toutes les informations, d'autres utilisateurs ne peuvent voir que des informations sur leurs propres connexions.
  4. Votre installation de Firebird contient une documentation de base sur les tables de doc/README.monitoring_tables.txt

Maintenant que votre capture d'écran: toutes les déclarations proviennent de la même connexion (la vôtre): MON$ATTACHMENT_ID = 1521. Une seule déclaration est actuellement active (MON$STATE = 1) et participer à la transaction MON$TRANSACTION_ID = 90964 et a été commencé au 2012-12-06 10:08 (MON$TIMESTAMP), le reste est inactif (MON$STATE = 0) Et là n'a aucune transaction-id et horodatage. La première déclaration est également la seule qui a actuellement une requête réelle (MON$SQL_TEXT), qui est la requête qui produisait réellement le résultat dans la capture d'écran. Dans les déclarations de Firebird sont allouées séparément de la requête réelle à exécuter à l'aide de cette déclaration.

Ce n'est pas beaucoup, mais si vous aviez adhéré à MON$RECORD_STATS, MON$IO_STATS ou alors MON$MEMORY_USAGE basé sur MON$STAT_ID Vous auriez reçu des statistiques sur la requête (c'est-à-dire le nombre de lectures, mise à jour des enregistrements, nombre de pages lues ou écrites, utilisation de la mémoire). Les tableaux de surveillance montrent des informations à un moment donné à temps et si une requête a déjà terminé lorsque vous l'exécutez, vous n'obtenez aucune information (je ne suis pas sûr de 100%, mais il pourrait rester disponible jusqu'à la prochaine exécution d'un déclaration, ou jusqu'à ce que la déclaration soit non préparée ou fermée).

Si vous aurez plutôt besoin d'un flux d'informations et de statistiques que vous pourriez obtenir davantage de l'API de Trace Firebird. Je ne l'ai pas encore utilisé moi-même, mais l'article Services d'audit et de trace dans Firebird 2.5 de Thomas Steinmauer fournit une bonne introduction.

Vous dites que vous vous attendez à ce que vous attendiez "plus de contenu", mais ne spécifiez pas en réalité quel contenu vous avez besoin ou prévu; J'espère que cela fournit suffisamment d'informations.

7
Mark Rotteveel