「Microsoft SQL Server」が稼働するデータベースシステムを運用する管理者に向け、「動的管理ビュー」の活用を軸にしたトラブル対策のためのノウハウを紹介していきます。今回は、共通言語ランタイム(CLR)統合で作成されたアプリケーションドメインの一覧の出力について解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で使用可能な動的管理ビューについて、動作概要や出力内容などを紹介していきます。今回は、共通言語ランタイム(CLR)統合で作成されたアプリケーションドメインの一覧を出力する「sys.dm_clr_appdomains」について解説します。対応バージョンは、SQL Server 2008以降です。
SQL Serverでは、CLR統合を使用することで「Microsoft Visual Basic .NET」や「Microsoft Visual C#」などの .NET Framework言語を使用して、ストアドプロシージャやトリガー、ユーザー定義型、ユーザー定義関数、ユーザー定義集計、ストリーミングテーブル値関数の記述が可能です。
これらのCLR統合により作成されたマネージオブジェクトを実行する場合、SQL Serverは「アプリケーションドメイン(AppDomain)」と呼ばれる分離単位を作成し、その中で必要なコードをロードして実行します。
アプリケーションドメインは、データベース別にアセンブリの所有者ごとに1つ作成されます。データベースや所有者の異なるアセンブリでマネージコードを実行した場合には、新しいアプリケーションドメインが作成されます。マネージオブジェクトの実行が終了しても、アプリケーションドメインは破棄されることなくキャッシュされ、SQL Server内でメモリが不足した場合に破棄されます。
「sys.dm_clr_appdomains」を使用することで、現在のアプリケーションドメインの状態や作成日時、CPU、メモリ使用量など、CLR統合のトラブルシューティングなどに有用な、アプリケーションドメインに関する詳細な情報の一覧を出力できます。
列名 | データ型 | 説明 |
---|---|---|
appdomain_address | varbinary(8) | アプリケーションドメインのアドレス |
appdomain_id | int | アプリケーションドメインのID |
appdomain_name | varchar(386) | SQL Serverにより割り当てられたアプリケーションドメイン名 |
creation_time | datetime | アプリケーションドメインが作成された時刻 |
db_id | int | アプリケーションドメインが作成されたデータベースID |
user_id | int | アプリケーションドメインが作成されたアセンブリの所有者 |
state | nvarchar(128) | アプリケーションドメインの状態 |
strong_refcount | int | 強参照の数。このアプリケーションドメインを使用しているバッチの実行数を反映する。現在実行中のコードが無い場合でも値は1になる |
weak_refcount | int | 弱参照の数。このアプリケーションドメインでキャッシュされたマネージデータベースオブジェクトの数を示す |
cost | int | コスト。値が高いほどメモリ不足でアンロードされる。再作成に必要なメモリ量により算出される |
value | int | 価値。値が低いほどメモリ不足でアンロードされる。アプリケーションドメインを使用する接続数、バッチの数により算出される |
total_processor_time_ms | bigint | アプリケーションドメインで実行中の全スレッドによって使用されたミリ秒単位の合計プロセッサ時間 |
total_allocated_memory_kb | bigint | アプリケーションドメインで行われた全てのメモリ割り当てのKB単位の合計サイズ。すでに解放されたメモリ量も差し引かれない |
survived_memory_kb | bigint | ガベージコレクションの実行後に残された、アプリケーションドメインによって参照されていることが判明しているKB単位の合計サイズ |
Copyright © ITmedia, Inc. All Rights Reserved.