新年あけましておめでとうございます。
本年も引き続きブログの投稿を行っていきたいと思います。
2012 年最初の投稿は SQL Server の投稿で。
先日 PASS Summit 2011 の DVD が届きました。
PASS Summit 2011 の DVD が参加者でなくても、セッションの PDF と動画が収められた DVD を購入することが可能です。
Purchase the PASS Summit 2011 DVD Here
Bob Ward の Inside tempdb で SQL Server のプロセスにアタッチして、スレッドの内容を確認するというデモがありました。
興味深かったので、基本的な操作について調べてみました。
■WinDbg のインストール
プロセスにアタッチするためには、WinDbg を使用します。
WinDbg は Debugging Tools for Windows に含まれています。
このツールは以下のどちらかをインストールすると使用することが可能です。
私の環境だと Windows SDK からだとインストールができなかったので、WDK でインストールした Debugging Tools for Windows を使用しています。
インストールが終了したらシンボルファイルパスを設定しておきます。
WinDbg を起動して、[File] → [Symbol File Path] をクリックして、シンボルのファイルパスを指定します。
シンボルパスとして [SRV*c:symbols*http://msdl.microsoft.com/download/symbols] を指定します。
SQL Server のシンボルファイルに関してはも上記の URL からダウンロードすることが可能です。
SQL Server のシンボルファイルを単体でダウンロードする場合は、以下の記事の内容で実施することが可能です。
How to download a sqlservr.pdb symbol file
C:>cd C:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLBinn
C:Program FilesMicrosoft SQL ServerMSSQL10.MSSQLSERVERMSSQLBinn>"C:Program
FilesDebugging Tools for Windows (x64)symchk" sqlservr.exe /s SRV*c:symbols*
http://msdl.microsoft.com/download/symbols
これで WinDbg の準備は完了です。
それでは実際に SQL Server のプロセスにアタッチしてみたいと思います。
■WinDbg で SQL Server のプロセスにアタッチ
プロセスへのアタッチですが、
- [File] → [Attach to a Process] または [F6] をクリックして [sqlservr.exe] にアタッチ
- コマンドプロンプトで [windbg.exe -pn sqlservr.exe] を実行
のいずれかで実施することができます。
プロセスにアタッチしたタイミングでブレークポイントが発生し、プロセスが一時停止の状態になります。
プロセスの一時停止を解除する場合は、[g] を入力する
または、[Go] をクリックします。
アタッチしてブレークポイントを発生させた状態であれば、その状態の全スレッドのコールスタックを [!uniqstack] で取得することが可能となります。
シンボルファイルが読み込まれていれば以下のようにスレッドのコールスタックを表示することが可能です。
以下は Lock Monitor と LogMgr のスレッドになるかと思います。
[sys.dm_os_threads] の [os_thread_id] と [!uniqstack] の [id] は対応付けができるようですね。
WinDbg に関しては以下の資料がとても参考になります。
WinDbg. From A to Z!
WinDbg はクラッシュダンプを [!analyze -v] するぐらいしか使っていないのでもう少し使い方を勉強したいと思いました。