SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Archive for 3月 24th, 2021

SQL Server / SQL Database の行のバージョン管理の基本動作

one comment

SQL Server / Azure SQL Database では、行のバージョン管理 (RLV : Row Level Versioning) と呼ばれる機能を使用することができます。

通常、データのアクセス時にはロックが取得され、特定のアクセスパターンでは、検索についても同時実行性の低下につながることがあります。
SQL Server のデフォルトの設定では、検索時にもロックが取得され、更新系の処理が実行されている場合は、ロック競合により、検索がブロックされる動作が行われることがあります。

このような検索時の同時実行性の低下を抑えるため、SQL Server では行のバージョン管理という機能を使用することができます。

これは、MVCC (MultiVersion Concurrency Control) により、読み取り時にはロックを取得しないようにすることで、読み込みと書き込みが同時に行われていても、競合を発生させず、同時実行性の低下を抑えることができる機能となります。

Azure SQL Database では、この機能はデフォルトで有効になっているのですが、SQL Server では 2005 から実装が行われたものとなり、現時点の最新バージョンの SQL Server 2019 でもデフォルトでも無効な状態となっています。

本投稿では、SQL Server ベースの環境で、MVCC を実現するための行のバージョン管理がどのように実装されているのかを見ていきたいと思います。

Read the rest of this entry »

Written by Masayuki.Ozawa

3月 24th, 2021 at 4:04 pm