本文へジャンプ

WAS V5のデフォルトIsolation Levelの変更(CS -> RS)による注意点 (DM-04-025)

WAS V5のデフォルトIsolation Level(分離レベル)がRSに仕様変更になった旨は発表されていますが、改めて解説します。

内容/目次

更新ログ

(2007/09/21 17:58) WASV6でもデフォルト分離レベルがRSであることを追記。DB2V9でもパッケージ名から分離レベルを判断する方法は、V8と同様。
(2007/10/01 17:11) データソースのカスタムプロパティー(webSphereDefaultIsolationLevel)による分離レベルの指定方法を追加。
(2008/06/24 10:29) URLを修正。
(2008/07/04 17:07) アプリケーションのアセンブルに関するリンク先を更新しました。
【概要】
WAS(WebSphere Application Server) V4以前とWAS V5*では、デフォルトIsolation Levelの仕様が変更されています。

*WASV5.0.2, 5.1, 6.0, 6.1(2007.09.21現在)
  WAS V4の場合 DB2での設定:CS(Cursor Stability) [ISO標準:READ_COMMITED  ]
  WAS V5,V6の場合 DB2での設定RS(Read Stability) [ISO標準:REPEATABLE_READ ] 

DB2 UDBのIsolation Levelのデフォルトは CS ですが、アプリケーション側での設定が優先されます。

【対象製品/環境】
WAS V5,V6上のアプリケーションでDB2への接続のためにDataSourceを使用している環境

【詳細説明】
WASのデフォルトIsolation Levelの仕様が変更され、WAS V5ではRSとなりました。
この仕様変更に伴い、WAS V4からWAS V5へ明示的に分離レベルを指定していないアプリケーションを移行した場合、1つ高いレベルのIsolationとなり、アプリケーションがより多くのロックを保持することによりロック数が増え、パフォーマンス劣化などの問題が発生する可能性があります。
分離レベル対応表
DB2
JDBCトランザクションIsolation Level
ANSI/ISO SQL標準
UR: Uncommited Read未コミット読み取りTRANSACTION_READ_UNCOMMITED未コミット読み取り(Uncommited Read)
CS: Cursor Stabilityカーソル固定TRANSACTION_READ_COMMITEDコミット読み取り(Commited Read)
RS: Read Stability読み取り固定TRANSACTION_REPEATABLE_READ反復可能読み取り(RR)
RR: Repeatable Read反復可能読み取りTRANSACTION_SERIALIZABLE直列化可能(Selializable)

【参考情報】
WAS V5のデフォルト分離レベルの仕様変更に関しては、
 WAS V5アナウンスメント・テクニカル・ワークショップ資料 『Persistence Manager』
 WebSphere基幹システム構築ワークショップ資料 『Data Access』P11-12
をご参照ください。

以下、Webモジュールの分離レベル指定方法、現在の分離レベル確認方法等を追記します。
    Hide details for 【明示的に分離レベルを指定する方法】-WAS/WSAD-【明示的に分離レベルを指定する方法】-WAS/WSAD-
【明示的に分離レベルを指定する方法】-WAS/WSAD-

WASのWebコンテナ上のアプリケーションでデータベース接続のためにDataSourceを使用している環境でISOLATIONをデフォルトから変更したい場合には、以下の方法をとります。

(1) アプリケーションのアセンブル時(WAS)
    アプリケーション・アセンブリー・ツール(AAT) <- WAS V5.0の場合
    アセンブリー・ツールキット(ASTK)       <- WAS V5.1の場合

(2 )開発時(WSAD)
    該当プロジェクトのDeployment Descripterエディタの[参照]タブの[リソース]ページの分離レベルにて設定可能。
    Hide details for Deployment DescripterエディタのキャプチャーDeployment Descripterエディタのキャプチャー
    Deployment Descripterエディタのキャプチャー
DM-04-025_Fig1.jpg
(3) 該当アプリケーションが使用するデータソースのカスタム・プロパティーの設定(WAS管理コンソールから)
    PK05841適用後(V6.0.2 AND V5.1.1.6)に設定可能。
    プロパティー名は、webSphereDefaultIsolationLevel。
