IBM Business Process Manager...•注意:Process Center...

16
© 2017 IBM Corporation IBM Business Process Manager 連載:事例に学ぶパフォーマンスの向上 第9回 BPMDBの運用

Transcript of IBM Business Process Manager...•注意:Process Center...

Page 1: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

© 2017 IBM Corporation

IBM Business Process Manager

連載:事例に学ぶパフォーマンスの向上

第9回 BPMDBの運用

Page 2: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

2Page © 2017 IBM Corporation

概要

BPMのデフォルト構成では、以下3種類のデータベースを使用します。

• CMNDB – 各種コンポーネントが共通で使用するデータベース。

• BPMDB – BPMNアプリケーションのスナップショットやインスタンス・データが格納される。

• PDWDB – Performance Data Warehouse用データベース。トラッキング・データが格納される。

中でもBPMDBは特にアプリケーション開発や実行と密接な関係にあり、BPMのパフォーマンスを考える上で重要なコンポーネントです。

本ドキュメントでは、アプリケーション開発・実行時にどのようにBPMDBが使用され、どのような運用を行うべきかについて説明します。

Page 3: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

3Page © 2017 IBM Corporation

BPMアプリケーションとBPMDBの関係(スナップショット)

BPMのアプリケーション開発は、Process Designerを用いてProcess Centerに接続しながら行い、開発物はBPMDB内のリポジトリーにて保管、管理されます。

Process Centerではスナップショットと呼ばれるバージョン管理機能を提供していますが、これを適切に管理・運用しないと、開発作業が進むにつれてデータ容量が増大し、開発物の参照や保存に時間がかかるなどのパフォーマンス劣化を引き起こす原因となります。また、Process Serverにおいてもデプロイされるスナップショット数が多いとパフォーマンス劣化につながるケースがあります。詳細については「第2回 スナップショットの運用」の記事をご参照下さい。

BPMの各開発物、スナップショットの実体はBPMDBに格納されているため、データベース運用の観点でもこの認識を持つことは重要です。

BPM

Process Designer

Process Center

BPM

Process Server

Process Portal

Measure

Improve

Deploy

開発環境 実動環境

Process Portal

Design

Process App [A]Snapshot 1.0

Process App [B]

BPMDB

Snapshot 1.1 Snapshot 1.2

Snapshot 1.0 Snapshot 1.1

Snapshot 1.2

Process App [A]

Process App [B]

BPMDB

Snapshot 1.2

Snapshot 1.2

スナップショットの運用・管理が必要

スナップショット

要cleanup!

Page 4: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

4Page © 2017 IBM Corporation

BPMアプリケーションとBPMDBの関係(インスタンスとタスク)

BPMDBには、スナップショット以外にも、プロセス・インスタンスやタスクのデータが保持されます。完了したプロセス・インスタンス、タスクの情報は自動的には削除されないため、BPMDBにはそれらのデータが蓄積され続けることになり、定常的に容量が増大し続ける可能性があります。容量が増大するとディスク領域の圧迫、パフォーマンス劣化の原因となるため、完了したプロセス・インスタンスなどの不要なデータは定期的に削除するハウスキープ運用が必要です。

Process App [A]

BPMDB

✔✔

✔完了

✔アクティブ

BPM

Process Server

Process Portal

✔✔✔✔

完了✔✔✔✔

完了

✔アクティブ

✔ ……

完了プロセス・インスタンスのクリーンアップ運用が必要

完了プロセス・インスタンス要cleanup!

Page 5: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

5Page © 2017 IBM Corporation

【参考】BPMアプリケーションのライフサイクルと

BPMDBのインタラクション

Process Portal

運用スクリプト

BPMDB

完了プロセス・インスタンスの削除

スナップショットのアーカイブ・削除

スナップショットのデプロイ

プロセス起動

運用スクリプト

プロセスの開始(インスタンス化)

