こんにちは。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'に事象の説明がありました。
ポイントとしては、
- SQLServerではSQL OSの中でSQL CLR を利用して動作している。
- このSQL CLRはアプリケーションドメインごとにメモリを確保している。
- そのメモリがどのようになっているか確認する。
確認するためには以下の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 行処理されました)
とりあえず、機会があれば再現してみようと思います。