web-dev-qa-db-ja.com

SQL Serverはいつロックを取得しますか?

見つかったSQL Serverの分離レベルのリスト here は、トランザクション内で取得された書き込みロックがトランザクションの終了まで保持されることを示しています。ただし、これらのロックがいつ取得されるかについては触れられていません。

ロックはデフォルトでトランザクションの最初に取得されますか、それとも必要なときに取得されますか?後者が真の場合、Xのロックが保持される時間を最小限に抑えるために、大規模なトランザクションでは書き込み操作をできるだけ遅く実行する方が有利でしょうか。

10
Levi Botelho

デフォルトでは、トランザクションの開始時に、または必要なときにロックが取得されますか?

ロックは、読み取りまたは書き込みが発生する直前に取得されます。ストレージエンジンによって選択されたロックの粒度に応じて、ロックは行、ページ、パーティション、またはオブジェクト(テーブル)レベルで取得できます。

後者が当てはまる場合、Xロックが保持される時間を最小限に抑えるために、大規模なトランザクションで書き込み操作をできるだけ遅く実行することは有利ですか?

はい、並行トランザクションで使用されている分離レベルによっては、並行性にとって有利になる場合があります。

関連読書:

5
Paul White 9