2

NOLOCK ヒントがクエリに追加されると、より多くの読み取りを行うストアド プロシージャがあります。私は困惑しています - 理由を知っている人はいますか?

詳細: クエリは次のとおりです。

SELECT * FROM dbo.<table-name> WITH (NOLOCK).

40,000回の読み取りを行っていましたが、2,000行未満です。これらの読み取りのほとんどは、3 つの TEXT 列が原因であることがわかりました。(それらを省略すると、59 回の読み取りに減少します!) しかし、WITH (NOLOCK) を削除すると、40,000 回の読み取りから 13,000 回に減少します。私は失敗したに違いないと思ったので、これを数回繰り返しましたが、両方の方法で本当に一貫しています。

4

2 に答える 2

1

NOLOCK は、コミットされていないトランザクションからデータを読み取ります。

編集

コミットされていないデータの NOLOCK 読み取りのデモ。

create table table1 (id int, val int)
go

select * from table1 with ( NoLock)
begin tran
insert into table1 values (1,1)

--Switch to new query window
select * from table1 with ( NoLock)
--switch back
rollback tran
select * from table1 with ( NoLock)
于 2009-01-14T16:21:49.777 に答える
0

読み取りカウントには、ロックを読み取るためのページ読み取りが含まれている可能性がありますか?

于 2009-01-14T16:07:28.057 に答える