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.
Est-ce que je cherche au mauvais endroit ou n'ai-je pas compris le but/l'utilisation des tables de surveillance de Firebird?
Vous devez savoir un certain nombre de choses lorsque vous utilisez les tables de surveillance:
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.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.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.