メモリ ダンプ ファイルを生成するようにSQL Server Analysis Servicesを構成する

この記事では、メモリ ダンプ ファイルを自動的に生成するようにSQL Server Analysis Servicesを構成する方法について説明します。

元の製品バージョン: SQL Server
元の KB 番号: 919711

概要

この記事では、Microsoft SQL Server Analysis Services (SSAS) 2012 以降のビルドを構成して、例外が発生したときにさまざまな種類のメモリ ダンプ ファイルを自動的に生成する方法について説明します。 また、Sqldumper.exe ユーティリティを使用して、SQL Server Analysis Services プロセスのメモリ ダンプ ファイルを手動で取得する方法についても説明します。

詳細

既定では、SQL Server Analysis Servicesは例外が発生したときにミニダンプ ファイルを自動的に生成します。 既定のインストールでは、ミニダンプ ファイルは既定の場所に書き込まれます。

Analysis Services のバージョン 場所
2019 %ProgramFiles%\Microsoft SQL Server\MSAS15.InstanceName\OLAP\log
2017 %ProgramFiles%\Microsoft SQL Server\MSAS14.InstanceName\OLAP\log
2016 %ProgramFiles%\Microsoft SQL Server MSAS13.InstanceName\OLAP\log
2014 %ProgramFiles%\Microsoft SQL Server MSAS12.InstanceName\OLAP\log
2012 %ProgramFiles%\Microsoft SQL Server MSAS11.InstanceName\OLAP\log

注:

InstanceName は、SQL Server Analysis Services バージョンの対応する値のプレースホルダーです。

SQL Server Analysis Services インスタンスのログの場所はインストール後に変更できるため、インストールされているSQL Server Analysis Servicesの msmdsrv.ini ファイルを確認してログの場所を確認できます。

システムの対応する値を決定するには、ImagePath レジスタ キーの値を決定します。それには、msmdsrv.ini を含む Config パスへのパスが含まれている必要があります。

Analysis Services のバージョン レジストリ サブキー
既定のインスタンス HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQLServerOLAPService\ImagePath
名前付きインスタンス HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSOLAP$InstanceName\ImagePath

ミニダンプ ファイルには、次の情報が含まれます。

  • すべてのスレッド スタック

  • スタック上のポインターによって参照される 2 次メモリ

  • プロセス環境ブロック (PEB) に関する情報

  • スレッド環境ブロック (TEB) に関する情報

  • 最近アンロードされたモジュールに関する情報

  • スレッド状態情報

Msmdsrv.ini ファイルの Exception セクションは、メモリ ダンプ ファイルの生成を制御します。 既定では、ファイルはフォルダーにあります %ProgramFiles%\Microsoft SQL Server\MSASxx.InstanceName\OLAP\Config 。 MSASxx は、SQL Server Analysis Service の対応するバージョンのプレースホルダーです。 メモ帳でファイルを開くと、Exception XML タグのセクションが次のようになります。

<Exception>
<CreateAndSendCrashReports>1</CreateAndSendCrashReports>
<CrashReportsFolder/>
<SQLDumperFlagsOn>0x0</SQLDumperFlagsOn>
<SQLDumperFlagsOff>0x0</SQLDumperFlagsOff>
<MiniDumpFlagsOn>0x0</MiniDumpFlagsOn>
<MiniDumpFlagsOff>0x0</MiniDumpFlagsOff>
<MinidumpErrorList>0xC1000000, 0xC1000001, 0xC1000016, 0xC11D0005, 0xC102003F</MinidumpErrorList>
<ExceptionHandlingMode>0</ExceptionHandlingMode>
<CriticalErrorHandling>1</CriticalErrorHandling>
</Exception>

このセクションの設定を変更することで、メモリ ダンプ ファイルを生成する動作を制御できます。 これらの設定は、SQL Server Management Studioで変更することもできます。 これらの設定の詳細については、「SQL Server Management Studioダウンロード Web サイト: ログのプロパティ」を参照してください。

