私は、データベース全体の設定でNOLOCKを適用することはできますか?

StackOverflow https://stackoverflow.com/questions/2836135

  •  26-09-2019
  •  | 
  •  

質問

WITH(NOLOCK)特定のデータベース上の任意のSELECT文の実行時に適用される?

を作成する方法はあります
役に立ちましたか?

解決

はありませんが、あなたはスナップショット分離 SQL Server 2005およびアップ上のデータベースレベルでは、それがデッドロックで大いに役立つはずです。

SNAPSHOT分離レベルの導入とREADの追加の実装とSQL-92分離レベルにSQL Server 2005の紹介拡張はコミット。新しいREAD_COMMITTED_SNAPSHOT分離レベルが透過を読むすべての取引についてコミット置き換えることができます。

データがトランザクション内で読むことをSNAPSHOT分離指定は、他の同時トランザクションによって行われた変更を反映することはありません。トランザクションは、トランザクションの開始時に存在するデータ列のバージョンを使用します。 SNAPSHOTトランザクションがデータを書き込むことから、他のトランザクションをブロックしないように、いかなるロックは、それが読み込まれたデータの上に置かれていません。書き込みデータがデータの読み取りからスナップショットトランザクションをブロックしないことを取引。あなたはそれを使用するために、ALLOW_SNAPSHOT_ISOLATIONデータベースオプションを設定することにより、スナップショットアイソレーションを有効にする必要があります。

READ_COMMITTED_SNAPSHOTデータベースオプションは、スナップショット分離がデータベースで有効になっているデフォルトのREAD COMMITTED分離レベルの動作を決定します。あなたが明示的にREAD_COMMITTED_SNAPSHOT ONを指定しない場合は、READコミットしているが、すべての暗黙の取引に適用されます。これは、READ_COMMITTED_SNAPSHOT OFF(デフォルト)に設定するのと同じ動作を生成します。 READ_COMMITTED_SNAPSHOT OFFが有効な場合、データベースエンジンが使用する、デフォルトの分離レベルを強制するロックを共有しました。あなたがONにREAD_COMMITTED_SNAPSHOTデータベースオプションを設定すると、データベースエンジンではなく、データを保護するためにロックを使用するのでは、デフォルトとして行バージョン管理とスナップショットアイソレーションを使用します。

他のヒント

は、データベースに依存します。いくつかのデータベースエンジンを使用すると、読み取りまたは類似の行動汚れをデフォルトにすることができます。

例は、いくつかのMSSQL Serverバージョンは、セットアップにSQLMenaceの記事で説明されたスナップショット分離、などのデータベースを、あなたを許すます。

scroll top