プロセスの完了(インスタンスの終了)

Process Server

運用スクリプト

::

タスク実行

プロセス実行

インスタンス化

インスタンス・レコードの削除

スナップショット・レコードの削除

スナップショット・レコードの作成

スナップショット・レコードの取得インスタンス・レコードの作成

インスタンス・レコードの更新

::

直接BPMのデータベースを操作することはサポートされていないため、必ずProcess PortalやProcess AdminなどのUI、コマンド、またはAPI等を経由してDBへアクセスします。

(※)スナップショットを削除するには、そのスナップショットに関連する実行中プロセス・インスタンスが存在しないことが条件です

Page 6: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

6Page © 2017 IBM Corporation

BPMDBの定期クリーンアップ運用

Process CenterおよびProcess Serverにおいて、BPMDBの定期的なクリーンアップ運用として考慮すべき主な項目をまとめると、以下の通りです。BPMDBの主要なテーブルの適正サイズの目安と、クリーンアップ方法について、以降のページで解説します。

Process Center Process Server

開発時 名前付きスナップショット、名前なしスナップショットが生成される

<クリーンアップ項目>・名前付きスナップショット・名前なしスナップショット

N/A

デプロイ時 N/A デプロイ毎にスナップショットが生成される

<クリーンアップ項目>・名前付きスナップショット(旧バージョン)※関連の実行中インスタンスが存在しないことが前提

テスト/実行時 インスタンスが生成される

<クリーンアップ項目>・完了プロセス・インスタンスおよびタスク

インスタンスが生成される

<クリーンアップ項目>・完了プロセス・インスタンスおよびタスク

Page 7: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

7Page © 2017 IBM Corporation

BPMDBの主要テーブルの行数とサイズの調べ方(1/2)

前述の通り、BPMDBにデータが蓄積され続けると、ディスク容量の問題や、データベース照会への応答が遅くなるなどの問題が発生する可能性があります。従って、データ量が多いテーブルを調べ、不要なデータは定期的なクリーンアップ運用に組み込む必要があります。

ディスク容量の解放とパフォーマンス向上のために、まずは以下のSQLにてMB(megabytes)単位で行サイズが大きいテーブルを確認します。

DB2:

--コマンド1:全てのテーブルの行数をカウント

SELECT tabname as "Table Name", card as "Row Count" FROM syscat.tables order by tabname;

--コマンド2:テーブルのサイズをMB単位で確認

SELECT TABSCHEMA as "Schema", TABNAME as "Table Name", SUM(DATA_OBJECT_P_SIZE)/1024 as "Table Physical size in MB", SUM(INDEX_OBJECT_P_SIZE)/1024 as "Index Size", SUM(LONG_OBJECT_P_SIZE)/1024 as "Physical disk for long data types", SUM(LOB_OBJECT_P_SIZE)/1024 as ”Physical disk LOB fields", SUM(XML_OBJECT_P_SIZE)/1024 as "XML physical data size" FROM SYSIBMADM.ADMINTABINFO GROUP BY TABSCHEMA, TABNAME;

Oracleの場合、こちらを参照ください。

Page 8: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

8Page © 2017 IBM Corporation

SQL実行結果の例です。以下の例では、LSW_PO_VERSIONS表に多くのデータが蓄積されていることが分かります。

データ容量が多いテーブルをどのようにクリーンアップするかについて、以降のページで説明します。

Table Name Row Count

LSW_PO_VERSIONS 512729

LSW_RESOURCE_BUNDLE_KEY 234611

BPM_TASK_INDEX_JOB 121231

SYSCOLDIST 110490

LSW_PO_DEPENDENCY 71231

LSW_PROCESS_ITEM 41454

LSW_PROCESS_LINK 23402

LSW_PO_METADATA 23186

LSW_PO_REFERENCE 19268

表1:全てのテーブルの行数をカウント

Schema Table NameTable Physical

size in MB Index Size

