Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Pourquoi les requêtes SOQL pourraient-elles fonctionner plus rapidement dans un environnement de bac à sable


Pourquoi les requêtes SOQL pourraient-elles fonctionner plus rapidement dans un environnement de bac à sable


Les requêtes SOQL (Salesforce Object Query Language) peuvent parfois fonctionner plus rapidement dans un environnement de bac à sable par rapport à un environnement de production en raison de plusieurs facteurs techniques et opérationnels intrinsèques à la façon dont les bacs de sable Salesforce sont mis en place et gérés. La compréhension de ces facteurs nécessite de plonger dans les différences de volumes de données, d'indexation, de mise en cache, de contention des ressources et d'optimisations de système spécifiques aux environnements de bac à sable par rapport aux environnements de production.

Volume et complexité des données

L'une des principales raisons pour lesquelles les requêtes SOQL s'exécutent plus rapidement dans les environnements de bac à sable est la différence de volume de données. Les bacs à sable ont généralement des ensembles de données plus petits que les environnements de production, surtout s'ils sont des bacs de sable partiels ou développeurs, qui ne copient que un sous-ensemble des données de production. Ce volume de données réduit signifie que moins d'enregistrements doivent être numérisés, indexés et renvoyés par les requêtes, accélérant naturellement les temps d'exécution de la requête. Même dans les bacs à sable complets qui reflètent les données de production, des rafraîchissements ou des instantanés fréquents peuvent signifier que les données ne sont pas aussi volumineuses ou aussi fréquemment accessibles que dans l'organisation de production en direct, ce qui entraîne de meilleures performances en raison de la charge globale globale plus faible.

Indexation et sélectivité

L'optimiseur de requête de Salesforce s'appuie fortement sur les index pour accélérer l'exécution de la requête. Les requêtes qui filtrent sur les champs indexées sont souvent beaucoup plus rapides car Salesforce peut rapidement réduire l'ensemble de résultats plutôt que de scanner l'ensemble du tableau. Dans les environnements de bac à sable, l'optimiseur de requête peut se comporter plus efficacement car la distribution des données peut être différente, permettant aux index plus sélectifs. Par exemple, si un bac à sable a moins de valeurs en double ou nuls dans certains champs indexés que la production, l'optimiseur de requête peut utiliser des index plus efficacement pour exécuter des requêtes plus rapidement. De plus, les environnements de bac à sable permettent souvent plus de flexibilité dans l'expérimentation des index personnalisés ou du réglage de la requête sans affecter la production, ce qui peut optimiser les performances SOQL pendant le développement et les tests.

réduit les affirmations et l'isolement des ressources

Les environnements de production sont multi-locataires et fortement utilisés par les utilisateurs finaux effectuant simultanément diverses opérations, créant une affirmation sur les ressources. Cette affirmation peut ralentir l'exécution de la requête en tant que processeur, mémoire et E / S sont partagées entre de nombreux processus simultanés. En revanche, les bacs à sable, en particulier le développeur et les développeurs pro-sandbox, ont tendance à avoir moins d'utilisateurs simultanés et une charge système globale inférieure. Cette réduction de la demande de traitement simultanée signifie que les requêtes peuvent accéder plus facilement aux ressources, en réduisant les temps d'attente et en accélérant l'exécution.

Stabilité du plan de mise en cache et de requête

Salesforce utilise des mécanismes de mise en cache de requête sophistiqués pour améliorer les performances. Dans les environnements de bac à sable, certains résultats de requête et plans d'exécution peuvent être mis en cache, en particulier si des tests ou des itérations de développement répétés exécutent les mêmes requêtes. Cet effet de mise en cache peut accélérer les performances de la requête sur les courses suivantes. De plus, comme les données de bac à sable changent moins fréquemment que la production, les plans de requête et les résultats mis en cache restent valables plus longtemps, améliorant l'efficacité de la requête. Les environnements de production, avec leurs changements de données dynamiques et continus et leurs activités transactionnelles lourdes, ne peuvent pas tirer parti de la mise en cache aussi efficacement, conduisant à une recompilation plus fréquente des plans de requête et donc à des performances de requête plus lentes.

Limites du gouverneur et contexte d'exécution

