• 検索結果がありません。

DB アクセスの排他制御の設定漏れによる業務遅延の発生

ドキュメント内 Symfoware Server べからず集 (ページ 82-85)

4. ロックの影響を忘れるべからず

4.1. DB アクセスの排他制御の設定漏れによる業務遅延の発生

4.1.1. 留意点

【概要】

SymfowareはデフォルトではSELECT文の実行でも排他を獲得します(※)。そのため、参

照系のSQL文と更新系のSQL文が競合した場合は排他待ちが発生します。

したがって、アプリケーションを作成する時には、排他待ちを少なくするような処理手順を 検討する必要があります。

また、Symfoware に対して、業務上問題ない範囲で「排他なし」等の排他強度を弱くする

設定を検討してください。

Symfoware の具体的な設定方法としては、トランザクションモードと排他の単位、および

占有モード指定を検討することによってこれらを実現します。

※ ODBCアプリケーションでの操作については、SELECT文の実行において、デフ ォルトで排他を獲得しないよう変更されています。

【詳細】

DBアクセスの排他制御において、以下のように同時実行処理を優先した設定を行います。

 SET TRANSACTION文によるモード指定

 占有モード指定を利用したSQL文単位の指定

 クライアントの動作環境ファイルの実行パラメタでトランザクションモードを指定 [参考]

DEFAULT_ACCESS_MODE = READ_ONLY

DEFAULT_ISOLATION = READ_UNCOMMITTED

以下に例を示します。

例1) ダーティリードを許す検索

他のアプリケーションによって更新途中の、コミット未のレコードの参照を許すことが可 能な場合は、SET TRANSACTION 文でトランザクションモードの独立性水準でREAD

UNCOMMITTEDを指定するか、占有モード指定でNO LOCKを指定します。

なお、コミット未のレコードの参照を許す場合の例として以下のような場合があります。

 更新されないカラムを参照する場合。

 必ずしも最新性を要求しない参照の場合

例2) 常に最新のデータを検索したい

参照したレコードを占有せず、検索したレコードの排他を保持しないことで他の利用者が 当該レコードを更新可能な状態にします。この場合はSET TRANSACTION文でトラン

Symfoware Server べからず集

また、アプリケーション作成時の留意点として、以下を参照してください。

 時間監視の設定

以下の実行パラメタを指定することによって、アプリケーションが排他待ちによって 処理を待たされた場合に、無限に待ち続けることを抑止することができます。

 TRAN_TIME_LIMIT

1 つのトランザクションで使用可能な時間を指定することができます。なお、デ フォルト値は「0(無制限)」です。

注意事項 : USER_CONTROL=YESの場合は、本指定は無効となります。

 WAIT_TIME

Symfoware(サーバ側)からのデータ受信の待ち時間をクライアント側に指定し

ます。デフォルト値は「0(応答があるまで待ち続ける)」です。

※実行パラメタ ISOLATION_WAIT=REJECT を設定した場合、WAIT_TIME パラメタに関係なく排他が発生した時点でエラーとなりクライアント側に処理を 戻すことが可能です。

なお、アプリケーションの排他待ち状態は、rdblkinfコマンドのlオプションで確認するこ とができます。

Statusに出力された内容で、排他待ち状態を確認することができます。

USER2のSQLが「実行中」で、USER1のSQLが「排他待ち」の状態になっています。

4.1.2. 未対処時の影響 (1) 現象分類

性能劣化 (2) 現象/原因

オンライン業務の処理遅延が発生。

例:受注サーバが使用不可。

rdblkinf ‐l

RDBII rdblkinf DATE:2012/09/28 TIME:16/01/09 DSI‐name : TESTDB.TESTDSI_1

Status Uid Pid Type Name Unit Purpose WAIT USER1 16417 SQL APL01/CONNECT1 DSI UPDATE ACTIVE USER2 16309 SQL APL05/CONNECT5 DSI UPDATE

Symfoware Server べからず集 15分もの間、各営業でオーダ発行できず。

不適切な排他設定での同時実行処理のためです。

 参照処理と更新処理の競合による排他待ちが発生

 排他の単位がページのため、先行の処理がページを占有

4.1.3. 備考

 Symfoware Server アプリケーション開発ガイド(共通編)

1.1.8 資源の競合が起きた場合の制御

 Symfoware Server コマンドリファレンス 2.33 rdblkinf

Symfoware Server べからず集

ドキュメント内 Symfoware Server べからず集 (ページ 82-85)

Outline

関連したドキュメント