初めて自分の家と他人の家が違う、と意識した時

分かる方いましたら宜しくお願い致します。

SQLサーバー2000を使用しているのですが、デッドロックが
発生する場合がございます。

使い方としては
インサートするプログラムA
SELECTをするプログラムB
SELECTをするプログラムC
の3本にてテストを行っております。

デッドロックを起こすプログラムは
SELECTをかけているB、Cになります。
Aに関してはトランザクションをかけている為、
インサート中はB,Cを起動させてもSELECTを待機しているように見えます。
SELECT中はNOLOCKを指定してません。
(余計な情報を出さない為)

発生する時が稀で、タイミングによるものかの検討も
ついておりません・・・

SELECT文同士でもデッドロックは発生するものですか??
対処法など分かる方もいらしたら宜しくお願い致します。

乱雑な文章ではありますが、宜しくお願い致します。

A 回答 (2件)

これ3本同時に実行なんでしょうか?


インサートの場合は行単位で当然ロック掛りますし、トランザクションを賭けていれば全てインサート終わるまで(遅延書き込みも)ロックですよね。

SELECT同士でも完全に読み込むまでは行がぶつかればロック掛りますよ。これプログラムからSELECTですか?
ならレコードセットを最後まで読み込んで閉じないと、大量情報ではカーソルが途中を指しているかによってはバッテイングしますよ。NOLOCKはなるべく掛けないと。NOLOCK掛けないってことは書き込むかもしれないってことですから。
    • good
    • 0

こんばんは。



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

参考URL:http://support.microsoft.com/kb/832524/ja
    • good
    • 0
この回答へのお礼

御回答ありがとうございます。
以前調べた際にそのサイトに行きつき

とりあえずログを表示させようと
したのですが、SQLSERVERの再起動が
出来ない為

代用として
================
dbcc traceon (1204, 3605, -1)
go
dbcc tracestatus(-1)
go
===============

上記コマンドをクエリで送信し
ログ出るようにしたつもりなのですが、
デッドロック発生してもログには記載せずという
感じで行き詰っています・・・

お礼日時:2010/11/18 18:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報