Salesforce impose les limites du gouverneur - y compris le nombre maximal de requêtes SOQL par transaction pour maintenir la stabilité de la plate-forme. Dans le développement de bacs à sable, les développeurs configurent et contrôlent souvent plus attentivement les contextes d'exécution pour éviter de frapper ces limites, par exemple en incendiant les requêtes et en traitement des données par lots. Ce développement et les tests conscients aident à maintenir les requêtes optimisées avant le déploiement en production. Dans la production, des processus commerciaux et des intégrations complexes peuvent provoquer par inadvertance une requête excessive ou inefficace, conduisant à des performances plus lentes en raison de tubes de base de données répétés et de frappez les limites du gouverneur. Les bacs à sable offrent un espace plus sûr pour déboguer et optimiser ces requêtes, ce qui donne de meilleures performances relatives.

Différences dans le partage des règles et des paramètres de sécurité

Les environnements de bac à sable peuvent avoir des règles de partage et des configurations de sécurité simplifiées ou différentes par rapport à la production. Salesforce applique les règles de partage et de visibilité au niveau de la base de données lors de l'exécution de la requête. Des calculs de partage complexes dans la production peuvent ajouter des frais généraux aux requêtes, en particulier celles liées à la sécurité des objets et au niveau des enregistrements. Les bacs à sable utilisés pour le développement ou les tests soulevaient ou simplifient parfois ces règles, réduisant la complexité de l'exécution et accélérant ainsi les performances de la requête SOQL.

Test and Optimization Focus

Dans les environnements de bac à sable, l'accent est généralement mis sur les tests et l'optimisation. Les développeurs et les administrateurs profilent activement, analysent et améliorent activement les requêtes SOQL à l'aide d'outils Salesforce comme l'outil de plan de requête, les journaux de performances de la console du développeur et les journaux de débogage. Par conséquent, les meilleures pratiques apprises pendant le développement du bac à sable telles que la sélection uniquement des domaines nécessaires, l'application de filtres sélectifs, d'éviter les boucles avec des requêtes à l'intérieur, en utilisant des relations et des agrégats pensivement, et un traitement asynchrone (comme l'apex par lots) est mis en œuvre, ce qui résulte des requêtes plus rapides. Les environnements de production peuvent toujours contenir des requêtes héritées ou non optimisées qui dégradent les performances.

Autres facteurs contributifs

- Données sur les données: les données de production ont souvent des distributions asymétriques, où un petit sous-ensemble d'enregistrements domine l'ensemble de données. Ce biais peut dégrader les performances de la requête en battant les stratégies d'indexation. Les bacs à sable peuvent avoir moins de biais, permettant des requêtes plus efficaces.

- ÉTAT DU COUPA ET DE Recyclage: les enregistrements supprimés dans le bac de recyclage peuvent avoir un impact sur les performances. Les organes de production ont généralement un bac de recyclage plus complet que les bacs à sable, ce qui peut ralentir les requêtes SOQL qui accèdent aux objets ou aux histoires liées.

- Statistiques du décalage et de la requête de réplication: l'optimiseur de requête de Salesforce repose sur des statistiques précomputées qui sont rafraîchies périodiquement. Les bacs à sable, en particulier les nouveaux rafraîchis, peuvent avoir de nouvelles statistiques qui permettent à l'optimiseur de choisir de meilleurs plans de requête.

- Améliorations de la plate-forme: Salesforce déploie parfois de nouvelles améliorations et fonctionnalités des performances d'abord dans les bacs à sable pour les tests précoces. Cela pourrait temporairement améliorer les performances du bac à sable par rapport aux environnements de production plus anciens.

En résumé, les requêtes SOQL fonctionnent plus rapidement dans les environnements de bac à sable, principalement en raison des ensembles de données plus petits et moins complexes, une meilleure sélectivité d'index, une affirmation réduite du système, une mise en cache efficace, une optimisation de la requête ciblée pendant le développement et des configurations de sécurité et de partage plus simples. Ces facteurs combinés créent des conditions où l'optimiseur de requêtes de Salesforce peut exécuter des requêtes plus efficacement et où les ressources sont plus facilement disponibles pour le traitement des requêtes. Cet environnement favorise les meilleures performances inaccessibles dans la nature hautement chargée et complexe des organisations de production. Les bacs à sable servent ainsi à la fois comme un terrain de jeu de développement / test et un lieu de réglage des performances avant de déployer des requêtes et des applications dans la production où les demandes de performance et les complexités de données sont beaucoup plus élevées. Toutes ces informations sont tirées des meilleures pratiques de performance Salesforce, des expériences de développeur et des caractéristiques d'architecture de Salesforce.