Physical disk for long data

typesPhysical disk LOB fields

XML physicaldata size

DB2INST1 LSW_PO_VERSIONS 185 412 0 142 0

DB2INST1 LSW_RESOURCE_BUNDLE_KEY 61 31 0 6 0

DB2INST1 LSW_PROCESS_ITEM 21 12 0 4 0

DB2INST1 BPM_ASSET_CACHE_SAVE_INSTR_BK 19 2 0 0 0

DB2INST1 LSW_PO_DEPENDENCY 17 36 0 0 0

DB2INST1 BPM_TASK_INDEX_JOB 15 23 0 0 0

DB2INST1 LSW_PROCESS_LINK 14 5 0 4 0

DB2INST1 LSW_SNAPSHOT 13 16 0 5 0

SYSIBM SYSCOLDIST 13 10 0 0 0

DB2INST1 BPM_COACH_VIEW_CONFIG_OPTION 8 4 0 4 0

DB2INST1 LSW_BPD_INSTANCE_DATA 8 2 0 4 0

DB2INST1 LSW_PROCESS 8 5 0 239 0

DB2INST1 LSW_BPD 7 4 0 1766 0

DB2INST1 LSW_TASK_EXECUTION_CONTEXT 7 2 0 4 0

BPMDBの主要テーブルの行数とサイズの調べ方(2/2)

表2:テーブルのサイズをMB単位で確認

Page 9: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

9Page © 2017 IBM Corporation

スナップショット

• LSW_SNAPSHOT、LSW_PO_VERSIONSおよびLSW_FAVORITES表は、スナップショットに関連する表で、BPMSnapshotCleanupコマンドでクリーンアップできます。 アプリケーション開発者に確認して、使用されていないバージョンのスナップショットをアーカイブし削除する運用を実施してください。

• 注意:このコマンドの実行に必要なすべてのFixをインストールしてください。

• 注意:Process Center で操作が実行されておらず、Process Designer と Process Center 間に接続がない場合に、このコマンドを実行します。推奨:LSW_SNAPSHOT表の行数が10万行を超える場合、またはLSW_PO_VERSIONS表の行数が200万行を超える場合、クリーンアップが必要になります。なお、BPM 8.5.0.1以降のProcess Centerでは、100Custom.xmlの設定で名前なしスナップショットを自動削除できます。(詳しくは「第2回 スナップショットの運用」を参照ください)

BPMDBの定期クリーンアップ運用(スナップショット)

Page 10: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

10Page © 2017 IBM Corporation

インスタンスとタスク

• インスタンスに関連するLSW_BPD_INSTANCE* (例:LSW_BPD_INSTANCE、LSW_BPD_INSTANCE_DATA)表と、タスクに関連するLSW_TASK* (例:LSW_TASK、LSW_TASK_ACTION)表の行数は多くなる傾向にあります。

• また、LSW_TASK_EXECUTION_CONTEXT表にはタスクの全データが含まれているため、サイズが大きくなる傾向にあります。アプリケーション内で扱っている変数が少ない場合は10KB程度と小さいですが、変数が多く、かつ多くの複雑なビジネス・オブジェクトが格納されている場合は簡単に1MBや5MBの大きさになります。

• これらの表は、BPMProcessInstancesPurgeコマンドでクリーンアップできます。

• 推奨:完了したプロセス・インスタンスがインスタンス全体の50%以上を占める場合、これらのインスタンスを削除する必要があると考えられます。定時に一定の期間経過した完了インスタンスを削除する運用をお勧めします。(例:毎日0時に、30日以上前に完了したインスタンスを削除)

BPMDBの定期クリーンアップ運用(インスタンスとタスク)

Page 11: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

11Page © 2017 IBM Corporation

ドキュメント

