スナップショット分離を使用した作業
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
SQL Server 2005 (9.x) では、OLTP (オンライン トランザクション処理) アプリケーションのコンカレンシーの強化を目的として、新しく "スナップショット" 分離レベルが導入されました。 以前のバージョンの SQL Server では、コンカレンシーはロックだけを基にしていました。そのため、アプリケーションによってはブロックやデッドロックなどの問題が生じることがありました。 スナップショット分離は行のバージョン管理の機能強化に依存しており、リーダーとライターのブロッキングを回避することでパフォーマンスを向上することを目的としています。
スナップショット分離の下で開始されたトランザクションは、トランザクションの開始時点のデータベース スナップショットを読み取ります。 スナップショット トランザクション コンテキスト内で開かれたキーセット サーバー カーソル、動的サーバー カーソル、および静的サーバー カーソルは、シリアル化可能なトランザクション内で開かれた静的カーソルとほぼ同様に動作します。 しかし、スナップショット分離レベルの下でカーソルが開かれると、ロックが設定されません。 このファクトにより、サーバー上のブロッキングが減少します。
OLE DB Driver for SQL Server
OLE DB Driver for SQL Server では、SQL Server 2005 (9.x) で導入されたスナップショット分離の使用に関する機能が強化されています。 具体的には、DBPROPSET_DATASOURCEINFO プロパティ セットと DBPROPSET_SESSION プロパティ セットへ変更が加えられています。
DBPROPSET_DATASOURCEINFO
DBPROP_SUPPORTEDTXNISOLEVELS プロパティで使用される DBPROPVAL_TI_SNAPSHOT 値が追加され、DBPROPSET_DATASOURCEINFO プロパティ セットではスナップショット分離レベルがサポートされるようになりました。 この新しい値は、データベースでバージョン管理が有効になっているかどうかにかかわらず、スナップショット分離レベルがサポートされることを示します。 次に表に DBPROP_SUPPORTEDTXNISOLEVELS の値の一覧を示します。
プロパティ ID | 説明 |
---|---|
DBPROP_SUPPORTEDTXNISOLEVELS | 型 : VT_I4 R/W: 読み取り専用 説明 : サポートされるトランザクション分離レベルを指定するビットマスク。 次の値を 0 個以上指定できます。 DBPROPVAL_TI_CHAOS DBPROPVAL_TI_READUNCOMMITTED DBPROPVAL_TI_BROWSE DBPROPVAL_TI_CURSORSTABILITY DBPROPVAL_TI_READCOMMITTED DBPROPVAL_TI_REPEATABLEREAD DBPROPVAL_TI_SERIALIZABLE DBPROPVAL_TI_ISOLATED DBPROPVAL_TI_SNAPSHOT |
DBPROPSET_SESSION
DBPROP_SESS_AUTOCOMMITISOLEVELS プロパティで使用される DBPROPVAL_TI_SNAPSHOT 値が追加され、DBPROPSET_SESSION プロパティ セットではスナップショット分離レベルがサポートされるようになりました。 この新しい値は、データベースでバージョン管理が有効になっているかどうかにかかわらず、スナップショット分離レベルがサポートされることを示します。 次の表に、DBPROP_SESS_AUTOCOMMITISOLEVELS の値の一覧を示します。
プロパティ ID | 説明 |
---|---|
DBPROP_SESS_AUTOCOMMITISOLEVELS | 型 : VT_I4 R/W: 読み取り専用 説明 : 自動コミット モードのときのトランザクション分離レベルを示すビットマスクを指定します。 このビットマスクには、DBPROP_SUPPORTEDTXNISOLEVELS に設定できる値と同じ値を設定できます。 |
Note
SQL Server よりも前のバージョンの SQL Server 2005 (9.x) を使用しているときに DBPROPVAL_TI_SNAPSHOT を設定すると、エラー DB_S_ERRORSOCCURRED または DB_E_ERRORSOCCURRED が発生します。
トランザクションでスナップショット分離がサポートされる方法については、「ローカル トランザクションのサポート」を参照してください。