Firebird Documentation IndexFirebird 2.5 リリースノート管理機能 → モニタリングの改善
Firebird Home Firebird Home Prev: トレースと監査サービスFirebird Documentation IndexUp: 管理機能Next: セキュリティの強化

モニタリングの改善

Dmitry Yemanov

通常のユーザー向けの拡張されたアクセス
ODS 11.2データベースの新しいMON$メタデータ
使用上の注意

Firebird 2.5では、バージョン2.1で導入された“MON$”データベースモニタリング機能が拡張され、コンテキスト変数とODS 11.2以降のデータベースでのメモリ使用に関するデータを通知する新たなテーブルが備わりました。また、これらのデータベースでは、クライアントの接続をMON$ストラクチャーを通じて他の接続から終了できるようになりました。

通常のユーザー向けの拡張されたアクセス

もともとの設計では、特別な権限を持たないデータベースのユーザーは自身のCURRENT_CONNECTIONに関するモニタリング情報しか見ることができませんでした。現在は、同じユーザー名で認証された任意のアタッチメントの情報をリクエストできるようになっています。

トラッカー・リファレンス CORE-2233

注意

  1. 異なるエンドユーザーのためにミドルウェア層で同じユーザー名による同時・複数回のログインを必要とするアプリケーションのアーキテクチャでは、エンドユーザーにモニタリング機能を公開する点について、パフォーマンスやプライバシーへの影響が考慮されるべきです。

  2. 同様の拡張はバージョン2.1.2で実装されました。

ODS 11.2データベースの新しいMON$メタデータ

Note

ODS 11.1のメタデータについては、バージョン2.1用のドキュメントを参照して下さい。

MON$メタデータ用キャラクタ・セットの変更

ファイル仕様に関するMON$テーブル内のカラム定義に使われるシステムドメインRDB$FILE_NAME2が、CHARACTER SET NONEからCHARACTER SET UNICODE_FSSへと変更されました。現在影響を受けるカラムはMON$DATABASE_NAMEとMON$ATTACHMENT_NAMEとMON$REMOTE_PROCESSです。この変更で影響を受けるデータは、バージョン2.5で更新されたfilespecの取り扱い、および他のDPBのキャラクタパラメータ・アイテムと一致することになります。

(トラッカー・エントリー:CORE-2551、A. dos Santos Fernandes)

MON$MEMORY_USAGE(現在のメモリ使用)


      - MON$STAT_ID(統計 ID)
      - MON$STAT_GROUP(統計グループ)
          0: データベース
          1: アタッチメント
          2: トランザクション
          3: SQL文
          4: 呼び出し
      - MON$MEMORY_USED(現在使用中のバイト数)
          エンジンによって実行されるプールからの高レベルでのメモリ割り当て。
          Can be useful for tracing memory leaks and for investigating unusual
          memory consumption and the attachments, procedures, etc. that might
          be responsible for it.
  メモリリークのトレース、また、それが原因となりうる異常なメモリ消費やアタッチメント、プロシージャなどの調査に役立つ可能性があります。
      - MON$MEMORY_ALLOCATED(OSレベルで現在割り当てられているバイト数)
          Firebirdメモリマネージャによって実行された低レベルでのメモリ割り当て。
          これらはOSによって実際に割り当てられているバイトであり、そのため、
          物理メモリの消費を監視することができます。
             

Note

すべてのレコードがゼロ以外の値を持つわけではありません。一般に、MON$DATABASEとメモリバインド・オブジェクトだけはゼロ以外の“割り当てられた”値を示します。小さな割り当てはこのレベルでは行われません。その代わり、データベースのメモリプールにリダイレクトされます。



      - MON$MAX_MEMORY_USED(このオブジェクトで使用される最大のバイト数)
      - MON$MAX_MEMORY_ALLOCATED(このオブジェクトによってOSから割り当てられた最大のバイト数)
             

MON$CONTEXT_VARIABLES(既知のコンテキスト変数)


      - MON$ATTACHMENT_ID(アタッチメント ID)
          セッションレベルのコンテキスト変数用の有効なIDのみを含みます。
          トランザクションレベルの変数はこのフィールドにNULLをセットします。
      - MON$TRANSACTION_ID(トランザクション ID)
          トランザクションレベルのコンテキスト変数用の有効なIDのみを含みます。
          セッションレベルの変数はこのフィールドにNULLをセットします。
      - MON$VARIABLE_NAME(コンテキスト変数名)
      - MON$VARIABLE_VALUE(コンテキスト変数値)
             

MON$STATEMENTSとMON$STATEでのメモリ使用

MON$STATEMENTSとMON$STATEでのメモリ使用の統計は、実際のCPU消費を表現しています。

トラッカー・リファレンス CORE-1583

使用上の注意

SQL文のメモリ使用ランキング“トップ10”:

SELECT FIRST 10
  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
        

現在の接続用の全てのセッションレベルのコンテキスト変数を列挙:

SELECT
  VAR.MON$VARIABLE_NAME,
  VAR.MON$VARIABLE_VALUE
FROM MON$CONTEXT_VARIABLES VAR
  WHERE VAR.MON$ATTACHMENT_ID = CURRENT_CONNECTION
        

クライアントの終了

MON$ストラクチャーは、設計上、読み取り専用となっています。そのため、それらに対するユーザーDMLオペレーションは禁止されています。しかし、MON$STATEMENTSとMON$ATTACHMENTSテーブルのレコードの削除(だけ)を許可する仕組みが組み込まれています。このメカニズムの効果として、それぞれ、SQL文実行のキャンセルや、ODS 11.2データベース向けには、クライアントセッションの終了が可能になります。

指定された接続の現在の全活動をキャンセルする:

DELETE FROM MON$STATEMENTS
  WHERE MON$ATTACHMENT_ID = 32
          

自分”以外の全てのクライアントの接続を切断する:

DELETE FROM MON$ATTACHMENTS
  WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION
          

Note

    • SQL文をキャンセルしようとしても、クライアントに現在実行中のSQL文がない場合は、無効なオペレーション(“no-op”)となります。

    • キャンセルと同時に、execute/fetchのAPI呼び出しはエラーコードisc_cancelledを返します。

    • その後のオペレーションは許可されます。

    • 終了中の接続でアクティブなトランザクションはすぐにキャンセルされ、ロールバックされます。

    • 終了されると、クライアントセッションはエラーコードisc_att_shutdownを受け取ります。

    • その後にこの接続ハンドルを使おうとすると、ネットワークのread/writeエラーを引き起こします。

Prev: トレースと監査サービスFirebird Documentation IndexUp: 管理機能Next: セキュリティの強化
Firebird Documentation IndexFirebird 2.5 リリースノート管理機能 → モニタリングの改善