SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server のプロセスにアタッチしてスレッドを確認する

leave a comment

新年あけましておめでとうございます。
本年も引き続きブログの投稿を行っていきたいと思います。

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] をクリックして、シンボルのファイルパスを指定します。
image

シンボルパスとして [SRV*c:symbols*http://msdl.microsoft.com/download/symbols] を指定します。
SQL Server のシンボルファイルに関してはも上記の URL からダウンロードすることが可能です。
image

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 のプロセスにアタッチ


プロセスへのアタッチですが、

  1. [File] → [Attach to a Process] または [F6] をクリックして [sqlservr.exe] にアタッチ
    imageimage
  2. コマンドプロンプトで [windbg.exe -pn sqlservr.exe] を実行

のいずれかで実施することができます。

プロセスにアタッチしたタイミングでブレークポイントが発生し、プロセスが一時停止の状態になります。
プロセスの一時停止を解除する場合は、[g] を入力する
image
または、[Go] をクリックします。
image

アタッチしてブレークポイントを発生させた状態であれば、その状態の全スレッドのコールスタックを [!uniqstack] で取得することが可能となります。
image

シンボルファイルが読み込まれていれば以下のようにスレッドのコールスタックを表示することが可能です。

以下は Lock Monitor と LogMgr のスレッドになるかと思います。
image
image

[sys.dm_os_threads] の [os_thread_id] と [!uniqstack] の [id] は対応付けができるようですね。

WinDbg に関しては以下の資料がとても参考になります。
WinDbg. From A to Z! 

WinDbg はクラッシュダンプを [!analyze -v] するぐらいしか使っていないのでもう少し使い方を勉強したいと思いました。

Written by masayuki.ozawa

1月 1st, 2012 at 11:38 am

Posted in SQL Server

Tagged with

Leave a Reply

*