Analysis Services の自動メモリ ダンプ ファイルを無効にする

CreateAndSendCrashReports 設定の値は、メモリ ダンプ ファイルを生成するかどうかを決定します。 この設定には、次の表に示す値のいずれかを指定できます。

説明
0 この値は、Analysis Services がメモリ ダンプ ファイルを生成しないことを指定します。 さらに、[例外] セクションの他の設定の値は無視されます。
1 この既定値では、メモリ ダンプ ファイルが有効になります。 ただし、SQL Server Analysis Servicesは Microsoft にエラー レポートを送信しません。
2 この値は、SQL Server Analysis Servicesがメモリ ダンプ ファイルを生成し、エラー レポートを Microsoft に送信することを指定します。

CreateAndSendCrashReports 設定が 1 または 2 に設定されている場合、[例外] セクションの他の設定では、メモリ ダンプ ファイルの種類と、メモリ ダンプ ファイルに含める情報を制御できます。

完全なダンプ ファイルを自動的に生成するようにSQL Server Analysis Servicesを構成する

例外が発生したときに完全なダンプ ファイルを自動的に生成するようにSQL Server Analysis Servicesを構成するには、SQLDumperFlagsOn 設定を 0x34 に設定します。 さらに、ハンドル情報を含む完全なダンプ ファイルを生成するようにSQL Server Analysis Servicesを構成する場合は、SQLDumperFlagsOn 設定を 0x34 に、MiniDumpFlagsOn 設定を 0x4 に設定できます。 たとえば、Msmdsrv.ini ファイルの Exception セクションは次のようになります。

<Exception>
<CreateAndSendCrashReports>1</CreateAndSendCrashReports>
<CrashReportsFolder/>
<SQLDumperFlagsOn>0x34</SQLDumperFlagsOn>
<SQLDumperFlagsOff>0x0</SQLDumperFlagsOff>
<MiniDumpFlagsOn>0x4</MiniDumpFlagsOn>
<MiniDumpFlagsOff>0x0</MiniDumpFlagsOff>
<MinidumpErrorList>0xC1000000, 0xC1000001, 0xC1000016, 0xC11D0005, 0xC102003F</MinidumpErrorList>
<ExceptionHandlingMode>0</ExceptionHandlingMode>
<CriticalErrorHandling>1</CriticalErrorHandling>
</Exception>

ハンドル情報を手動で含む完全なダンプ ファイルを生成する

応答を停止する (ハングする) サーバーなどの問題をトラブルシューティングするには、ハンドル情報を手動で含む完全なダンプ ファイルを生成する必要があります。 これを行うには、コマンド プロンプトで Sqldumper.exe ユーティリティを次の引数と共に実行できます。

Sqldumper.exe PID 0 0x34:0x4 0 PathToDumpFile

注:

PID は、SQL Server Analysis Services プロセスのプロセス ID を表します。 PathToDumpFile は、ダンプ ファイルが書き込まれるフォルダーを表します。

このコマンドは、インスタンスをインストールした Shared ディレクトリから実行するか、コマンドで Sqldumper.exe ファイルの完全パスを指定する必要があります。

Analysis Services のバージョン 場所
2019 %ProgramFiles%\Microsoft SQL Server\150\Shared
2017 %ProgramFiles%\Microsoft SQL Server\140\Shared
2016 %ProgramFiles%\Microsoft SQL Server\130\Shared
2014 %ProgramFiles%\Microsoft SQL Server\120\Shared
2012 %ProgramFiles%\Microsoft SQL Server\110\Shared

たとえば、SQL Server Analysis Services 2019 の sqldumper.exe を実行する既定のディレクトリは ですC:\Program Files\Microsoft SQL Server\1590\Shared

詳細情報

SQLDumperFlagsOn 設定を使用して、さまざまな SQLDumper フラグを指定できます。 次の表に、フラグ パラメーターの値として使用できるビットマスク値を示します。

