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万件です。
- 任意の組織(組織Aとします)が参照者としてフロー(フローAとします)に設定されている。
- 組織Aには配下に1,000人のユーザが設定されている。
- フローAから申請された案件の件数が1万件である。
IM-Workflowは案件の申請時に、表示制限用の権限テーブルに、フローに設定された参照者ユーザ分のレコードを登録しています。この仕様のため、テーブルのレコード数は、「案件 × 1案件あたりの参照ユーザ数」となり、申請のたびに参照者ユーザ数分のレコードが増加します。* 「参照」の仕様については「 IM-Workflow 仕様書 」を参照してください。
解決方法¶
以下の対策が考えられます。
インデックスを利用したチューニングを行う。
ご利用のデータベースのインデックスアドバイザ等を利用して、最適なインデックスを設定してください。チューニング分析対象のテーブル候補は以下の通りです。以下のテーブルに対してのインデックス設定を検討してください。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);管理者用の参照一覧を利用する。
管理者用の参照一覧は以下の特徴があります。お客様業務に適用できるか検討の上、利用してください。
「ワークフロー管理者」メニューの参照
- 案件の削除ができます。
- すべての種類の案件操作ができます。
- 案件に対して参照者を追加できます。
「ワークフロー運用管理者」メニューの参照
- 「管理グループ設定」で設定したフローの案件のみの参照ができます。
- すべての種類の案件操作ができます。
「ワークフロー管理者」メニュー、「ワークフロー運用管理者」の参照一覧は、表示制限用の権限テーブルを利用していません。したがって、本項で述べた原因による遅延は発生しません。参照者の数を減らす。
参照者の数を減らすことで、データ件数の増大による遅延を解消できる可能性があります。インデックスでの対応と合わせて検討してください。
これから申請する案件の参照者の数を減らす。
参照者をフローから外す: 「フロー定義」 - 「バージョン」 - 「編集」 - 「参照者」タブのクリアで、フローから参照者を削除してください。
参照者として組織やパブリックグループ配下のユーザを減らす:
参照させたいユーザのみを参照者にする。
- (案)参照させたいユーザのみが所属するロールを参照者としてフローに設定する。
申請済み案件の参照者の数を減らす。
- 「ワークフロー管理者」メニューの「参照」 - 「操作」 - 「参照者タブ」のクリアで、案件から参照者を削除してください。
* 複数案件分の削除操作が必要です。
コラム
参照者を一括で削除したい場合は、SQLを利用してテーブルデータを直接削除してください。削除用のSQLは以下です。ただし、テーブルへの直接アクセスは製品としてサポートしておりません。お客様の責任で実施を判断してください。DELETE FROM imw_t_actv_matter_handle_user; DELETE FROM imw_t_cpl_matter_handle_user;完了案件の参照が不要であれば、アーカイブを実行して参照対象のレコード数を減らす。
アーカイブ機能は、完了案件をアーカイブして過去案件テーブルに移行する機能です。完了案件の数と参照者の数を減らすことで、データ件数の増大による遅延を解消できる可能性があります。インデックスでの対応を合わせて検討してください。アーカイブ用のリスナを実装することで、過去案件を参照できるユーザを制御できます。過去案件を参照できるユーザを制限することで参照者のレコードを減らすことができます。以下のアップデートを適用することで、一覧画面の表示に関するパフォーマンスが改善します。
iWP / iAF の場合
- 対象外
intra-mart Accel Platform の場合
2015 Summer(Karen) IM-Workflow 8.0.11 以降