이 페이지에서는 Spanner 쿼리 최적화 도구와 그 이점을 설명합니다.
개요
Spanner SQL 쿼리 최적화 도구는 쿼리에 필요한 데이터가 무엇인지 기술하는 선언적인 SQL 문을 해당 데이터를 정확하게 가져오기 위한 한 가지 방법을 기술하는 명령적인 실행 계획으로 변환합니다. 선언적인 문을 쿼리 실행 계획으로 변환하는 과정에는 쿼리 표현을 위해 사용되는 3개의 구조체로 변환을 수행하는 작업이 포함됩니다. 실행 계획을 생성하는 동안 최적화 도구는 올바른 행이 반환되도록 원래 SQL 쿼리의 논리적 의미를 보존합니다.
최적화 도구의 또 다른 중요한 역할은 효율적인 실행 계획을 생성하는 것입니다.
Spanner 최적화 도구가 효율적인 실행 계획을 생성하기 위해 어떻게 하나요?
Spanner의 최적화 도구는 잘 설정된 휴리스틱과 비용 기반의 최적화를 결합하여 효율적인 계획을 생성합니다. 일부 휴리스틱은 '데이터를 로컬 머신으로 가져오는 대신 원격 머신에서 필터 수행'과 같이 매우 직관적입니다. 다른 휴리스틱은 이보다 더 복잡하지만 여전히 데이터 볼륨을 줄여주는 논리를 해당 데이터에 더 가깝게 이동하는 원칙을 따릅니다. 이러한 원칙은 여러 머신 간에 데이터를 샤딩하는 시스템에서 특히 중요합니다.
이러한 고정된 규칙을 사용하여 모든 실행 결정을 효율적으로 내릴 수 있진 않기 때문에, Spanner의 최적화 도구는 대안의 예상 비용을 기준으로 의사결정을 수행합니다. 이러한 비용 예상 값은 쿼리 구조, 데이터베이스 스키마, 쿼리 조각으로 생성되는 데이터 볼륨의 예상 값을 사용해서 계산됩니다. 예를 들어 Spanner는 SongGenre = "Country"
필터가 쿼리에 표시될 때 Songs 테이블에서 이 필터에 해당하는 행 수가 얼마나 될지 예상합니다. 이러한 예상 값의 계산을 돕기 위해 Spanner는 데이터베이스에서 통계를 주기적으로 수집하여 데이터 분산 특성을 확인합니다.
또한 Spanner는 행 또는 열 기반 처리 방법을 쿼리에 사용할지 여부를 자동으로 결정하여 쿼리 실행을 최적화합니다. 자세한 내용은 검사 최적화를 참조하세요.
쿼리 실행 계획 및 분산 환경에서의 쿼리 수행을 위해 Spanner에서 쿼리 실행 계획이 사용되는 방법을 자세히 알아보려면 쿼리 실행 계획을 참조하세요.
쿼리 최적화 도구 버전 관리
시간이 지남에 따라 Spanner 쿼리 최적화 도구도 발전하여 쿼리 실행 계획에서 선택 옵션의 범위가 확장되고 이러한 옵션을 알려주는 예상 값의 정확도가 향상되어, 더 효율적인 쿼리 실행 계획을 얻을 수 있습니다.
Spanner는 쿼리 실행 계획의 효율성 향상을 위해 새 쿼리 최적화 도구 버전으로 쿼리 최적화 도구 업데이트를 출시합니다. 여러 버전에 대한 자세한 내용은 Spanner 쿼리 최적화 도구 버전을 참조하세요.
쿼리 최적화 도구 통계 패키지
Spanner는 테이블 열의 데이터 분포에 대한 통계를 유지하여 쿼리에서 생성할 행의 수를 추정할 수 있습니다. 쿼리 최적화 도구는 이러한 예측을 사용하여 가장 적합한 쿼리 실행 계획을 선택합니다. Spanner에서 이러한 통계를 주기적으로 업데이트합니다. 통계는 쿼리 실행 계획을 선택하는 데 사용되므로 통계가 업데이트되면 Spanner에서 쿼리에 사용하는 쿼리 계획을 변경할 수 있습니다.
기본적으로 데이터베이스는 생성된 최신 통계 패키지를 자동으로 사용합니다. 데이터베이스를 이전 통계 패키지 버전에 고정할 수 있습니다. 최신이 아닌 통계 패키지를 사용하여 개별 쿼리를 실행할 수도 있습니다.
새 통계 패키지 생성
Spanner는 3일마다 새 통계 패키지를 자동으로 생성합니다. 새 통계 패키지를 수동으로 생성하려면 GoogleSQL ANALYZE
DDL 문 또는 PostgreSQL ANALYZE
DDL 문을 사용합니다.
데이터베이스의 데이터 또는 스키마를 크게 변경한 후 새 통계 패키지를 생성하면 쿼리 성능에 도움이 될 수 있습니다. 다음과 같은 경우 새 통계 패키지를 생성하는 것이 좋습니다.
- 데이터베이스가 대량의 삽입, 업데이트 또는 삭제를 처리합니다.
- 데이터베이스에 새 색인을 추가합니다.
- 테이블에 새 열을 추가합니다.
ANALYZE
DDL 문을 실행하면 스키마가 업데이트되고 장기 실행 작업이 시작됩니다.
Spanner의 문 실행이 완료되면 쿼리 최적화 도구가 쿼리 계획에 새 통계 패키지를 고려하는 데 최대 10분이 걸립니다.
통계 패키지의 가비지 컬렉션
Spanner의 통계 패키지는 생성 후 30일 동안 보관된 후 가비지 컬렉션에 적용됩니다.
Spanner 기본 제공 INFORMATION_SCHEMA.SPANNER_STATISTICS
테이블에는 사용 가능한 통계 패키지 목록이 포함됩니다. 이 표의 각 행에는 통계 패키지가 이름별로 나열되고 이름에는 지정된 패키지의 생성 타임스탬프가 포함됩니다. 또한 각 항목에는 패키지가 가비지로 수집될 수 있는지 여부를 정의하는 ALLOW_GC
라는 필드가 있습니다.
전체 데이터베이스를 해당 표에 나와 있는 패키지 중 하나에 고정할 수 있습니다. 데이터베이스가 이 패키지에 고정되어 있는 동안에는 고정된 통계 패키지가 가비지로 수집되지 않고 ALLOW_GC
값이 무시됩니다. 개별 쿼리에 특정 통계 패키지를 사용하려면 패키지가 ALLOW_GC=FALSE
와 함께 나열되거나 고정되어야 합니다. 이렇게 하면 통계 패키지가 가비지로 수집된 후 쿼리 실패가 방지됩니다. GoogleSQL ALTER STATISTICS
또는 PostgreSQL ALTER STATISTICS
DDL 문을 사용하여 ALLOW_GC
값을 변경할 수 있습니다.
패키지 보관 및 개인 식별 정보(PII)
통계 패키지에는 표준 업계 관행에 따라 열 데이터의 히스토그램이 포함됩니다. 이를 통해 쿼리 옵티마이저에서 최적의 쿼리 계획을 선택할 수 있습니다. 히스토그램은 작은 값 샘플을 통해 구성됩니다. 이 작은 데이터 세트에 PII가 포함될 수 있습니다.
Spanner는 새 통계 패키지를 정기적으로 만들고 기본적으로 30일 동안 보관합니다. 따라서 데이터베이스에서 삭제된 값의 작은 샘플은 통계 히스토그램에서 30일 동안 추가 보관될 수 있습니다.
optimizer_statistics_package
데이터베이스 옵션으로 고정된 통계 패키지나 ALLOW_GC=FALSE
옵션이 포함된 패키지는 가비지로 수집되지 않습니다.
이 패키지의 히스토그램에는 데이터베이스에서 삭제된 값이 더 오래 포함될 수 있습니다. 또한 통계 패키지의 콘텐츠는 데이터베이스 백업에 포함됩니다.
최적화 도구 통계는 사용자 데이터와 동일한 방식으로 암호화되어 저장됩니다.
이러한 패키지에 필요한 총 스토리지 양은 일반적으로 100MB 미만이며 총 스토리지 비용에 포함됩니다.
다음 단계
- 쿼리 최적화 도구 버전 기록을 참조하여 쿼리 최적화 도구 기록 자세히 알아보기
- 쿼리 최적화 도구 관리를 참조하여 시나리오에 대한 최적화 도구 버전 및 통계 패키지 관리하기