一時テーブルの肥大化によりキャンペーンワークフローが停止する

この記事では、ワークフローの一時テーブルがデータベースから削除されず、プラットフォームが全体的に遅くなる理由を説明します。

説明 description

ハイブリッド顧客(オンプレミスのマーケティングインスタンス)では、一時的なテーブルの過度な使用により、Campaign ワークフローが常に停止し、データベースの使用率が高くなり、ワークフローが中断するという問題が発生していました。

データベースのクリーンアップのテクニカルワークフローが実行されていましたが、一時テーブルが必要に応じてドロップされませんでした。

解決策 resolution

詳細なモードでクリーンアップワークフローを実行しても、明確な根本原因が得られず、R&Dが関与していました。 お客様には、(Campaign DB ユーザーとして) psql データベースで次のコマンドを実行し、出力を共有するように求められました。

  1. ワークフローの状態:
    SELECT iWorkflowId, sInternalName, sLabel, iState FROM XtkWorkflow WHERE iWorkflowId IN (id1, id2, id3);

  2. 接続スキーマ / search_path:
    SELECT current_user, current_schema (), current_setting ('search_path') AS search_path;

  3. スキーマごとのワークフロー作業テーブル:
    SELECT schemaname, COUNT AS table_count FROM pg_tables WHERE tablename LIKE 'wkf%' GROUP BY schemaname ORDER BY table_count DESC;

結果を共有した後、顧客データベースのセットアップでは、データベースのログインユーザー名UserNameABCとは異なるカスタムスキーマ「XYZ」が使用されていることが確認されました。 具体的:

current_user = UserNameABC
current_schema () / search_path = XYZ

すべてのワークフロー一時テーブルがスキーマ「XYZ」にありました。

標準設定では、すべてのテーブルが公開スキーマに格納されます。 db クリーンアップワークフローでは、データベースのログイン名(UserNameABC)およびパブリックから派生したスキーマをフィルタリングして、ドロップするテーブルを一覧表示します。 テーブルが「XYZ」スキーマにあったため、クリーンアップでそれらを見つけることはなく、ワークフローテーブルを削除することはありませんでした。

この問題を解決するために、お客様はServerConf.xmlの< dbcnx>要素に対してdbSchema属性を編集するように求められました

< dbcnx … dbSchema="XYZ" …>

次に、nlserver/apache restartを実行し、クリーンアップワークフローを実行します。

recommendation-more-help
3d58f420-19b5-47a0-a122-5c9dab55ec7f