- PR -

ロックについて

1
投稿者投稿内容
nabe
常連さん
会議室デビュー日: 2006/04/13
投稿数: 29
投稿日時: 2007-08-30 19:39
SQLServer2005にて知識不足で理解できない点があります。
みなさんのお力をお借りしたく書き込みさせて頂きます。
よろしくお願い致します。

現在、SQLServer2005にて、あるSP_Aというストアドプロシージャーを作成しました。

SP_Aの簡単な内容は、
TBL_1をINSERTし、
TBL_1のデータを元にTBL_2をUPDATEする
ようなストアドプロシージャーです。
また、TBL_2に対してトリガーを埋め込み、
TBL_2がINSERTまたは、UPDATEされると自動的に
TBL_2をさらに更新する仕組みになっています。

現在、SP_AはVB.netのPGより起動されます。
SP_AがVB.netより起動し、処理中の間、
クエリーよりTBL_1または、TBL_2に対して、
更新系のSQL(Insert,Update,Delete)を投げかけると
待ち状態になってしまいます。
SP_Aにて処理しないKEYに対してのSQLなのですが、TBLロックが
かかってしまっているのか、待ち状態になってしまいます。

DBのトランザクションレベルはREAD_COMMITTEDのSNAPSHOT=ONです。

何故か、SP_AをVBからの起動でなく、クエリーより起動した場合は、
TBL_1またはTBL_2に対する別KEYの更新処理は待ち状態にならずに
思い通り動いてくれます。

VBでもトランザクションレベルはREAD_COMMITTEDで指定しているはずなのですが、
何が違いがあるのでしょうか?

何かこれが原因ではないか?っていう意見を何でもいいんで
聞かせて下さい。

長々とすみませんが、よろしくお願い致します。

nabe
常連さん
会議室デビュー日: 2006/04/13
投稿数: 29
投稿日時: 2007-09-13 11:06
自己解決できました。

ロックエスカレーションが起こっている模様です。
大量件数処理すると、SQLServerが自動的にロックエスカレーションってのを
起こすみたいで、こいつにより、行ロックがページロック、テーブルロックに
自動的に変更されているらしいです。
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2007-09-13 12:51
無事解決したようで、良かったですね。

引用:

nabeさんの書き込み (2007-08-30 19:39) より:

何故か、SP_AをVBからの起動でなく、クエリーより起動した場合は、
TBL_1またはTBL_2に対する別KEYの更新処理は待ち状態にならずに
思い通り動いてくれます。



この理由も解決しましたか?
もしかして、VBで起動した時とクエリーより起動した時の条件
(プロシージャの呼び出し回数とかパラメータとか)が違ったのでしょうか?
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2007-09-13 14:47
SQL Sever と言えば何でもかんでもロックエスカレーションのせいにして解決される事がしばしばですが、もう少し原因を追求した方が良いと思いますよ。

まぁ待ち状態になるだけで特に困っていないなら、素直に待つべきですが。

引用:

SP_Aにて処理しないKEYに対してのSQLなのですが、TBLロックが
かかってしまっているのか、待ち状態になってしまいます。


「処理しないKEY」かどうかは、先の SP_A のトランザクションが終わってみないと、次のトランザクションには分からないので待つのは当然です。Update や Delete の対象となるレコードを探すのにテーブルをスキャンしないとダメですよね。

http://www.microsoft.com/japan/sql/ssj/tips/02.mspx

引用:

DBのトランザクションレベルはREAD_COMMITTEDのSNAPSHOT=ONです。


用語は正しく使わないと正確に人に伝わらないですよ。

「トランザクションの分離レベルはREAD_COMMITTED」で、「READ_COMMITTED_SNAPSHOT なのか スナップショット分離レベルなのか」どっちでしょう?

まぁここでは関係ないでしょうけど。


引用:

何故か、SP_AをVBからの起動でなく、クエリーより起動した場合は、
TBL_1またはTBL_2に対する別KEYの更新処理は待ち状態にならずに
思い通り動いてくれます。


単に先のトランザクションが終わってしまったからでは?
_________________
囚人のジレンマな日々
1

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