Heroku Connect の診断
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年02月24日(金)
Table of Contents
Heroku Connect は、Salesforce 組織や Postgres データベースと多様な方法で対話します。つまり、同期操作のパフォーマンス、信頼性、正確性に影響を与える可能性のあるさまざまな要因が存在します。
Heroku には、接続の現在の状態を検査したり、基本的な操作を実行したりするための CLI プラグインが用意されています。これらの操作の 1 つとして、connect:diagnose
コマンドを使用して、ユーザーに影響を与える可能性のある一般的な問題を識別するためのいくつかの単純な診断を実行する機能があります。
$ heroku connect:diagnose --verbose
Diagnosing connection... done
=== Connection: protected-ridge-4963
GREEN: Salesforce API Version
GREEN: Number of Mappings
GREEN: Database Plan
=== Account
GREEN: Calculated Fields
GREEN: Upsert Field
GREEN: Binary Fields
GREEN: Number of Fields
GREEN: Required Fields
結果は、赤色、黄色、または緑色のいずれかになります。赤色の結果は、データのフローに関する問題の原因になっている可能性のあるエラーを示します。黄色の結果は、アプリケーションによっては実際の問題になっている場合がある警告を示します。赤色の結果と黄色の結果のどちらにも、その問題に関する追加の詳細のほか、詳細なドキュメントへのリンク (該当する場合) が含まれます。緑色の結果は、既知の問題がないことを示し、そのため追加の詳細は提供されません。
接続のチェック
チェック: Salesforce API のバージョン
Salesforce はその API の機能を定期的にアップグレードしますが、Heroku Connect では、データの処理方法での一貫性を確保するために、リリースされた新しいバージョンが自動的に使用されるわけではありません。非常に古い API バージョンを使用している場合は、より新しい API バージョンで接続を再作成することを考慮してください。
チェック: マッピングの数
Heroku Connect のパフォーマンスは、接続に追加されるマッピングの数が増えるに従って低下します。これは、Salesforce との間の読み取りや書き込みのほか、ダッシュボードの応答性に影響を与えます。
チェック: Heroku Postgres
Heroku Connect の通常の操作やカスタマーサポートは、Heroku Postgres でのみ使用可能なサービスに依存しています。その他のデータベースプロバイダーはサポートされていません。
チェック: データベースプラン
Essential 層の Postgres データベースは、Heroku Connect の標準的な使用法には性能不足です。enterprise
または danketsu
Heroku Connect プランを使用している場合は、"-4" 以上の Heroku Postgres プラン (例: “Standard-4”) を使用してください。
チェック: データの位置
Heroku Connect は世界中の複数のリージョンで動作します。これはアプリとそのデータベースが、データを同期する接続と同じリージョンに配置されている場合に最適に動作します。接続とデータベースを異なるリージョンに配置すると、データの転送に大幅な遅延が発生する場合があります。
チェック: View All (すべてを表示)/Modify All (すべてを変更) アクセス許可
Heroku Connect は、承認された Salesforce ユーザーが、マッピングされた各オブジェクトに対する 「View All」 (すべてを表示) および (必要に応じて) 「Modify All」 (すべてを変更) アクセス許可を持っている場合に最適に動作します。これらのアクセス許可がない場合、Salesforce へのクエリは長い時間がかかったり、不完全なデータを返したりする可能性があります。
詳細情報: Read errors (読み取りエラー)
チェック: 設定されているログドレイン
アプリまたは Shield Private Space のどちらかに対してロギングアドオンまたはログドレインが設定されている場合は、Heroku Connect のログを監視して分析できます。履歴ログをログ履歴の制限に達することなく表示できるようにロギングを設定することを強くお勧めします。
マッピングのチェック
チェック: バイナリフィールド
バイナリフィールドは Heroku Connect でサポートされていないため、想定どおりに動作しません。
詳細情報: Base64 binary fields (Base64 バイナリフィールド)
チェック: 計算済みフィールド
計算済みフィールドは Heroku Connect でサポートされていないため、想定どおりに動作しません。
詳細情報: Cross-object formula and roll-up summary fields (クロスオブジェクト数式およびロールアップサマリーフィールド)
チェック: フィールドの数
Heroku Connect は Salesforce からデータをプルするとき、レコード全体を一度に読み取ります。多くのフィールドがマッピングされると、パフォーマンスが大幅に低下することがあります。マッピングされるフィールドの数をオブジェクトあたり 100 フィールド未満にすることをお勧めします。
チェック: 必須フィールド
Heroku Connect がデータを Postgres から Salesforce に適切に挿入するために必須のフィールドがいくつかあります。Heroku Connect でいずれかの必須フィールドをマッピングできなかった場合は、たとえば Apex コードで “挿入前” トリガーを使用して、Salesforce でそれらのフィールドにデータが確実に入力されるようにする必要があります。
チェック: 一意識別子
Postgres から Salesforce にデータを書き込む場合、この 2 つのシステムの間でデータを確実に正しく照合できるようにするには一意識別子が必要です。一意識別子は、Salesforce で一意の外部 ID フィールドとして定義する必要があります。
詳細情報: Unique identifier (一意識別子)
チェック: 大きなテキストエリアフィールドの数
Heroku Connect は Salesforce からデータをプルするとき、レコード全体を一度に読み取ります。これに複数の大きなテキストエリアフィールド (長いテキスト領域フィールドやリッチテキスト領域フィールドなど) が含まれている場合は、パフォーマンスが大幅に低下することがあります。
詳細情報: Minimize the Size of the Mapped Object (マップされたオブジェクトのサイズの最小化)
チェック: 合成フィールド
合成フィールドは Heroku Connect によって作成され、Salesforce にデータを書き込むときにオブジェクトを参照するために使用されます。合成フィールドは読み取り専用のマッピングには必要ないため、一般にマッピングされません。読み取り専用と読み書き可能の間で切り替える必要があるか、または切り替えが予測される場合は、マッピングできます。
チェック: Salesforce のフィールド変更
マッピングされたフィールドの定義が Salesforce で変更された場合は、対応する変更をデータベースに加える必要があります。Edit Mapping (マッピングの編集) 画面で、Heroku Connect は変更されたフィールドをチェックし、変更がある場合は警告を表示します。変更は次のいずれかです。
- テキストフィールドの長さの増加 – Heroku Connect はデータベーステーブルを変更して、フィールドの長さを増やします。
- その他のすべての変更 – これらは安全でないとみなされるため、ユーザーは次のことを行う必要があります。
- マッピングを編集し、フィールドを選択解除し、マッピングを保存することによって、そのフィールドをマッピングから削除します。
- マッピングを編集し、フィールドを選択し、マッピングを保存することによって、そのフィールドをマッピングに再び追加します。
チェック: データベースのフィールド変更
Heroku Connect は、同期するテーブルのスキーマを管理することを想定しています。Heroku Connect 以外で追加、削除、または変更されたフィールドはすべて、Heroku Connect が想定する状態に復元する必要があります。ダッシュボードを使用してこの問題を修正するには、Edit Mapping (マッピングの編集) 画面に移動します。Heroku Connect は、次の変更をチェックします。
- 追加または削除されたフィールド – マッピングの保存時、Heroku Connect はデータベーステーブルを自動的に変更します。
- 変更されたフィールド – ユーザーは変更されたフィールドを削除した後、再び追加する必要があります。
- マッピングを編集し、フィールドを選択解除し、マッピングを保存することによって、変更されたフィールドをマッピングから削除します。
- マッピングを編集し、フィールドを選択し、マッピングを保存することによって、そのフィールドをマッピングに再び追加します。
チェック: IsArchived フィールド
タスクやイベントのオブジェクトには、これらのオブジェクトのアーカイブ (ビューから削除するがシステムから完全に削除しない) を許可する IsArchived フィールドがあります。ただし、これが実行されても、Salesforce はレコードを変更済みとしてマークしません。その結果、Heroku には、IsArchived フィールドへの変更を確実に検出する方法がありません。Heroku が IsArchived フィールドの値への更新を受け取るのは、このレコード上の他の何かも同時に変更された場合のみであるため、このフィールドに Salesforce と Heroku で異なるデータが含まれることは非常に簡単です。
チェック: ポリモーフィック外部 ID
Heroku Connect は、Salesforce が独自の ID を発行する前に、外部 ID を使用して Postgres 内のレコードを一意に識別します。関連するオブジェクトでレコードを正確に参照するために、Heroku Connect は、その ID がどのオブジェクトを参照するかを把握している必要があります。そのため、複数のタイプのオブジェクトを参照できるポリモーフィックフィールド (WhatId や WhoId など) を Heroku Connect で外部 ID として使用することはできません。
チェック: 最大レコードサイズ
Salesforce にデータを書き込む場合、関連する API には 1 つのレコードで提供できるデータ量に対する制限があります。データがこの制限を超えると、Heroku Connect は Salesforce へのレコードの書き込みに失敗します。この制限はレコード内の実際のデータに基づいているため、このチェックでは単純に、API の制限を超える十分なデータが含まれている可能性のあるマッピングがチェックされます。
チェック: クエリサイズ
Heroku Connect は Salesforce からデータを取得する場合、必要以上にデータが転送されることを回避するために、ユーザーがマッピングしたフィールドのみを含む SOQL クエリを発行します。多数のフィールド、または非常に長いフィールド名を含むマッピングの場合、その SOQL クエリは Salesforce API によって課された制限を超える可能性があります。
チェック: 合成フィールド/一意識別子の一致
一意識別子が設定されている場合は、合成フィールドをマッピングするときに、関連するオブジェクトのフィールドもそのオブジェクトの一意識別子として設定する必要があります。これにより、そのフィールドを外部 ID として使用して Postgres 内の複数のレコードにデータを入力したり、Salesforce ですべてのレコードを適切に調和させたりできるようになります。
チェック: Bulk API でサポートされていない sObject
Heroku Connect では、Salesforce Bulk API を使用して、より効率的に大量のデータを処理します。ただし、すべての sObject が Bulk API でサポートされているわけではありません。Heroku Connect では、Bulk API を使用できない場合でも、Salesforce SOAP API を使用してオブジェクトの同期を試みますが、サイズの大きなバルクデータボリュームに関する既知の問題があります。Salesforce のナレッジ記事に、Bulk API でサポートされていない一部のオブジェクトの一覧があります。