Firebird 2.1.1データベースを使用していて、 Monitoringテーブルについて読み始めました。
データベースで各クライアントが実行するクエリをリアルタイムでなんとかして見ようとしています。
MON$STATEMENTS
テーブルですが、あまり情報が提供されていません。テーブルの中にもっと多くのコンテンツがあると期待していました。
私は間違った場所を探していますか、それともFirebird監視テーブルの目的/使用を理解していませんか?
モニタリングテーブルを使用する際に知っておくべきことがいくつかあります。
MON$STATEMENTS
など)は、クエリの実行時にアクティブなステートメントまたは準備されたステートメントのリストを提供します。SYSDBA
、データベース所有者、またはRDB$ADMIN
の役割を持つユーザーのみがすべての情報を表示でき、他のユーザーは自分の接続に関する情報のみを表示できます。doc/README.monitoring_tables.txt
のテーブルに関する基本的なドキュメントが含まれていますスクリーンショットについて:すべてのステートメントは同じ接続(独自のもの)からのものです:MON$ATTACHMENT_ID = 1521
。現在アクティブなステートメントは1つだけ(MON$STATE = 1
)、トランザクションMON$TRANSACTION_ID = 90964
に参加しており、2012-12-06 10:08(MON$TIMESTAMP
)に開始され、残りは非アクティブ(MON$STATE = 0
)であり、そのためトランザクションIDとタイムスタンプはありません。最初のステートメントは、現在実際のクエリ(MON$SQL_TEXT
)を持っている唯一のステートメントでもあります。これは、実際にスクリーンショットで結果を生成したクエリです。 Firebirdでは、ステートメントは、そのステートメントを使用して実行される実際のクエリとは別に割り当てられます。
それはそれほど多くありませんが、MON$RECORD_STATS
、MON$IO_STATS
、またはMON$MEMORY_USAGE
に基づいてMON$STAT_ID
に参加した場合、クエリに関する統計情報(つまり、読み取り、レコードの更新、読み取りまたは書き込みされたページの数、メモリの使用)を受け取ります。モニタリングテーブルには特定の時点の情報が表示されます。クエリを実行したときにクエリがすでに完了している場合、情報は得られません(100%確実ではありませんが、次回の実行まで利用できる可能性があります。ステートメント、またはステートメントが準備されていないかクローズされるまで)。
代わりに情報と統計のストリームが必要な場合は、Firebird Trace APIをさらに活用する可能性があります。私自身はまだあまり使用していませんが、Thomas Steinmauerによる Firebird 2.5の監査およびトレースサービス の記事を参考にしてください。
あなたの質問では、「より多くのコンテンツ」を期待していたが、実際に必要または期待しているコンテンツを指定していなかったと言っています。これで十分な情報が得られることを願っています。