• BPM 8.0.xとその前のバージョンでは、内部ドキュメント・ストアを使用すると、ファイルはLSW_BPD_DOCUMENTS表に格納されます。BPM 8.5以降では、主にCONTENT表に格納されます。これらのドキュメントはインスタンスに関連付けられており、BPMProcessInstancesPurgeでのみクリーンアップが可能です。

永続サブスクリプション

• UCAの永続サブスクリプションが格納されるLSW_DUR_MSG_RECEIVEDおよびLSW_INST_MSG_INCL表は、BPMDeleteDurableMessagesコマンドでクリーンアップできます。

BPMDBの定期クリーンアップ運用(その他)

Page 12: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

12Page © 2017 IBM Corporation

その他パフォーマンス維持のための運用(RUNSTATS、REORG)

時間の経過に伴い、データベースへの挿入、更新、削除を繰り返すと、応答時間が悪化することがあります。データベースのパフォーマンスを維持するため、BPMDBのクリーンアップに伴い、定期的に各テーブルの統計情報収集(RUNSTATS)、再編成(REORG)を実施するのが望ましいです。以下にクリーンアップ対象ごとに関連するテーブルを示します。

スナップショット

• 主にLSW_SNAPSHOT表、LSW_PO_VERSIONS表、LSW_FAVORITES表

• また、スナップショットごとに作成されたグループとチームの削除がある時、LSW_USR*表、LSW_GRP*表も関連

プロセス・インスタンス、タスク

• LSW_BPD_*表、LSW_TASK*表、およびLSW_USR*表、LSW_GRP*表

ドキュメント

• BPM V8.0以前の場合、LSW_BPD_DOCUMENTS表

• BPM V8.5以降の場合、主にCONTENT表

永続サブスクリプション

• LSW_DUR_MSG_RECEIVED表、LSW_INST_MSG_INCL表

Page 13: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

13Page © 2017 IBM Corporation

RUNSTATS実行タイミングの注意点

RUNSTATSはデータ・アクセスの最適化を行なうための運用作業で、表のデータが大きく変化した場合に、統計情報を最新の状態に更新するために実行します。

ただし、レコード件数が 0 件、もしくは実態を反映しない少数のレコードしかないタイミングでRUNSTATS が実施されると逆効果になる可能性があります。レコード件数が 0 件として登録されると、実際には多くのレコードが格納されている表であるのに小さい表であると認識してしまい、不適切なアクセス・プランを選択してしまう可能性があります。(例:実際には索引を利用した方が良い状況にもかかわらず、オプティマイザーが統計情報を見て、その程度のデータ量であれば索引よりも全レコードをスキャンするほうがコストがかからない、と判断してしまうなど)

従って、前述のクリーンアップ対象となる表のRUNSTATS実行タイミングについては注意が必要です。

例えば、日次のクリーンアップ運用により夜間のレコード数は0件になるものの、ピーク時の処理中には多数レコードが生成されるような表がある場合、メンテナンス時間帯ではなくデータが格納されているタイミングでRUNSTATSを実施する必要があります。その場合、リアルタイム統計収集の機能を利用するなどして、日中にデータが入った状態でRUNSTATSが実行されるようにしてください。

Page 14: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

14Page © 2017 IBM Corporation

DB2におけるAUTO_RUNSTATS利用時の注意点

AUTO_RUNSTATSを、CMNDBに対して有効にする際は注意が必要です。

BPMのメッセージング・エンジン(ME)用のデータ・ストアとしてDB2を使用した際、デフォルトの動作としてME稼働中はCMNDBのSIBOWNER表に対してロックを保持し続けます。[1]

この状態でRUNSTATSを実行すると、MEのロックによってRUNSTATSがロック待ちとなり、処理が完了しません。このロック待ちが要因となりデータベースのログがフルとなる事象も報告されています。

不要なロック待ちを避けるためにも、以下対応を実施いただくことを強くお勧めします。

• SIBOWNERテーブルをAUTO_RUNSTATSの対象から外す(方法としては以下のいずれか)

