シャドウコピーは実際にどれぐらいのページプールを消費していますか?
こんにちは、プラットフォームサポートの徐です。
今回は、シャドウコピーとページプールの枯渇について話したいと思います。
Windows Server 2003 ファイルサーバ上で共有フォルダのシャドウ コピー(Shadow Copy for Shared Folder)機能を有効にした場合、既定で各対象ボリュームに最大 64 世代のシャドウコピーが作成される可能性があります。
これらのシャドウコピーは、作成時に System Volume Information フォルダの下にファイルとして保存され、[以前のバージョン] タブから実際に参照される際にシャドウコピーボリュームとしてファイルシステムにマウントされますが、その時にページプールなどシステムリソースを消費することがあります。
多数のユーザより異なるシャドウコピーを参照した場合には、大量のシャドウコピーボリュームをマウントする必要があり、これが原因でページプールなどのシステムリソースが圧迫される可能性があります。
なお、ファイルサーバ上で共有フォルダのシャドウコピー機能をプランニングする時に、ページプール、非ページプール及び仮想メモリの消費について考えるべきポイントが、以下の技術情報で紹介されています。
Scalability Factors for Shadow Copies
https://technet.microsoft.com/en-us/library/cc755419(WS.10).aspx
また、関連する修正モジュールとして KB913648 が公開されており、このモジュールを適用することで、大量のシャドウコピーボリュームのマウントが原因でページプールが大量に消費される問題を抑えるために、利用可能なページプールのサイズが一定の閾値(既定で 80MB )を下回った場合、すべてのシャドウコピーボリュームが一時的にディスマウントされ、ページプールを開放させる機能が実装されます。
A new Volume Shadow Copy Service update is now available that fixes various Volume Shadow Copy Service problems in Windows Server 2003
https://support.microsoft.com/kb/913648
ページプールが大量に消費された場合、マウントされているシャドウコピーボリュームは、実際にどれぐらいのページプールを消費しているかを確認することは容易なことではありません。
しかしながら、運用時のシャドウコピーボリュームによるページプールの消費状況を把握することは、シャドウコピーの負荷分散の必要性の判断及び負荷分散の方法選びに必要な情報です。
以下に、シャドウコピー機能が有効しているファイルサーバ環境でページプールの枯渇が発生している場合、シャドウコピーボリュームの一時的にディスマウントされる機能を利用して、シャドウコピーは実際にどれぐらいのページプールを消費しているかを確認する方法を紹介します。この方法は、修正モジュール KB913648 の適用が前提となります。
1.調査対象のファイルサーバで VSS トレースログ機能を有効します。詳細については KB887013 に記載があります。
(1). Notepad.exe を起動し、下の "---" の内側の文字列をコピーし、メモ帳に貼り付けます。
------------------------
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VSS\Debug\Tracing]
"TraceFile"="c:\\trace.txt"
"TraceLevel"=dword:ffffffff
"TraceEnterExit"=dword:00000001
"TraceToFile"=dword:00000001
"TraceToDebugger"=dword:00000001
"TraceFileLineInfo"=dword:00000001
"TraceForceFlush"=dword:00000000
------------------------
(2). ペーストした文字列の 4 行目の "c:\\trace.txt" の c の部分を シャドウコピー対象ボリュームではないボリュームに変更します。すなわち、トレースの格納先は共有フォルダのシャドウコピーが有効になっていないボリュームを選択して下さい。
(3). 変更後の文字列を保存し、保存されたテキストファイルの拡張子を.reg に変更します。
(4). 手順 (3). で拡張子を変更したファイルをダブルクリックし、システムのレジストリに設定を適用します。
(5). システムを再起動します。
以上の手順で、VSS トレースログが 手順 1-(2). で指定したファイルにテキストで記録されるようになります。
How to enable the Volume Shadow Copy service's debug tracing features in Microsoft Windows Server 2003
https://support.microsoft.com/kb/887013
2.定期的に VSS トレースログファイル(手順1-(2)で指定したVSSトレースログファイル)を開き、ページプール不足によるシャドウコピーボリュームのディスマウント処理が発生したかどうかを確認します。
検索キーワード: CVsSoftwareProvider::DismountAllSnapshots -> このキーワードが存在する場合、シャドウコピーのディスマウント処理が発生したことを示します。
3.ページプール不足によるシャドウコピーボリュームのディスマウント処理が発生したことを確認できたら、次に以下のキーワードで検索し、シャドウコピー作成時のページプール使用量の変化を確認します。
検索キーワード1: "available page pool before dismount xxxx" -> xxxx が、ディスマウント前に利用可能なページプール サイズを示します。
検索キーワード2: "available page pool after deletion yyyy" -> yyyy が、ディスマウント後に利用可能なページプール サイズを示します。
検索キーワード3: "difference zzzz" -> zzzz が、ディスマウント処理により開放されたページプールサイズを示します。
注意:
1.xxxx/yyyy/zzzz の単位は KB (キロバイト)です。
2.上記のキーワードは各シャドウコピーボリュームごとに記録されるため、複数のシャドウコピーボリュームがディスマウントされた場合には、上記キーワードが複数回記録される場合があります。
3.手順1で VSS トレースログ機能を有効にした場合、時間が経つにつれてVSS機能動作するたびにトレースログが出力されるため、VSS トレースログファイルのサイズが段々大きくなり、ディスクの空き容量を圧迫する可能性があります。そのため、手順2で現時点までの VSS トレースログファイルからディスマウント処理の発生が確認できなかった場合、その時点で VSS トレースログファイルを手動で削除することをお勧めします。同じ名前の新しい VSS トレースログファイルがまた自動で作成されますので、その後に発生するディスマウント処理の確認に特に影響ありませんが、思わず VSS トレースログファイルのサイズが極端に増えるリスクを防げます。
次の例のように、
シャドウコピーのディスマウント処理の開始と完了の間に出力されたすべての "difference zzzz" の zzzz の合計値は、シャドウコピーボリュームのマウントにより消費されていたページプールの合計サイズであり、シャドウコピーボリュームのディスマウント処理より開放されたページプールの合計サイズでもあります。
また、初回目の "available page pool before dismountxxxx" の中の xxxx 値は、シャドウコピーのディスマウント処理が作動した時点での利用可能なページプールのサイズを示します。
また、最後回目の "available page pool after deletionyyyy" の中の yyyy 値は、シャドウコピーのディスマウント処理が完了した時点での利用可能なページプールのサイズを示します。
例:
// シャドウコピーのディスマウント処理の開始
[0134695156,0x0001fc:0x0c40:0x4845352e] ENTER {CVsSoftwareProvider::DismountAllSnapshots}:
:
// 初回目の以下のログの中の xxxx 値は、シャドウコピーのディスマウント処理が作動した時点での利用可能なページプールのサイズ
[0134695156,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0401): CVsSoftwareProvider::DismountAllSnapshots: available page pool before dismount 81936 ß-- ここは、初回目の xxxx 値, 利用可能なページプールは81,936KBでした。
:
[0134695171,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0420): CVsSoftwareProvider::DismountAllSnapshots: available page pool after deletion 85436
[0134695171,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0421): CVsSoftwareProvider::DismountAllSnapshots: difference 3500
:
:
[0134699046,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0401): CVsSoftwareProvider::DismountAllSnapshots: available page pool before dismount 394868
:
[0134699046,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0420): CVsSoftwareProvider::DismountAllSnapshots: available page pool after deletion 396472
[0134699046,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0421): CVsSoftwareProvider::DismountAllSnapshots: difference 1604
:
:
[0134699062,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0401): CVsSoftwareProvider::DismountAllSnapshots: available page pool before dismount 396372
:
// 最後回目の以下ののログの中の yyyy 値は、シャドウコピーのディスマウント処理が完了した時点での利用可能なページプールのサイズ
[0134699062,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0420): CVsSoftwareProvider::DismountAllSnapshots: available page pool after deletion 398024 ß-- ここは、最後回目の yyyy 値, 利用可能なページプールは 398,024KB でした。
[0134699062,0x0001fc:0x0c40:0x4845352e] softprv\src\dismount.cxx(0421): CVsSoftwareProvider::DismountAllSnapshots: difference 1652
:
// シャドウコピーのディスマウント処理の完了
[0134699062,0x0001fc:0x0c40:0x4845352e] EXIT {CVsSoftwareProvider::DismountAllSnapshots}: hr: 0x00000000
「コミュニティにおけるマイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。」