SQL Server プロセスダンプの採取
神谷 雅紀
Escalation Engineer
SQL Server データベースエンジンプロセス (プロセス名 sqlservr.exe) のプロセスダンプを採取する方法です。SQL Server 製品に付属の sqldumper.exe を使用することで、デバッガ等を追加インストールすることなく、かつ、データベースのデータを含まない形のダンプの採取が可能です。
手順1
How to use Powershell script to generate a dump file の Code details をクリックし、Powershell ソースコードをファイル名 SQLDumpHelper.ps1 ファイルとして、プロセスダンプ採取の対象となるSQL Serverが実行されているサーバーに保存します。
How to use the Sqldumper.exe utility to generate a dump file in SQL Server
https://support.microsoft.com/en-us/help/917825/how-to-use-the-sqldumper-exe-utility-to-generate-a-dump-file-in-sql-se
手順2
Windows キー + Q を押下し、Windows Powershell と入力します。検索結果の中の Windows Powershell を右クリックし、「管理者として実行」(Run as administrator) をクリックします。
手順3
Powershell コンソールで cd コマンドにより SQLDumpHelper.ps1 を保存したフォルダーに移動します。
例: C:\temp\SQLDumpHelper.ps1 として保存した場合
cd C:\temp
手順4
Powershell コンソールに .\SQLDumpHelper.ps1 と入力し、Enter を押下します。
手順5
プロセスダンプ採取対象の SQL Server プロセスの PID を入力します。
手順6
採取するダンプのタイプを入力します。各ダンプに含まれるメモリ領域やファイルの目安は以下の通りです。
※ 採取時間やファイルサイズはあくまでも目安です。書き出し先のディスク性能や書き出すデータ量 (メモリサイズ) などに依存して大きく変動します。
ダンプの種類 |
ダンプファイルに含まれるメモリ領域 |
ダンプファイル採取時間の目安 |
ダンプファイルサイズの目安 |
|
1) |
Mini-dump |
スレッドスタックのみ。 |
スレッド数に依存。一般的には数秒から数十秒。 |
スレッド数に依存。一般的には数百 KB ~ 数 MB。 |
2) |
Mini-dump with referenced memory |
スレッドスタックとそこから参照されているメモリのみ (SQL Server の既定)。 |
スレッド数に依存。一般的には数秒から十秒分。 |
スレッド数に依存。一般的には数百 KB ~ 数十 MB。 |
3) |
Filtered dump |
コミットされているメモリ。ただし、データベースのデータを保持しているメモリを除く。 |
割り当て済みメモリ量に依存。一般的には数十秒から数分。 |
割り当て済みメモリ量に依存。おおよそ パフォーマンスカウンタの Memory Manager\Total Server Memory から Buffer Manager\Total pages を差し引いたサイズ。 |
4) |
Full dump |
コミットされているメモリすべて。 |
割り当て済みメモリ量に依存。一般的には数分から数十分。 |
割り当て済みメモリ量に依存。おおよそ パフォーマンスカウンタの Memory Manager\Total Server Memory に数百 MB を加えたサイズ。 |
手順7
出力先フォルダーを指定します。
手順8
複数回採取する場合は、Y を入力後、採取回数と採取間隔を指定します。
正常にダンプが生成されると、コンソールに生成されたダンプファイルのファイル名が表示され、ダンプファイル SQLDmprNNNN.mdmp (NNNN は数字) とログファイル SQLDUMPER_ERRORLOG.log が手順 7 で指定したフォルダーに生成さています。