ニーモニック名 16 進値 説明
SQLDUMPER_DBGBREAK 0x0001 このフラグにより、Sqldumper.exe ユーティリティは、パラメーターの解析時にプログラムの開始時に DebugBreak API 呼び出しを実行します。 通常、Microsoft Product Support Services のプロフェッショナルはこのフラグを使用しません。このフラグはユーティリティの問題 Sqldumper.exe デバッグするためにのみ使用されるためです。
メモ このフラグは、Sqldumper.exe プロセスに分割されます。 このフラグは、Sqldumper.exe ユーティリティがデバッグしているプロセスに分割されません。
SQLDUMPER_NOMINIDUMP 0x0002 このフラグを使用すると、Sqldumper.exe ユーティリティはダンプ ファイルを生成しません。 このフラグは、Sqldumper.exe ユーティリティをテストするために使用されます。
SQLDUMPER_NOWATSON 0x0004 通常、このフラグは、ダンプ ファイルを手動で生成するときに使用されます。 このフラグは、既定のエラー報告動作をオーバーライドします。 既定では、ダンプ ファイルはレジストリで構成されているエラー報告サイトに送信されます。
SQLDUMPER_REFERENCED_MEMORY 0x0008 このフラグにより、miniDumpWritedump 関数を呼び出すときに、Sqldumper.exe ユーティリティによって MiniDumpWithIndirectlyReferencedMemory フラグが MiniDumpType パラメーターに設定されます。 スタック ベース (パラメーターまたはローカル変数) であるポインター (1 レベルのみ) のメモリは、ダンプ ファイルに格納されます。 テストでは、確率的署名スキーム (PSS) や EC 構造体などのスレッド ローカル ストレージ (TLS) データに基づく特定のローカル パラメーターは、このフラグを設定しても機能しないようです。
SQLDUMPER_ALL_MEMORY 0x0010 このフラグにより、ユーティリティが MiniDumpWriteDump 関数を呼び出すときに、Sqldumper.exe ユーティリティによって MiniDumpWithFullMemory フラグが MiniDumpType に設定されます。 この動作は、デバッガーで .dump /mf コマンドを使用する場合と同じです。 ただし、すべてのスレッド スタックが確実に含まれるように、SQLDUMPER_DUMP_ALL_THREADS フラグを に設定する必要もあります。
SQLDUMPER_DUMP_ALL_THREADS 0x0020 このフラグは、Sqldumper.exe ユーティリティを手動で実行し、ThreadId パラメーター値 0 を指定する場合は必要ありません。 ThreadId パラメーター値 0 は、すべてのスレッドをダンプする必要があることを示します。 特定の 0 以外の ThreadId パラメーター値を指定してもこのフラグを使用すると、すべてのスレッドがダンプ ファイルに書き込まれます。 このフラグが存在するのは、Sqlservr.exe プロセスの一般的な動作は、Sqlservr.exe プロセスを生成するスレッドの現在の ThreadId プロパティ値を渡すことであるためです。 この動作が発生した場合は、すべてのスレッドをダンプするオプションとしてフラグが必要です。
SQLDUMPER_MATCH_FILE_NAME 0x0040 このフラグを使用して、特定の名前付け規則に似たダンプ ファイル名を生成するように Sqldumper.exe ユーティリティを強制することができます。 この特定の名前付け規則は、既存のファイル名に基づいている場合があります。 独自のプログラム内の既存のファイル名を含む特殊なメモリ構造を設定し、そのポインターを sqlInfoPtr パラメーターとして Sqldumper.exe ユーティリティに渡す必要があるため、このフラグは、Sqldumper.exe ユーティリティを手動で実行する場合には役に立ちません。
SQLDUMPER_SKIP_DW_REG_READ 0x0080 このフラグにより、Sqldumper.exe ユーティリティは、Dw15.exe プログラムの実行パスとしてレジストリを使用しません。 Dw15.exe プログラムは、エラー報告サイトにダンプ ファイルをアップロードするために使用されます。
SQLDUMPER_VERBOSE 0x0100 このフラグは、Sqldumper.exe ユーティリティが入力として使用されていると考えるパラメーターがわからない場合に便利です。 このフラグを使用すると、Sqldumper.exe ユーティリティによって、パラメーター値と、コマンド ラインから指定されたパラメーター値の数が表示されます。
SQLDUMPER_WAIT_AT_EXIT 0x0200 このフラグを使用して、デバッガーを Sqldumper.exe ユーティリティにアタッチできます。 このデバッガーを使用して、Sqldumper.exe ユーティリティに関する問題のトラブルシューティングを行うことができます。 これらの問題は、Sqldumper.exe ユーティリティが Sqlservr.exe または別のプログラムによって生成されたときに特に発生する可能性があります。 このフラグを設定すると、Sqldumper.exe ユーティリティは、Sqldumper.exe プログラムが存在する直前と、他のすべての操作が完了した後に、SleepEx 関数を 15 秒間呼び出します。
SQLDUMPER_FILTERED 0x0800 このフラグを使用して、フィルター処理されたダンプ ファイルを生成できます。 SQL Server Analysis Servicesでは、このフラグはまだサポートされていません。

