intra-mart IM-Workflow トラブルシューティング 第22版 2024-04-01

5.1. 一般利用者用の参照一覧の表示が遅い

関連する現象


5.1.1. 参照一覧の表示が遅い

対象バージョン

  • iWP / iAF の場合

    • IM-Workflow 7.2.0 ~ 最新バージョン
  • intra-mart Accel Platform の場合

    • 2012 Autumn(Alba) IM-Workflow 8.0.1 ~ 最新バージョン

現象

参照一覧の表示が遅い。
参照一覧の表示が日を追うごとに遅くなっていく。

条件

以下に該当する場合、本項で提示している「原因」に該当する可能性があります。
  • SQLの遅延であること

    ご利用のデータベースのチューニングエンジン等で、参照一覧用SQLの処理コストを確認してください。
    以下のSQLが、処理コストの上位、または参照一覧の表示と同等の処理時間を要している場合、「原因」に該当する可能性があります。
    • 参照一覧「未完了案件」のSQL
    SELECT matter.last_process_date, matter.priority_level, matter.system_matter_id, matter.user_data_id,
           matter.matter_name, matter.matter_start_date, matter.matter_number, matter.flow_id, matter.flow_version_id,
           locale.flow_name, matter.apply_auth_user_code, locale.apply_auth_user_name, matter.apply_execute_user_code,
           locale.apply_execute_user_name, matter.apply_act_flag, matter.apply_date, matter.apply_base_date, handle_user.handle_level
    FROM   imw_t_actv_matter_locale locale, imw_t_actv_matter matter, imw_t_actv_matter_handle_user handle_user
    WHERE  locale.locale_id = handle_user.locale_id
    AND    locale.system_matter_id = matter.system_matter_id
    AND    matter.system_matter_id = handle_user.system_matter_id
    AND    handle_user.user_code = ?
    AND    handle_user.locale_id = ?
    
    • 参照一覧「完了案件」のSQL
    SELECT matter.matter_cpl_date, matter.priority_level, matter.system_matter_id, matter.user_data_id,
           matter.matter_name, matter.matter_number, matter.flow_id, matter.flow_version_id, locale.flow_name,
           matter.status, matter.apply_auth_user_code, locale.apply_auth_user_name, matter.apply_execute_user_code,
           locale.apply_execute_user_name, matter.apply_act_flag, matter.apply_date, matter.apply_base_date, handle_user.handle_level,
           case when matter.status = 'approveend' then '1'
                when matter.status = 'discontinue' then '2'
                when matter.status = 'deny' then '3'
                when matter.status = 'matterhandle' then '4'
                else '0'
           end as matter_end_status
    FROM   imw_t_cpl_matter_locale locale, imw_t_cpl_matter matter,
           imw_t_cpl_matter_handle_user handle_user
    WHERE  locale.locale_id = handle_user.locale_id
    AND    locale.system_matter_id = matter.system_matter_id
    AND    matter.system_matter_id = handle_user.system_matter_id
    AND    handle_user.user_code =
    AND    handle_user.locale_id =
    
  • 参照者の件数が膨大であること

    • データベースにアクセス出来る、または「テーブルメンテナンス」を利用できる場合

      以下のSQLを実行して件数を確認できます。
      SELECT COUNT(*) FROM imw_t_actv_matter_handle_user;
      SELECT COUNT(*) FROM imw_t_cpl_matter_handle_user;
      
    • データベースにアクセス出来ない場合

      以下の案件数と1案件あたりの参照者数を掛ければ、件数が確認できます。
      • 「ワークフロー管理者」メニューの「参照」 - 「1ページあたりの一覧件数 × 一覧下部のページの数」が案件数です。
      • 「ワークフロー管理者」メニューの「参照」 - 「参照者タブ」- 「状況確認」 - 「氏名一覧」の件数が1案件あたりの参照者ユーザ数です。

原因

一般利用者用の参照一覧画面は、ログインユーザが参照可能な案件のみに制限して表示します。
この表示制限の際に行う、案件テーブルと表示制限用の権限テーブルの照合の処理が、参照者レコード数の増大により遅延している可能性があります。
  • 例)以下の設定で、案件のレコード数が1万件の場合、参照者のレコード数は1,000万件です。

    1. 任意の組織(組織Aとします)が参照者としてフロー(フローAとします)に設定されている。
    2. 組織Aには配下に1,000人のユーザが設定されている。
    3. フローAから申請された案件の件数が1万件である。
IM-Workflowは案件の申請時に、表示制限用の権限テーブルに、フローに設定された参照者ユーザ分のレコードを登録しています。
この仕様のため、テーブルのレコード数は、「案件 × 1案件あたりの参照ユーザ数」となり、申請のたびに参照者ユーザ数分のレコードが増加します。
* 「参照」の仕様については「 IM-Workflow 仕様書 」を参照してください。