(1) の詳細は、以下の情報をご参照ください。
なお、WASのバージョン毎にインフォメーションセンターのリンク先が異なるため、このサイト( http://www-306.ibm.com/software/webservers/appserv/was/library/ )からお使いのバージョンを選択してください。
バージョンを選び、インフォメーションセンターのトップページを開いたら、エディションを選択し、以下のカテゴリーをたどってください。
    V6.0/V6.1
     [アプリケーションの開発とデプロイ]->[WebSphereアプリケーションの開発]->[データ・アクセス・リソース]->[データ・アクセス・アプリケーションのアセンブル]->[リソース参照の作成または変更]
    V5.1
     [アセンブル]->[リソース]->[データ・アクセス]->[リソース参照の作成または変更]
    V5.0
     [機能別全トピック]->[リソース]->[データ・アクセス]->[アプリケーションからのデータへのアクセス]->[データ・アクセス・アプリケーションの開発]->[リレーショナル・アクセスのリソース参照によるデータ・ソースのルックアップ]->[分離レベルおよびリソース参照]->[リソース参照の作成または変更]

(3) の詳細は、以下のTechnote『Changing the default isolation level for non-CMP applications and describing how to do so using a new custom property webSphereDefaultIsolationLevel (Link)
』をご参照ください。
    Hide details for 【分離レベル確認方法 -DB2編】【分離レベル確認方法 -DB2編】
【分離レベル確認方法 -DB2編】

DB2より実行されているSQLの分離レベルは、ステートメント・レベルのイベント・モニターで確認します。

(1) ステートメント・レベルのイベント・モニターを設定

    $db2 update monitor switches using STATEMENT ON

    $db2 create event monitor モニター名 for statements write to file 'C:\EM\STMT'

    $db2 set event monitor モニター名 state = 1

(2) WebアプリケーションからSQLを実行

(3) ステートメント実行に使用されたパッケージ名を確認
    $db2 set event monitor モニター名 state = 0

    $db2evmon -path C:\EM\STMT > emstmt.txt
    [出力例] DB2 V8.1環境でテスト
    8) Statement Event ...
     Appl Handle: 11
     Appl Id: *LOCAL.DB2.014608063132
     Appl Seq number: 0002

     Record is the result of a flush: FALSE
     -------------------------------------------
     Type   : Dynamic
     Operation: Close
     Section : 4
     Creator : NULLID
     Package : SYSSN300
     Consistency Token : SYSLVL01
     Package Version ID :

     Cursor  : SQL_CURSN400C4
     Cursor was blocking: TRUE
     Text   : SELECT * FROM STAFF WHERE ID < 100
(4) パッケージ名から分離レベルを判断する
    - DB2 V8.1, V8.2, V9.1の場合
    パッケージ名 SYS??xyy
    xがIsolation Levelを示しています。
    0 = NC(コミットなし), 1 = UR, 2 = CS, 3 = RS, 4 = RR

    - DB2 V7.2の場合
    パッケージ名 SQLL?yxx
    yがIsolation Levelを示しています。
    0 = CS, 2 = UR, 3 = RS, 4 = RR
    (3) の出力例では、Isolation Levelは、RSであることがわかります。
    以上

    添付資料

    文書情報

    有効期限: 2012年4月9日
    発表日: 2004/04/16
    資料番号: DM-04-025

    掲載内容について

    当サイトは、お客様の問題解決のためのヒントとしてご利用ください。 当サイトにおける記載内容は、お客様固有の問題に対し、適切であるかどうか、また、正確であるかどうかは十分検証されていません。 結果について、いかなる保証も責任も負いかねますので、あらかじめご了承ください。

    商標について

    IBM、IBM(logo)、developerWorks、Lotus、PartnerWorld、Rational、Tivoli、 WebSphereはIBM Corporationの商標です。 他の会社名、製品名およびサービス名等はそれぞれ各社の商標です。

    ソフトウェアサポート

    ソフトウェア製品のサポート技術情報

    ハードウェアサポート

    ハードウェア製品のサポート技術情報