SOQL(Salesforce Object Query Language)クエリは、Salesforce Sandboxのセットアップと管理方法に固有のいくつかの技術的および運用的要因により、生産環境と比較して、サンドボックス環境でより速く実行される場合があります。これらの要因を理解するには、サンドボックスと生産環境に固有のデータボリューム、インデックス、キャッシュ、リソースの競合、システムの最適化の違いを掘り下げる必要があります。
###データのボリュームと複雑さ
SOQLクエリがサンドボックス環境でより速く実行される主な理由の1つは、データボリュームの違いです。サンドボックスは通常、生産環境よりも小さなデータセットを持っています。特に、それらが部分的または開発者のサンドボックスである場合、生産データのサブセットのみをコピーします。このデータボリュームの削減により、クエリによってスキャン、インデックス作成、返される必要があるレコードが少なくなり、クエリ実行時間が自然にスピードアップされます。生産データを反映する完全なサンドボックスでさえ、頻繁な更新またはスナップショットは、データが生産組織のように膨大なものではないか、頻繁にアクセスされないことを意味する場合があり、システム全体のシステム負荷が低いためパフォーマンスが向上します。
###インデックス作成と選択性
Salesforceのクエリオプティマイザーは、クエリ実行をスピードアップするためにインデックスに大きく依存しています。インデックス化されたフィールドでフィルタリングするクエリは、テーブル全体をスキャンするのではなく、結果セットをすばやく絞り込むことができるため、多くの場合ははるかに高速です。サンドボックス環境では、データ分布が異なる可能性があるため、クエリオプティマイザーがより効率的に動作する可能性があり、インデックスがより選択的になる可能性があります。たとえば、サンドボックスが生産よりも特定のインデックス化されたフィールドで重複した値またはヌル値が少ない場合、クエリオプティマイザーはインデックスをより効果的に使用してクエリをより速く実行できます。さらに、サンドボックス環境により、生産に影響を与えることなく、カスタムインデックスやクエリチューニングの実験に柔軟性を高めることができます。これにより、開発やテスト中にSOQLパフォーマンスを最適化できます。
###競合とリソースの分離を減らしました
生産環境はマルチテナントであり、さまざまな操作を同時に実行するエンドユーザーによって非常に利用され、リソースの競合が生まれます。この競合は、CPU、メモリ、およびI/Oが多数の同時プロセスの中で共有されるため、クエリの実行を遅くすることができます。対照的に、サンドボックス、特に開発者および開発者のプロサンドボックスは、同時ユーザーが少なくなり、システム全体の負荷が低下する傾向があります。同時処理需要のこの削減により、クエリはリソースをより容易にアクセスできることを意味し、待ち時間を短縮し、実行をスピードアップできます。
###キャッシュとクエリプランの安定性
Salesforceは、パフォーマンスを改善するために洗練されたクエリキャッシュメカニズムを採用しています。サンドボックス環境では、特に繰り返しテストまたは開発の反復が同じクエリを実行する場合、特定のクエリの結果と実行計画がキャッシュされる場合があります。このキャッシング効果は、後続の実行でクエリパフォーマンスを加速することができます。さらに、サンドボックスデータは生産よりも頻繁に変化する頻度であるため、キャッシュされたクエリ計画と結果は有効なままで、クエリ効率を高めます。ダイナミックおよび継続的なデータの変更と重いトランザクションアクティビティにより、生産環境は、キャッシュを効果的に活用できず、クエリプランのより頻繁な再コンパイル、したがってクエリパフォーマンスが遅くなります。
###ガバナーの制限と実行コンテキスト
Salesforceは、プラットフォームの安定性を維持するために、トランザクションあたりのSOQLクエリの最大数を含むガバナー制限を課しています。開発サンドボックスでは、開発者は多くの場合、実行のコンテキストをより慎重に構成および制御して、たとえばバッチ内のクエリをかがめたり処理したりすることにより、これらの制限に衝突しないようにします。このマインドフルな開発とテストは、生産に展開する前にクエリを最適化するのに役立ちます。生産では、複雑なビジネスプロセスと統合により、不注意に過度のクエリまたは非効率的なクエリが発生する可能性があり、データベースのヒットが繰り返され、知事の制限がヒットするため、パフォーマンスが低下します。サンドボックスは、これらのクエリをデバッグおよび最適化するためのより安全なスペースを提供し、より良い相対パフォーマンスをもたらします。
###ルールの共有とセキュリティ設定の違い
サンドボックス環境は、生産と比較して、単純化された、または異なる共有ルールとセキュリティ構成がある可能性があります。 Salesforceは、クエリ実行中にデータベースレベルで共有と可視性のルールを実施します。生産における複雑な共有計算は、特にオブジェクトおよびレコードレベルのセキュリティに関連するクエリにオーバーヘッドを追加する可能性があります。開発やテストに使用されるサンドボックスは、これらのルールを持ち上げたり簡素化したりして、実行の複雑さを減らし、SOQLクエリのパフォーマンスを高速化します。
###テストと最適化の焦点
サンドボックス環境では、一般的にテストと最適化に焦点が当てられています。開発者と管理者は、クエリプランツール、開発者コンソールのパフォーマンスログ、デバッグログなどのSalesforceツールを使用して、SOQLクエリを積極的にプロファイル、分析、改善します。その結果、サンドボックス開発中に学んだベストプラクティスは、必要なフィールドのみの選択、選択的フィルターの適用、内部のクエリを使用したループの回避、関係や集計を思慮深く使用し、非同期処理(Batch Apexなど)が実装され、より速いクエリが実装されます。生産環境には、パフォーマンスを低下させるレガシーまたは最適化されていないクエリが含まれる場合があります。
###その他の貢献要因
-Data Skew:生産データには分布が歪んでいることがよくあり、レコードの小さなサブセットがデータセットを支配しています。このスキューは、インデックス作成戦略を打ち負かすことにより、クエリパフォーマンスを低下させる可能性があります。サンドボックスのゆがみが少なく、より効率的なクエリが可能になる場合があります。
- 真空およびリサイクルビン状態:リサイクルビンの削除されたレコードは、パフォーマンスに影響を与える可能性があります。生産組織には、一般に、サンドボックスよりもフルリサイクルビンがあり、関連するオブジェクトや履歴にアクセスするSOQLクエリを遅くすることができます。
- レプリケーションラグおよびクエリ統計:Salesforceのクエリオプティマイザーは、定期的に更新される事前計算された統計に依存しています。サンドボックス、特に新たにリフレッシュされたものには、オプティマイザーがより良いクエリプランを選択できるようにする新しい統計がある場合があります。
- プラットフォームの拡張:Salesforceが、早期テストのためにサンドボックスで最初に新しいパフォーマンスの改善と機能を展開することがあります。これにより、古い生産環境と比較してサンドボックスの性能が一時的に向上する可能性があります。
要約すると、SOQLクエリは、主に小さくて複雑ではないデータセット、インデックス選択性の向上、システムの競合の削減、効果的なキャッシュ、開発中の焦点のクエリ最適化、およびセキュリティと共有構成の単純なクエリの最適化により、サンドボックス環境でより速く実行されます。これらの組み合わせた要因は、Salesforceのクエリオプティマイザーがクエリをより効率的に実行できる条件を作成し、クエリを処理するためにリソースをより簡単に利用できるようにします。この環境は、生産組織の高度に負荷と複雑な性質において、より良いパフォーマンスを達成できません。したがって、サンドボックスは、パフォーマンスの需要とデータの複雑さがはるかに高い生産にクエリとアプリケーションを展開する前に、開発/テストの遊び場とパフォーマンスの調整の場所の両方として機能します。これらの洞察はすべて、Salesforceパフォーマンスのベストプラクティス、開発者エクスペリエンス、Salesforceのアーキテクチャ特性から引き出されています。