解決方法

以下の対策が考えられます。
  1. インデックスを利用したチューニングを行う。

    ご利用のデータベースのインデックスアドバイザ等を利用して、最適なインデックスを設定してください。
    チューニング分析対象のテーブル候補は以下の通りです。以下のテーブルに対してのインデックス設定を検討してください。
    imw_t_actv_matter
    imw_t_actv_matter_locale
    imw_t_actv_matter_handle_user
    imw_t_cpl_matter
    imw_t_cpl_matter_locale
    imw_t_cpl_matter_handle_user
    

    コラム

    以下は、過去に 弊社にてチューニング検証を行ったインデックスです。
    案件数10万レコード、参照者数1,000万レコードで3秒程度のレスポンスを確認しています。
    ただし、データベースアクセスはデータ状態やその他の環境に依存しますので、弊社で確認したレスポンスを保証するものでありません。
    あくまで参考として利用してください。
    CREATE INDEX idx_imw_t_actv_handle_user ON imw_t_actv_matter_handle_user(locale_id, user_code, system_matter_id, handle_level);
    CREATE INDEX idx_imw_t_cpl_handle_user ON imw_t_cpl_matter_handle_user(locale_id, user_code, system_matter_id, handle_level);
    
  2. 管理者用の参照一覧を利用する。

    管理者用の参照一覧は以下の特徴があります。お客様業務に適用できるか検討の上、利用してください。
    • 「ワークフロー管理者」メニューの参照

      • 案件の削除ができます。
      • すべての種類の案件操作ができます。
      • 案件に対して参照者を追加できます。
    • 「ワークフロー運用管理者」メニューの参照

      • 「管理グループ設定」で設定したフローの案件のみの参照ができます。
      • すべての種類の案件操作ができます。
    「ワークフロー管理者」メニュー、「ワークフロー運用管理者」の参照一覧は、表示制限用の権限テーブルを利用していません。
    したがって、本項で述べた原因による遅延は発生しません。
  3. 参照者の数を減らす。

    参照者の数を減らすことで、データ件数の増大による遅延を解消できる可能性があります。
    インデックスでの対応と合わせて検討してください。
    • これから申請する案件の参照者の数を減らす。

      1. 参照者をフローから外す: 「フロー定義」 - 「バージョン」 - 「編集」 - 「参照者」タブのクリアで、フローから参照者を削除してください。

      2. 参照者として組織やパブリックグループ配下のユーザを減らす:

        • 参照させたいユーザのみを参照者にする。

          • (案)参照させたいユーザのみが所属するロールを参照者としてフローに設定する。
    • 申請済み案件の参照者の数を減らす。

      • 「ワークフロー管理者」メニューの「参照」 - 「操作」 - 「参照者タブ」のクリアで、案件から参照者を削除してください。

        * 複数案件分の削除操作が必要です。

      コラム

      参照者を一括で削除したい場合は、SQLを利用してテーブルデータを直接削除してください。
      削除用のSQLは以下です。
      ただし、テーブルへの直接アクセスは製品としてサポートしておりません。
      お客様の責任で実施を判断してください。
      DELETE FROM imw_t_actv_matter_handle_user;
      DELETE FROM imw_t_cpl_matter_handle_user;
      
  4. 完了案件の参照が不要であれば、アーカイブを実行して参照対象のレコード数を減らす。

    アーカイブ機能は、完了案件をアーカイブして過去案件テーブルに移行する機能です。
    完了案件の数と参照者の数を減らすことで、データ件数の増大による遅延を解消できる可能性があります。
    インデックスでの対応を合わせて検討してください。
    アーカイブ用のリスナを実装することで、過去案件を参照できるユーザを制御できます。
    過去案件を参照できるユーザを制限することで参照者のレコードを減らすことができます。
  5. 以下のアップデートを適用することで、一覧画面の表示に関するパフォーマンスが改善します。

    • iWP / iAF の場合

      • 対象外
    • intra-mart Accel Platform の場合

      • 2015 Summer(Karen) IM-Workflow 8.0.11 以降

        以下の要件で、APIによるパフォーマンス改善や、表示する案件数を絞り込むための設定の追加を行っております。
        • 要件 #20772 案件情報を一覧取得するAPIのパフォーマンス改善を行います
        • 要件 #20645 一覧表示パターン定義に、日付項目による初期検索条件を設定する機能を追加します

        注意

        最新のアップデート版を適用することを推奨します。
        最新ではないアップデート版をやむを得ず適用する場合は、以下の関連情報を併せて確認してください。
        • バグ #22648 一覧取得APIにおいて、案件プロパティおよびフローグループとそのほかの検索条件によるOR検索が正しく動作しません