与生产环境相比,SOQL(Salesforce对象查询语言)查询有时在沙盒环境中可以更快地运行,这是由于几个技术和操作因素与Salesforce Sandbox的设置和管理方式固有。了解这些因素需要研究数据量,索引,缓存,资源争夺和系统优化与生产环境的差异。
###数据量和复杂性
SOQL查询在沙盒环境中运行得更快的主要原因之一是数据量的差异。沙箱通常比生产环境更小的数据集,尤其是当它们是部分或开发人员沙箱时,仅复制生产数据的一个子集。减少的数据量意味着需要扫描,索引和通过查询返回的记录较少,自然会加快查询执行时间。即使在镜像生产数据的完整沙箱中,频繁的刷新或快照也可能意味着数据不如实时生产组织中的大量或频繁访问,因此由于整体系统负载较低,导致性能更好。
###索引和选择性
Salesforce的查询优化器在很大程度上依赖索引来加快查询执行。在索引字段上过滤的查询通常要快得多,因为Salesforce可以快速缩小结果集,而不是扫描整个桌子。在沙箱环境中,查询优化器可能会更有效地行为,因为数据分布可能会有所不同,从而使索引更具选择性。例如,如果沙箱在某些索引字段中的重复或零值少于生产,则查询优化器可以更有效地使用索引来更快地执行查询。此外,沙盒环境通常可以在尝试自定义索引或查询调整而不会影响生产的情况下具有更大的灵活性,这可以在开发和测试过程中优化SOQL性能。
###减少了争论和资源隔离
最终用户同时执行各种操作,从而创造了资源争议,因此生产环境是多租户和大量利用。这种争论可以减慢查询执行,因为CPU,内存和I/O在众多并发过程中共享。相比之下,沙箱,尤其是开发人员和开发人员专业沙箱,往往具有更少的同时用户,并且整体系统负载降低。同时处理需求的这种减少意味着查询可以更容易访问资源,减少等待时间并加快执行。
###缓存和查询计划稳定性
Salesforce采用复杂的查询缓存机制来提高性能。在沙盒环境中,某些查询结果和执行计划可能会被缓存,特别是如果重复测试或开发迭代执行相同的查询。这种缓存效果可以加速在随后的运行中的查询性能。此外,由于沙箱数据的变化频率少于生产,因此缓存的查询计划和结果的有效性更长,从而提高了查询效率。生产环境具有动态和连续的数据变化和重大的交易活动,无法像有效地利用缓存,从而导致查询计划更频繁地重新补偿,从而降低查询性能。
###调速器限制和执行上下文
Salesforce施加了州人的限制,包括每笔交易的最大SOQL查询数量,以维持平台稳定性。在开发沙箱中,开发人员通常会更加仔细地配置和控制执行上下文,以避免达到这些限制,例如通过批量进行查询和处理数据。这种正念的开发和测试有助于在部署生产之前保持优化的查询。在生产中,复杂的业务流程和集成可能会无意间引起过度或效率低下的查询,从而导致由于重复的数据库命中和击中调速器限制,导致性能较慢。沙箱为调试和优化这些查询提供了更安全的空间,从而提供了更好的相对性能。
###共享规则和安全设置的差异
与生产相比,沙盒环境可能具有简化或不同的共享规则和安全配置。 Salesforce在查询执行期间在数据库级别执行共享和可见性规则。生产中的复杂共享计算可以增加查询的开销,尤其是与对象和记录级安全性相关的查询。用于开发或测试的沙盒有时会提起或简化这些规则,从而降低执行复杂性,从而加快SOQL查询性能。
###测试和优化焦点
在沙盒环境中,通常关注测试和优化。开发人员和管理员使用诸如查询计划工具,开发人员控制台的性能日志和调试日志之类的Salesforce工具来积极介绍,分析和改进SOQL查询。因此,在沙盒开发过程中学到的最佳实践,例如仅选择必要的字段,应用选择性过滤器,避免在其中进行查询的循环,使用关系和聚集体,以及异步处理(如批处理顶点),从而实现了更快的查询。生产环境可能仍包含遗产或不优化的查询,以降低性能。
###其他促成因素
- 数据偏差:生产数据通常具有偏斜的分布,其中一小部分记录主导了数据集。这个偏斜可以通过击败索引策略来降低查询性能。沙箱的偏斜可能较小,可以更有效的查询。
- 真空和回收箱状态:回收箱中删除的记录可能会影响性能。生产ORG通常比沙箱具有更完整的回收箱,该沙箱可以减慢访问相关对象或历史的SOQL查询。
- 复制滞后和查询统计信息:Salesforce的查询优化器依赖于定期刷新的预算统计信息。沙箱,尤其是新刷新的沙箱,可能具有新的统计数据,使优化器可以选择更好的查询计划。
- 平台增强功能:有时Salesforce在沙盒中首先采用新的性能改进,以进行早期测试。相对于较旧的生产环境,这可能会暂时增强沙箱性能。
总而言之,SOQL查询在沙盒环境中运行得更快,主要是由于较小且不太复杂的数据集,更好的索引选择性,降低的系统争议,有效的缓存,开发过程中的重点查询优化以及更简单的安全性和共享配置。这些合并的因素创造了Salesforce的查询优化器可以更有效地执行查询,并且更容易用于处理查询的情况。在生产组织的高度负载和复杂的性质中,这种环境促进了更好的性能。因此,沙盒既可以作为开发/测试操场,又是进行性能调整的地方,然后将查询和应用程序部署到生产中,在该生产中,性能需求和数据复杂性要高得多。所有这些见解都来自Salesforce绩效最佳实践,开发人员体验和Salesforce的体系结构特征。