AppDomain "master.sys[runtime].6" を作成できませんでした

こんにちは。beaglesoftの真鍋です。

ASP.NET MVCでSQL Serverを利用しているときに以下のような事象に発生しました。SQL ServerへSQLの問い合わせを実行するときに発生した例外です。

AppDomain "master.sys[runtime].6" を作成できませんでした。 ファイルまたはアセンブリ 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'、またはその依存関係の 1 つが読み込めませんでした。このコマンドを実行するための十分な記憶域がありません。 (HRESULT からの例外:0x80070008)

この処理を実行しているときに、ちょうど SQL Serverではバッチ処理を実行しており、SQL Server Management Studioから接続してSQLを実行しても同様の事象が発生しました。

バッチ処理が終了後も事象については変わらなかったためSQL Serverのサービスを再起動することで事象は解決しました。

この件について少し調べてみたところ、select * from sys.dm_os_memory_clerks where type = 'MEMORYCLERK_SQLCLR'に事象の説明がありました。

ポイントとしては、

  1. SQLServerではSQL OSの中でSQL CLR を利用して動作している。
  2. このSQL CLRはアプリケーションドメインごとにメモリを確保している。
  3. そのメモリがどのようになっているか確認する。

確認するためには以下のSQLを実行します。

select * from sys.dm_os_memory_clerks where type = 'MEMORYCLERK_SQLCLR'

memory_clerk_address type                   name            memory_node_id pages_kb             virtual_memory_reserved_kb virtual_memory_committed_kb awe_allocated_kb     shared_memory_reserved_kb shared_memory_committed_kb page_size_in_bytes   page_allocator_address host_address
-------------------- ---------------------- --------------- -------------- -------------------- -------------------------- --------------------------- -------------------- ------------------------- -------------------------- -------------------- ---------------------- ------------------
0x043786B0           MEMORYCLERK_SQLCLR     Default         0              1560                 36160                      13608                       0                    0                         0                          8192                 0x043786F0             0x00000000
0x046786B0           MEMORYCLERK_SQLCLR     Default         32             0                    0                          0                           0                    0                         0                          8192                 0x046786F0             0x00000000

(2 行処理されました)

とりあえず、機会があれば再現してみようと思います。