SOQL (Salesforce Object Query Language) 쿼리는 Salesforce 샌드 박스가 설정 및 관리되는 방법에 대한 몇 가지 기술 및 운영 요소로 인해 생산 환경에 비해 샌드 박스 환경에서 더 빠르게 실행될 수 있습니다. 이러한 요소를 이해하려면 데이터 볼륨, 인덱싱, 캐싱, 리소스 경합 및 샌드 박스 대 생산 환경에 맞는 시스템 최적화의 차이를 탐구해야합니다.
데이터 볼륨 및 복잡성
샌드 박스 환경에서 SOQL 쿼리가 더 빠르게 실행되는 주요 이유 중 하나는 데이터 볼륨의 차이 때문입니다. 샌드 박스는 일반적으로 생산 환경보다 데이터 세트가 더 작습니다. 특히 생산 데이터의 하위 집합 만 복사하는 부분 또는 개발자 샌드 박스 인 경우에 특히 데이터 세트가 있습니다. 이 데이터 볼륨 감소는 레코드가 줄어들고 인덱싱 및 쿼리로 반환되어 자연스럽게 쿼리 실행 시간을 고정시켜야한다는 것을 의미합니다. 생산 데이터를 미러링하는 전체 샌드 박스에서도 빈번한 새로 고침 또는 스냅 샷은 데이터가 라이브 프로덕션 조직에서와 같이 방대한 볼륨이 아니거나 자주 액세스 할 수 없으므로 전체 시스템로드가 낮아서 성능이 향상됩니다.
인덱싱 및 선택성
Salesforce의 쿼리 옵티마이저는 인덱스에 크게 의존하여 쿼리 실행 속도를 높입니다. 인덱스 필드에서 필터를 필터링하는 쿼리는 종종 전체 테이블을 스캔하지 않고 결과 세트를 빠르게 좁힐 수 있기 때문에 종종 훨씬 빠릅니다. 샌드 박스 환경에서는 데이터 배포가 다를 수 있기 때문에 쿼리 옵티마이저가 더 효율적으로 행동 할 수있어 인덱스가보다 선택적 일 수 있습니다. 예를 들어, 샌드 박스의 생산보다 특정 인덱스 필드에서 중복 또는 널 값이 적은 경우 쿼리 최적화기는 인덱스를보다 효과적으로 사용하여 쿼리를 더 빨리 실행할 수 있습니다. 또한 샌드 박스 환경은 종종 생산에 영향을 미치지 않고 사용자 지정 인덱스 또는 쿼리 튜닝을 실험 할 때 더 많은 유연성을 허용하여 개발 및 테스트 중에 SOQL 성능을 최적화 할 수 있습니다.
경합 및 자원 격리 감소
생산 환경은 다중 테넌트이며 다양한 운영을 동시에 수행하는 최종 사용자가 자원 경합을 만듭니다. 이 경합은 CPU, 메모리 및 I/O가 수많은 동시 프로세스에서 공유되므로 쿼리 실행 속도를 늦출 수 있습니다. 대조적으로, 샌드 박스, 특히 개발자 및 개발자 프로 샌드 박스는 동시 사용자 수가 적고 전체 시스템 부하가 낮아지는 경향이 있습니다. 이러한 동시 처리 수요 감소는 쿼리가 리소스에보다 쉽게 액세스하여 대기 시간을 줄이고 실행 속도를 높일 수 있음을 의미합니다.
캐싱 및 쿼리 계획 안정성
Salesforce는 성능을 향상시키기 위해 정교한 쿼리 캐싱 메커니즘을 사용합니다. 샌드 박스 환경에서는 특히 반복 테스트 또는 개발 반복이 동일한 쿼리를 실행하는 경우 특정 쿼리 결과 및 실행 계획이 캐시 될 수 있습니다. 이 캐싱 효과는 후속 실행시 쿼리 성능을 가속화 할 수 있습니다. 또한 샌드 박스 데이터가 프로덕션보다 덜 자주 변경되므로 캐시 된 쿼리 계획과 결과는 더 오래 유효하며 쿼리 효율성을 향상시킵니다. 역동적이고 지속적인 데이터 변경과 무거운 트랜잭션 활동을 통해 생산 환경은 캐싱을 효과적으로 활용할 수 없으므로 쿼리 계획을 더 자주 재 컴파일하여 쿼리 성능이 느려집니다.
주지사 제한 및 실행 상황
Salesforce는 플랫폼 안정성을 유지하기 위해 트랜잭션 당 최대 SOQL 쿼리 수를 포함하여 주지사 한도를 부과합니다. 개발 샌드 박스에서 개발자는 종종 실행 컨텍스트를보다 신중하게 구성하고 제어하여 이러한 한도를 치르지 않도록 쿼리를 킬로 치우고 배치로 데이터를 처리하여 데이터를 처리합니다. 이 신중한 개발 및 테스트는 생산에 배치하기 전에 쿼리를 최적화하는 데 도움이됩니다. 생산에서 복잡한 비즈니스 프로세스 및 통합으로 인해 실수로 과도하거나 비효율적 인 쿼리가 발생하여 반복되는 데이터베이스 히트와 주지사 한도로 인해 성능이 느려질 수 있습니다. 샌드 박스는 이러한 쿼리를 디버깅하고 최적화 할 수있는 안전한 공간을 제공하여 상대적인 성능을 향상시킵니다.
규칙 및 보안 설정 공유 차이
샌드 박스 환경은 생산에 비해 단순화되거나 다른 공유 규칙 및 보안 구성이있을 수 있습니다. Salesforce는 쿼리 실행 중에 데이터베이스 수준에서 공유 및 가시성 규칙을 시행합니다. 생산에서 복잡한 공유 계산은 쿼리, 특히 객체 및 레코드 수준 보안과 관련된 쿼리에 오버 헤드를 추가 할 수 있습니다. 개발 또는 테스트에 사용되는 샌드 박스는 때때로 이러한 규칙을 들어 올리거나 단순화하여 실행 복잡성을 줄이고 SOQL 쿼리 성능을 가속화합니다.
테스트 및 최적화 초점
샌드 박스 환경에서는 일반적으로 테스트 및 최적화에 중점을 둡니다. 개발자와 관리자는 쿼리 플랜 도구, 개발자 콘솔의 성능 로그 및 디버그 로그와 같은 Salesforce 도구를 사용하여 SOQL 쿼리를 적극적으로 프로필, 분석 및 개선합니다. 결과적으로, 필요한 필드 만 선택, 선택적 필터 적용, 내부에 쿼리가있는 루프를 피하고, 관계 및 집계를 신중하게 사용하는 등 샌드 박스 개발 중에 배운 모범 사례는 신중하게 비동기 처리 (Batch Apex와 같은 비동기 처리)가 구현되어 더 빠른 쿼리를 초래합니다. 생산 환경에는 여전히 성능 저하의 레거시 또는 최적화되지 않은 쿼리가 포함될 수 있습니다.
기타 기여 요인
- 데이터 비뚤어 : 생산 데이터는 종종 분포가 왜곡되어 있으며, 여기서 작은 레코드의 작은 서브 세트가 데이터 세트를 지배합니다. 이 기울기는 인덱싱 전략을 물리 치면 쿼리 성능을 저하시킬 수 있습니다. 샌드 박스의 비뚤어 질 수 있으므로보다 효율적인 쿼리가 가능할 수 있습니다.
- 진공 및 재활용 빈 상태 : 재활용 빈에서 삭제 된 레코드는 성능에 영향을 줄 수 있습니다. 생산 조직에는 일반적으로 샌드 박스보다 더 완전한 재활용 빈이있어 관련 객체 나 역사에 액세스하는 SOQL 쿼리가 느려질 수 있습니다.
- 복제 지연 및 쿼리 통계 : Salesforce의 쿼리 최적화는 주기적으로 새로 고침 된 사전 계산 통계에 의존합니다. 샌드 박스, 특히 새로 새로 고침 된 샌드 박스에는 최적화가 더 나은 쿼리 계획을 선택할 수있는 새로운 통계가있을 수 있습니다.
- 플랫폼 향상 : 때때로 Salesforce는 새로운 성능 향상과 초기 테스트를 위해 먼저 샌드 박스에서 기능을 배포합니다. 이는 이전 생산 환경에 비해 샌드 박스 성능을 일시적으로 향상시킬 수 있습니다.
요약하면, SOQL 쿼리는 주로 작고 복잡한 데이터 세트, 인덱스 선택성 향상, 시스템 경합 감소, 효과적인 캐싱, 개발 중 집중 쿼리 최적화, 보안 및 공유 구성으로 인해 주로 샌드 박스 환경에서 더 빠르게 실행됩니다. 이러한 결합 된 요소는 Salesforce의 쿼리 최적화기를보다 효율적으로 실행할 수 있고 쿼리 처리를 위해 리소스를보다 쉽게 사용할 수있는 조건을 만듭니다. 이 환경은 생산 조직의로드되고 복잡한 특성에서 더 나은 성능을 달성 할 수 없습니다. 따라서 샌드 박스는 성능 요구 및 데이터 복잡성이 훨씬 높은 생산에 쿼리와 응용 프로그램을 배치하기 전에 개발/테스트 놀이터 및 성능 튜닝 장소 역할을합니다. 이러한 모든 통찰력은 Salesforce 성과 모범 사례, 개발자 경험 및 Salesforce의 아키텍처 특성에서 나온 것입니다.