- - PR -
デッドロックについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-09-07 22:52
表題の件で質問があります。
あるシステムでDBのデッドロックが発生し、 その状況についてログを取りました。 (a) http://blogs.timberlandchapel.com/blogs/timberlandchapel/archive/2005/06.aspx 今回発生したデッドロックのログ情報は上記サイトにある内容とほぼ同じです。 ここでは「サイクルデッドロック」となっています。 (b) 実際にデッドロックが起こったSQLは下記URL中の"未記入"さんが 書かれている内容と同じです。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21913&forum=26 同一クエリを複数セッションで実行すると「変換デッドロック」が発生すると 書かれています。 ここで質問なのですが、ログを見たときに「変換デッドロック」なのか、 「サイクルデッドロック」なのかはどのように判断するのでしょうか? (ログの状況は(a)とほぼ同じで、SQLの内容は(b)とほぼ同じです) 初歩的な質問だと思いますが、ご教授お願い致します。 ================================== テスト環境: Windows2000 Pro SQL Server2000 .NET2003 VB ADO.NET ASP.NET トランザクション分離レベル:Read Commited | ||||
|
投稿日時: 2005-09-07 23:27
お疲れ様です。 「サイクルデッドロック」と「変換デッドロック」は サイクルデッドロックは名前の通り, テーブルAとテーブルBという2つの資源があり, テーブルA→テーブルB テーブルB→テーブルA と,たすきがけになるように更新してしまうことによって発生します。 これは, Aのロックを持っているセッションがBのロックを Bのロックを持っているセッションがAのロックを 要求することによるデッドロックです 「変換ロックは」 基本的にはトランザクション分離レベルが厳密な場合のトランザクション内で テーブルAの共有ロック(読み取り)を持っている状態で更新用の排他ロックを取得しようとして発生するデッドロックです つまり A:共有ロック → 更新ロック B:共有ロック → 更新ロック よって,そもそもデッドロックを発生させているSQLセッションがわかれば見分けはつくと思います。 あえてログのみから判断するとすれば, ロックされている資源を解析すれば判断できますね。 ----- TimberLandChapel http://blogs.timberlandchapel.com/ [ メッセージ編集済み 編集者: TLC 編集日時 2005-09-07 23:31 ] |
1