none
READUNCOMMITEDの使用について RRS feed

  • 質問

  • 現在、SQLServer2000からSQLServer2012へのバージョンアップを検討しています。

    バージョンが上がる事によって、使えなくなる機能や記述がないかを調査しています。

    MicrosoftHPにて、SQLServer2014データベースエンジンの非推奨機能の記載があり、

    内容を確認したところ、「今後のバージョンでサポートされない機能」に

    テーブルヒント:「UPDATEまたはDELETEステートメントのFROM句でのNOLOCKまたはREADUNCOMMITEDの指定」

    という記載がありました。

    現在、ストアドプロシージャ内でトランザクション分離レベルでREADUNCOMMITEDを使用しています。

    使用例)

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    BEGIN TRANSACTION

    COMMIT TRANSACTION

    今後このような使い方が出来なくなるという意味の記載かどうか判断出来ず困っています。

    又、使えなくなるとした場合、他の記載方法が見つかっていません。何に書き換えれば良いのでしょうか。

    以上、よろしくお願いします。

    2014年10月30日 8:49

回答

  • 書かれている通り、廃止されるのはUPDATE文もしくはDELETE文のテーブルヒントにNOLOCKもしくはREADUNCOMMITEDを指定した場合が条件であり、対処方法としてもテーブルヒントからNOLOCKとREADUNCOMMITEDを消すことです。

    当然ながらSELECT文やINSERT文には影響しませんし、そもそもテーブルヒント以外については無関係です。

    なお、テーブルヒントの項に少し説明がありますが、あくまでデータ読み取りに対するヒントです。これの意味するところは、UPDATEやDELETEを行う対象行を特定するためのWHERE句などでの読み取りに際しNOLOCKやREADUNCOMMITEDが機能するわけですが、その後には対象行をUPDATEもしくはDELETEするためには排他ロックを行う必要がありそこで必ず失敗します。ですのでこのテーブルヒントを指定することは無意味かと思われます。

    また、SET TRANSACTION ISOLATION LEVELについてもドキュメントがあり、READ UNCOMMITTEDのままでも構いませんが、READ COMMITTEDにした上でREAD_COMMITTED_SNAPSHOTをONにする方法とSNAPSHOTにする方法も挙げられています。

    とりあえずドキュメントの該当しそうな部分をきちんと読まれることをお勧めします。

    • 回答としてマーク shiode 2014年10月31日 1:42
    2014年10月30日 10:28

すべての返信

  • 書かれている通り、廃止されるのはUPDATE文もしくはDELETE文のテーブルヒントにNOLOCKもしくはREADUNCOMMITEDを指定した場合が条件であり、対処方法としてもテーブルヒントからNOLOCKとREADUNCOMMITEDを消すことです。

    当然ながらSELECT文やINSERT文には影響しませんし、そもそもテーブルヒント以外については無関係です。

    なお、テーブルヒントの項に少し説明がありますが、あくまでデータ読み取りに対するヒントです。これの意味するところは、UPDATEやDELETEを行う対象行を特定するためのWHERE句などでの読み取りに際しNOLOCKやREADUNCOMMITEDが機能するわけですが、その後には対象行をUPDATEもしくはDELETEするためには排他ロックを行う必要がありそこで必ず失敗します。ですのでこのテーブルヒントを指定することは無意味かと思われます。

    また、SET TRANSACTION ISOLATION LEVELについてもドキュメントがあり、READ UNCOMMITTEDのままでも構いませんが、READ COMMITTEDにした上でREAD_COMMITTED_SNAPSHOTをONにする方法とSNAPSHOTにする方法も挙げられています。

    とりあえずドキュメントの該当しそうな部分をきちんと読まれることをお勧めします。

    • 回答としてマーク shiode 2014年10月31日 1:42
    2014年10月30日 10:28
  • 返信ありがとうございます。

    回答して頂いた中に記載されているドキュメントも

    関連のありそうなドキュメントも改めて読み直しました。

    詳細な点まで回答して頂き、ほんとうにありがとうございました。

    変更しなくても問題はないと判断できましたが、

    READ COMMITTEDにした上での方法も視野に入れて

    検討したいと思います。

    2014年10月31日 1:46