2011-09-13 8 views
4

先日、cftransactionの中にクエリを含めないと、cfqueryNOLOCKを使用するのは無意味だと私に知らされました。彼は、SQL Serverはトランザクション内でNOLOCKを認識するだけなので、cftransaction内のクエリを持たないため、NOLOCKが冗長になります。NOLOCKとColdfusion

私が働いているすべてのCFショップでNOLOCKが寛大に使用されており、cftransactionの中に入ることはめったにないので、誰かが確認できますか?これらの店舗のすべてのクエリが実際にNOLOCKを尊重しているとは思わないと思いますか?

+0

'nolock'はダーティーな読み込みではありませんか?それにはなぜ取引が必要なのでしょうか?そして 'cftransaction'は処理のロールバックを許しますか? 1つは他のものを必要とするように見えない。 –

+0

なぜNOLOCKを使用していますか? – ppshein

+0

@ppshein私はそれがすべて一緒に別の議論だと思う:) – RHPT

答えて

3

あなたの同僚が間違っている、NOLOCKは、文脈外で冗長ではありませんcftransaction。あなたが明示的にそれを入力したか、していないかどうか

は、SQL Serverのデフォルト設定を使用している場合は、あなたが実行するすべてのクエリは、トランザクション内にラップされます。これは「autocommit mode」と呼ばれます。

0

ベンNadelは偉大な説明だけでなく、私ができるその後、より良いNOLOCKの使用を説明した資料記事のカップルを持っています。ただし、トランザクションの中でNOLOCKを使用してパフォーマンスを向上させる必要はありません。

http://www.bennadel.com/blog/477-SQL-Server-NOLOCK-ROWLOCK-Directives-To-Improve-Performance.htm

は、この情報がお役に立てば幸い! John

+0

私はNOLOCKを全面的に使用していたアプリケーションを継承しました。ほとんどの場合、可能なデッドロックの問題ではないことが分かりましたので、私はそれらを取り除きました。それを削除してもパフォーマンスに変化は見られませんでした。私は、デッドロックのために彼らや他の解決策が必要だったいくつかのケースを見つけました。しかし、私は彼らが現れたときにそのようなケースに対処しました。 – Snipe656

4

SQL Serverの実行計画を見て、NOLOCKを尊重しているかどうかを確認するだけです。私はNOLOCKが本当に名誉であることを(何年もの使用から)確認することができます。私はそれを提案しません(READ_COMMITTED_SNAPSHOT_ISOLATIONにチェックインしてください)が、cftransactionの有無にかかわらず、賞賛されます。

関連する問題