QA@IT
«質問へ戻る

質問を投稿

SQLServerのスナップショット分離レベルとは

SQLServerのスナップショット分離レベルとは、
・すべてのSELECTにFOR UPDATEを付けたRead Committed分離レベル
で良いでしょうか?
 
私は、
・行バージョン有り
・スナップショット分離可能
としたSQLServer 2014、
Tomcat 8、Java 7、Microsoft JDBC Driver 4.1 for SQL Server、
Windows Server 2012R2(Windows Updateは最後まで)
のシステムにて、
 
A:有る処理
 有るSELECT(多い)
 有るUPDATE(多い)
をRead Committed分離レベルでしていましたが、
 
今度、
A:有る処理
 有るSELECT(多い)
 有るUPDATE(多い)
B:別の処理
 別のSELECT(少ない)
 別のUPDATE(少ない)
もしBでUPDATE件数が0で無い場合
 A':有る処理
  有るSELECT(同じに多い)
  有るUPDATE(同じに多い)
をする事になり、全体をスナップショット分離レベルにして
見ました。
 
すると、
・Bが0件でA'をしない場合、Aは遅くなった。
・Bが0件で無く、Aと同じ処理をするA'は遅くならない。
 (Aの2倍の遅さにならない)
となりました。
 
スナップショット分離レベルとは、すべてのSELECTにFOR UPDATEが
付くのと同等だとすると、
・Aではスナップショットをtempdbに書き込む分、遅くなった。
・A'では書き込み済みの為、遅くならない。
という風に説明が付きます。
 
いかがでしょうか?

SQLServerのスナップショット分離レベルとは、
・すべてのSELECTにFOR UPDATEを付けたRead Committed分離レベル
で良いでしょうか?
 
私は、
・行バージョン有り
・スナップショット分離可能
としたSQLServer 2014、
Tomcat 8、Java 7、Microsoft JDBC Driver 4.1 for SQL Server、
Windows Server 2012R2(Windows Updateは最後まで)
のシステムにて、
 
A:有る処理
 有るSELECT(多い)
 有るUPDATE(多い)
をRead Committed分離レベルでしていましたが、
 
今度、
A:有る処理
 有るSELECT(多い)
 有るUPDATE(多い)
B:別の処理
 別のSELECT(少ない)
 別のUPDATE(少ない)
もしBでUPDATE件数が0で無い場合
 A':有る処理
  有るSELECT(同じに多い)
  有るUPDATE(同じに多い)
をする事になり、全体をスナップショット分離レベルにして
見ました。
 
すると、
・Bが0件でA'をしない場合、Aは遅くなった。
・Bが0件で無く、Aと同じ処理をするA'は遅くならない。
 (Aの2倍の遅さにならない)
となりました。
 
スナップショット分離レベルとは、すべてのSELECTにFOR UPDATEが
付くのと同等だとすると、
・Aではスナップショットをtempdbに書き込む分、遅くなった。
・A'では書き込み済みの為、遅くならない。
という風に説明が付きます。
 
いかがでしょうか?