MiniDumpFlagsOn 設定を使用して、ミニダンプ フラグを指定できます。 次の表に、使用可能なミニダンプ フラグの一覧を示します。

オプション 説明
MiniDumpNormal 0x00000000 上書きを使用する一般的なミニダンプ ファイルを作成します。
MiniDumpWithDataSegs 0x00000001 読み込まれたすべてのモジュールのデータ セグメントを含めます。 読み込まれたモジュールがグローバル変数を取得するフラグ。
MiniDumpWithFullMemory 0x00000002 完全なユーザー ダンプ ファイルを作成します。 フィルター処理されたダンプ ファイルは、フラグが設定されている場合は無効になります。
MiniDumpWithHandleData 0x00000004 ハンドル情報を含めます。
MiniDumpFilterMemory 0x00000010 スタック とバッキング ストアのメモリは、モジュール一覧内のモジュールへのポインター参照をスキャンする必要があります。 ユーザーは、SQL Server Analysis Servicesにこのフラグを使用しないでください。
MiniDumpWithUnloadedModules 0x00000020 このフラグは、最近アンロードされたモジュールに関する情報を提供します。 このフラグをサポートするのは、Microsoft Windows XP と Microsoft Windows Server 2003 だけです。 オペレーティング システムは、Windows Server 2003 Service Pack 1 (SP1) と Windows XP Service Pack 2 (SP2) まで、アンロードされたモジュールの情報を保持しません。
MiniDumpWithIndirectlyReferencedMemory 0x00000040 ローカルまたは他のスタック メモリによって参照されるデータを含むページを含めます。
MiniDumpFilterModulePaths 0x00000080 モジュールのパスがモジュール情報から削除された場合は、このフラグを使用しないでください。
MiniDumpWithProcessThreadData 0x00000100 このフラグは、プロセス環境ブロック (PEB) とスレッド環境ブロック (TEB) に関する情報を提供します。
MiniDumpWithPrivateReadWriteMemory 0x00000200 仮想アドレス空間をスキャンして、他の種類のメモリを含めます。
MiniDumpWithoutOptionalData 0x00000400 不要なメモリ領域を排除することで、ダンプされるデータを減らします。 これを行って、ダンプ ファイルに指定されている条件を満たします。 このフラグを使用すると、ユーザーにプライベートなデータを含む可能性があるメモリのダンプを回避できます。 ただし、これは、個人情報が存在しないことを保証するものではありません。 このフラグは使用しないでください。
MiniDumpWithFullMemoryInfo 0x00000800 列挙されたメモリ領域の説明情報を含めます。
MiniDumpWithThreadInfo 0x00001000 スレッド状態情報を含めます。
MiniDumpWithCodeSegs 0x00002000 読み込まれたすべてのモジュールのコードとコード関連のセクションを含めます。

関連情報

Sqldumper.exe ユーティリティを使用して、SQL Serverでダンプ ファイルを生成する方法