• 締切済み

デッドロックに関しての質問

分かる方いましたら宜しくお願い致します。 SQLサーバー2000を使用しているのですが、デッドロックが 発生する場合がございます。 使い方としては インサートするプログラムA SELECTをするプログラムB SELECTをするプログラムC の3本にてテストを行っております。 デッドロックを起こすプログラムは SELECTをかけているB、Cになります。 Aに関してはトランザクションをかけている為、 インサート中はB,Cを起動させてもSELECTを待機しているように見えます。 SELECT中はNOLOCKを指定してません。 (余計な情報を出さない為) 発生する時が稀で、タイミングによるものかの検討も ついておりません・・・ SELECT文同士でもデッドロックは発生するものですか?? 対処法など分かる方もいらしたら宜しくお願い致します。 乱雑な文章ではありますが、宜しくお願い致します。

みんなの回答

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.2

これ3本同時に実行なんでしょうか? インサートの場合は行単位で当然ロック掛りますし、トランザクションを賭けていれば全てインサート終わるまで(遅延書き込みも)ロックですよね。 SELECT同士でも完全に読み込むまでは行がぶつかればロック掛りますよ。これプログラムからSELECTですか? ならレコードセットを最後まで読み込んで閉じないと、大量情報ではカーソルが途中を指しているかによってはバッテイングしますよ。NOLOCKはなるべく掛けないと。NOLOCK掛けないってことは書き込むかもしれないってことですから。

回答No.1

こんばんは。 まずは原因究明をしなければ、話が進みません・・・。 (この質問では、回答は付かないと思います) http://support.microsoft.com/kb/832524/ja ここを参考にして、原因を究明しましょう。 原因が分かれば、解決方法は見つかります。

参考URL:
http://support.microsoft.com/kb/832524/ja
s02152170
質問者

お礼

御回答ありがとうございます。 以前調べた際にそのサイトに行きつき とりあえずログを表示させようと したのですが、SQLSERVERの再起動が 出来ない為 代用として ================ dbcc traceon (1204, 3605, -1) go dbcc tracestatus(-1) go =============== 上記コマンドをクエリで送信し ログ出るようにしたつもりなのですが、 デッドロック発生してもログには記載せずという 感じで行き詰っています・・・