connect for Pleasanterのタイムアウト保護ついて説明します。
概要
- Pleasanterのサーバースクリプトで設定されてるタイムアウト値を超えた場合は500エラーが発生します。
- 「connect for Pleasanter」は、サーバースクリプトで外部サービスからのデータ取得>マッピング処理>Pleasanterへのデータ更新を上記のタイムアウト値以内に終わらせる必要があります。
- タイムアウトエラー対策として、データ取得とデータ更新の件数を制御します。
- データ取得は、CFPサービス管理サイトの「リクエスト情報」に定義するページ数(件数)とそのページ数を何回行うかを決めるためCFPマッピング管理サイトの「最大取得ページ数」を設けています。なお、外部サービスのAPI仕様ではリクエスト情報では指定できないケースもあります。
- データ更新は、CFPマッピング管理サイトの「更新処理件数」で指定します。
- 外部サービスのAPI仕様とPleasanterを運用するWeb/DBサーバーの仕様を把握した上で上記のパラメータでタイムアウトエラーにならないようにチューニングとテストが必要です。
処理時間の確認
- まずは、「connect for Pleasanter」で実際にサイト連携を行ってください。
- CFPマッピング管理サイトの「前回処理時間」に実際にかかった処理時間を確認することができます。
- Total:処理時間
- Fetch:サイトからデータ取得した処理時間(取得件数)
- Upsert:上記データをPleasanterに更新(追加・更新)した処理時間(最大更新件数)
- Timestamp:処理終了日時
[Total] 5.22s / [Fetch] 1.85s (9 records) / [Upsert] 2.90s (Limit: 100) / [Timestamp] 2026/03/26 18:26:58 (JST)
- 運用環境のスペックによりますが、上記例の1件当たりの処理時間は以下の通りです。
- Total:0.58秒/件 >>> 9.7分/1,000件、96分/10,000件
- Fetch:0.21s/件 >>> 3.4分/1,000件、34分/10,000件
- Upsert:0.32s/件 >>> 5.4分/1,000件、53分/10,000件
タイムアウト対策
「オンデマンド同期」と「スケジュール同期」の運用要件を前提に以下のチューニングを行います。
外部サービスAPI仕様確認
- 1回のAPIリクエストで取得できるデータ(ページ)件数を確認
- リクエストパラメータに取得データ(ページ)件数があるか確認
Pleasanter運用環境確認
- WEB/DBサーバーのスペックを確認
- Webサーバーのタイムアウト値を確認
- General.jsonのBulkUpsertMaxの確認
初期データインポート
- 外部サービスの同期データがある程度大量にある場合はPleasanterのインポート機能で予め取り込んでおく
- またはスケジュール同期・オンデマンド同期でインポートしておく
- オンデマンド同期の結果画面およびCFPマッピング管理サイトの前回処理時間に処理時間が表示・保存されているので以下のパラメータのチューニングの参考にしてください
スケジュール同期周期設定
- 運用要件を踏まえた周期で設定
サーバースクリプト「タイムアウト値」設定
- オンデマンド同期用サイトのconnect for Pleasanter呼び出し用サーバースクリプトのタイムアウト値を適切に設定(2~10分)
- WEBサーバーのセッションタイムアウト値以内で設定
- スケジュール同期のテナントの管理>connect for Pleasanter呼び出し用サーバースクリプトのタイムアウト値を適切に設定
- 周期×90%、例えば日次周期なら22時間を推奨
- 外部サービスのAPIコール数上限を確認
CFPサービス管理サイト「リクエスト情報」設定
- 外部サービスAPI仕様でリクエストパラメータとデータ(ページ)件数を設定
CFPマッピング管理サイト「最大取得ページ数」設定
- 外部サービスAPI仕様でリクエストパラメータとデータ(ページ)件数を考慮し設定
CFPマッピング管理サイト「更新処理件数」設定
- Pleasanter運用環境と上記データ(ページ)件数取得時間を考慮し設定
- General.jsonのBulkUpsertMax以下としてください
履歴更新の無効化
- テーブルの管理>エディタ>自動バージョンアップ>規定・常時を無効に設定
- 履歴が必要な場合はそのままにしてください
マッピング項目の削減
- マッピング項目が減らせないか検討ください
DBインデックスの追加
- SQL Serverの例
-- 対象のSiteIdが '12345' で、キー項目が 'ClassA' の場合
CREATE NONCLUSTERED INDEX IX_Results_SiteId12345_ClassA
ON Results (ClassA)
WHERE SiteId = 12345;
- PostgreSQLの例
-- 対象のSiteIdが '12345' で、キー項目が 'ClassA' の場合
CREATE INDEX "IX_Results_SiteId12345_ClassA"
ON "Results" ("ClassA")
WHERE "SiteId" = 12345;
その他
- 拡張SQLの実装
- DBサーバーのパフォーマンスチューニング
- リソースの使用状況を確認し、WEBサーバー・DBサーバーのスケールアップ
お問い合わせ
「connect for Pleasanter」のデモや製品に関するお問合せはお気軽にご相談ください。