– DB構成パラメーター「AUTO_RUNSTATS」(あるいはその上位の「AUTO_MAINT」か「AUTO_TBLMAINT」)をOFFに設定する

– SIBOWNERテーブルをAUTO_RUNSTATSの対象から除外するように自動保守ポリシーを構成する

• 手動でもME稼働中のRUNSTATSは実行しない

• 「長期実行ロックの制限」をONに設定し、SIBOWNER表で長期実行ロックを保持しないよう制限する(WAS V8.5以降) [2]

類似のTechnoteも出ておりますので、そちらもご参照ください。[3][4]

[1] データ・ストアの排他的アクセスhttps://www.ibm.com/support/knowledgecenter/ja/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/cjm0450_.html

[2]データ・ソースを使用するためのメッセージング・エンジンのデータ・ストアの構成

https://www.ibm.com/support/knowledgecenter/ja/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/tjm0045_.html

[3] The default messaging provider for WebSphere Application Server reports SQL0964C errors indicating that DB2 Version 9.5 database logs are fullhttp://www-01.ibm.com/support/docview.wss?uid=swg21377796

[4] DB2 Health Monitor can cause Log Full Errors: SQLCODE: -964, SQLSTATE: 57011

http://www-01.ibm.com/support/docview.wss?uid=swg21452323

Page 15: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

15Page © 2017 IBM Corporation

パフォーマンス向上策:LSW_PO_VERSIONS表の索引追加

「第7回 BPMのキャッシュ」ではブランチ・キャッシュを適切にチューニングする方法をご紹介しましたが、それに加えてLSW_PO_VERSIONS表の索引を最適化することも重要です。

以下の索引を作成することで、パフォーマンス向上が期待できます。

CREATE INDEX IDXA_PO_VERSIONS ON lsw_po_versions(PO_TYPE,BRANCH_ID,START_SEQ_NUM,END_SEQ_NUM,PO_VERSION_ID) COMPUTE STATISTICS;

CREATE INDEX IDXB_PO_VERSIONS ON lsw_po_versions (BRANCH_ID,END_SEQ_NUM) COMPUTE STATISTICS;

CREATE INDEX IDXC_PO_VERSIONS ON lsw_po_versions(BRANCH_ID,START_SEQ_NUM,END_SEQ_NUM) COMPUTE STATISTICS;

CREATE INDEX IDXD_PO_VERSIONS ON lsw_po_versions(PO_VERSION_ID,PO_TYPE,BRANCH_ID,START_SEQ_NUM,END_SEQ_NUM);

Page 16: IBM Business Process Manager...•注意:Process Center で操作が実行されておらず、Process Designer とProcess Center 間 に接続がない場合に、このコマンドを実行します。

16Page © 2017 IBM Corporation

参考情報

1. IBM Business Process Manager V8.5 Performance Tuning and Best Practices

http://www.redbooks.ibm.com/redbooks/pdfs/sg248216.pdf

2. Improve IBM BPM performance with an IBM DB2 database

https://www.ibm.com/developerworks/bpm/bpmjournal/1509_volz1-trs/1509_volz1.html

3. Tuning branch and snapshot cache sizes in IBM Business Process Manager

https://www.ibm.com/developerworks/bpm/library/techarticles/1404_booz/1404_booz.html

4. How do I know the when the BPM databases should be cleaned up?

https://developer.ibm.com/answers/questions/193115/how-do-i-know-the-when-the-bpm-databases-should-be.html

5. After deleting content in IBM BPM what tables should be reindexed?

https://developer.ibm.com/answers/questions/193035/after-deleting-content-in-ibm-bpm-what-tables-shou/?smartspace=bpm

6. How do I find the count and size in MB of each table in the BPM database?

https://developer.ibm.com/answers/questions/192529/how-do-i-find-the-count-and-size-in-mb-of-each-tab/?smartspace=bpm