- PR -

デッドロックの調査について

1
投稿者投稿内容
mm
会議室デビュー日: 2004/09/25
投稿数: 17
投稿日時: 2005-08-22 22:27
表題の件で質問があります。

あるシステムでDBのデッドロックが発生し
どのSQLでデッドロックになってしまったのかを
調査したいと思っております。
(デッドロックはExceptionメッセージを
ログに出力するようにしていた為分かりました)
SQL Serverのログ情報に残っていないか
確認しましたが見当たらず、何かオプションを
設定することによって出力されるのではないかと
思い、調べていましたところ
http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2005/06/28/22.aspx
で、「トレースフラグ1204が吐き出す情報を解析する」に行き当たりました。
デッドロックに関するレポートが起動したコンソールに返され,エラーログに記録
されるということなのですが、コンソール起動しないでログのみに出力することは
可能なのでしょうか?

どなたかご存知の方がおられましたらご教授宜しくお願い致します。

==================================
テスト環境:
Windows2000 Pro
SQL Server2000
.NET2003 VB
ADO.NET
ASP.NET
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2005-08-22 22:54
引用:

マミさんの書き込み (2005-08-22 22:27) より:
表題の件で質問があります。

http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2005/06/28/22.aspx
で、「トレースフラグ1204が吐き出す情報を解析する」に行き当たりました。
デッドロックに関するレポートが起動したコンソールに返され,エラーログに記録
されるということなのですが、コンソール起動しないでログのみに出力することは
可能なのでしょうか?




お疲れ様です。
マミさんが参照された記事を書きました TLC です。
さて本題ですが,

結論から言うと可能です。

最も簡単なのが,
EnterpriseManager でトレースを取得したいデータベースのプロパティを表示します。
[SQL Server のプロパティ(設定)]というダイアログが表示されますので,

これの[全般]タブに[起動時のパラメータ]という設定があります。
T1204 トレースフラグは単なる起動時のオプションですから,

ここに
[-T1204] というエントリを追加してあげて「サービスの再起動」
をしてあげればトレースフラグを取得する状態で SQL Server が起動します。

この状態でデッドロックが発生すれば,SQL Server ログにダンプが記録されることになります。
これで目的は達成できます。

■ただし,この方法はあまりお勧めいたしません。

-T1204 オプションは再起動しなければなりませんので,
クリティカルな運用データベースに適用するべきではないと考えます。

代わりに,
[SQL プロファイラ]を用いて,
トレースするイベントにデッドロック関係のイベントを追加して監視してはいかがでしょうか?
これならば,好きなときに監視を開始して必要な情報を取得できたらプロファイラを停止するだけですみます。

ご検討ください。

----------
TimberLandChapel
http://blogs.timberlandchapel.com/blogs/timberlandchapel/

未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2005-08-22 23:03
-T の効果を永続化したいだけなら dbcc traceon を使えばいいんじゃないの。
dbcc traceon(1200, 1204, 1205, 3604) くらいやっとけばなんとかなると思う。

トレースフラグ
1200 ロック情報を出力します。
1204 デッドロックに関係するロックのタイプと影響を受ける現行コマンドを戻します。
1205 デッドロック時に実行中のコマンドに関する詳細情報を戻します。
3604 トレース出力をクライアントに送信します。

デッドロックではなくロック全般によるブロッキング状況について調べるなら、
[INF] SQL Server 2000 のブロッキングを監視する方法 が参考になると思う。
TLC
大ベテラン
会議室デビュー日: 2005/05/31
投稿数: 152
お住まい・勤務地: 東京都
投稿日時: 2005-08-22 23:51
引用:

未記入さんの書き込み (2005-08-22 23:03) より:
-T の効果を永続化したいだけなら dbcc traceon を使えばいいんじゃないの。
dbcc traceon(1200, 1204, 1205, 3604) くらいやっとけばなんとかなると思う。

[INF] SQL Server 2000 のブロッキングを監視する方法 が参考になると思う。



>trace on
ごもっともです。

>[inf]
一応,トレースフラグ解析の元ネタというか MS サイトの記事はこちらの沖さんのコラム記事です。
http://www.microsoft.com/japan/msdn/sqlserver/columns/webtech/webtech3.asp
mm
会議室デビュー日: 2004/09/25
投稿数: 17
投稿日時: 2005-08-23 09:07
>TLCさん、未記入さん

おはようございます。早々のご回答ありがとうございます。

早速traceonを設定し、
http://www.microsoft.com/japan/msdn/sqlserver/columns/webtech/webtech3.asp
上記サイトにある「3.2 デッドロックの問題」を試してみた結果、
ログにデッドロックの情報が出力されている事が確認できました。
これでしばらく様子を見たいと思います。

#提示して頂きましたサイト、大変勉強になりました。ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)