web-dev-qa-db-ja.com

SQL Serverはマルチバージョン同時実行制御(MVCC)を使用していますか?

IBMサイトで公開されているCouchDBの古い概要 [〜#〜]こちら[〜#〜] を読んで、私は以下を見つけて驚きました:

Oracle(V7以降)、MySQL(InnoDBで使用する場合)、Microsoft®SQL Server 2005以降など、最新のデータベースのほとんどがロックメカニズムからMVCCに移行し始めています。

私は現時点(V2012)でSQL Serverをかなり使用しており、何らかの形のMVCCが存在する可能性があるとはまったく考えていません。私は以前にもストアドプロシージャでwith (tablock, holdlock)を使用しました。

SQL Serverは実際にMVCCをどこにでも実装しますか?実装する場合、それはwith (tablock, holdlock)の考え方とどのように調和しますか?

5
Zach Smith

SQL Serverは本当にどこにでもMVCCを実装しますか

はい、SQL Server 2005以降です。

SQL Serverの用語は、「行バージョン管理分離レベル」です。 Locking and Row Versioning で始まる製品ドキュメントツリーを参照してください。特に、2つの個別の「MVCC」実装があることに注意してください。行のバージョニングを使用したコミット読み取り分離(RCSI)とスナップショット分離(SI)。

そして、もしそうなら、それはどのようにwith (tablock, holdlock)の考えと調和しますか?

ヒントの組み合わせを使用すると、テーブル全体へのアクセスがシリアル化されます。これは使用可能な同時オプションの中で最も少ないため、これらのヒントを使用することは非常にまれです。特定の用途をRCSIまたはSI分離で置き換えることができるかどうかは、特定の状況によって異なります。具体的な例を挙げてフォローアップの質問をすることで、その側面について詳しく説明することができます。

また、SQL Serverの分離レベルについて、私の 一連の記事 を読むこともできます。

12
Paul White 9