하이브리드 테이블에 대한 쿼리 프로필 분석¶
Unistore 워크로드는 쿼리 실행에 대한 몇 가지 흥미로운 질문을 제기하며, Snowsight 쿼리 프로필 기능이나 EXPLAIN 출력에서 수집한 정보를 사용하여 이를 조사할 수 있습니다. 전반적인 성능과 처리량을 모니터링하는 것 외에도 행 저장소나 오브젝트 저장소에 대해 테이블 스캔이 실행되는지, 아니면 특정 보조 인덱스가 사용되는지 알고 싶을 수도 있습니다.
이 섹션에서는 하이브리드 테이블 작업과 관련된 Query Profile 연산자 및 특성을 식별하고 하이브리드 테이블에 액세스하는 쿼리 계획을 읽는 방법을 이해하는 데 도움이 되는 몇 가지 예제를 제시합니다. 쿼리 기록으로 쿼리 활동 모니터링하기 도 참조하십시오.
하이브리드 테이블 스캔과 인덱스 스캔¶
테이블 및 인덱스 스캔 연산자는 하이브리드 테이블에 대한 액세스를 보여주기 위해 쿼리 프로필에 표시됩니다. 이러한 연산자는 일반적으로 트리의 맨 아래에 나타나며, 특정 쿼리를 실행하는 데 필요한 데이터를 읽는 첫 번째 단계를 나타냅니다. 표준 테이블에 대한 쿼리는 항상 테이블 스캔을 사용하고, 인덱스 스캔을 사용하지 않습니다.
기본 키 인덱스를 사용하여 하이브리드 테이블을 스캔하는 경우 쿼리 프로필에 IndexScan 연산자가 아닌 TableScan 연산자가 표시됩니다. 보조 인덱스와 같이 하이브리드 테이블을 스캔하는 데 다른 인덱스가 사용되는 경우 IndexScan 연산자가 표시됩니다.
IndexScan 연산자의 Attributes 아래에서 인덱스의 정규화된 이름과 Access predicates 를 확인할 수 있습니다. 이는 스캔 중에 인덱스에 적용되는 조건자입니다. 또한 테이블 스캔 중에 적용되는 필터에 대한 조건문도 볼 수 있습니다.
조건자가 인덱스에 “푸시”되면 조건자에는 쿼리에 사용된 상수에 대한 자리 표시자가 괄호 안에 포함됩니다. 예: SENSOR_DATA_DEVICE2.DEVICE_ID = (:SFAP_PRE_NR_1)
스캔 모드¶
하이브리드 테이블 데이터는 운영 및 분석 워크로드를 모두 처리하기 위해 두 가지 형식으로 유지됩니다. 관리자가 자주 묻는 질문 중 하나는 주어진 쿼리가 행 저장소에 액세스할지, 열 저장소(오브젝트 저장소)에 액세스할지 여부입니다. 쿼리는 해당 테이블, 쿼리의 특정 요구 사항, 인덱스 가용성 및 기타 요소에 따라 하나 또는 두 가지 유형의 저장소에서 읽을 수 있습니다.
하이브리드 테이블 쿼리에 대한 쿼리 프로필에는 트리의 각 테이블 스캔 연산자에 대한 Scan Mode 특성이 포함되어 있습니다.
ROW-BASED: 쿼리는 행 저장소의 테이블 데이터를 읽거나 인덱스를 사용하여 쿼리 결과를 계산합니다.
COLUMN-BASED: 쿼리는 행 저장소에 로드된 동일한 데이터의 오브젝트 저장소 복사본을 읽습니다. 인덱스 스캔은 Time Travel 쿼리를 위해 오브젝트 저장소에 액세스할 수도 있습니다.
스캔 모드는 하이브리드 테이블에만 적용됩니다. 표준 테이블에서 테이블 스캔을 실행하는 경우 Scan Mode 특성이 표시되지 않습니다.
열 형식 웨어하우스 캐시에서 읽은 데이터¶
가능한 경우, 하이브리드 테이블에 대한 테이블 스캔은 열 기반 웨어하우스 캐시에서 데이터를 읽습니다. 이 캐시는 표준 웨어하우스 캐시의 확장 프로그램입니다. 웨어하우스 캐시 최적화하기 섹션을 참조하십시오. 캐시에는 하이브리드 테이블 저장소 공급자로부터 읽은 데이터가 포함되어 있으며 하이브리드 테이블에 대한 읽기 전용 쿼리를 통해 액세스할 수 있습니다.
주어진 쿼리 프로필에서 캐시 사용량을 확인하려면 테이블 스캔 연산자를 선택하고 Statistics 에서 Percentage scanned from cache 를 확인하십시오.
하이브리드 테이블에서 선택하는 쿼리는 쿼리 결과 캐시 의 이점을 활용할 수 없습니다.
하이브리드 테이블 요청에 대한 제한¶
Profile Overview 에서는 Hybrid Table Requests Throttling 백분율을 볼 수 있습니다. 이 개요를 보려면 트리에서 연산자를 선택하지 마십시오. 개요는 전체 쿼리 계획에 적용됩니다.
예를 들어, 다음 쿼리는 실행 시간의 87.5%가 하이브리드 테이블 저장소 공급자에 의한 제한에 소요된 것으로 기록되었습니다. 높은 제한 비율은 데이터베이스 할당량에 비해 너무 많은 하이브리드 테이블 읽기 및 쓰기 요청이 저장소 공급자에게 전송되고 있음을 나타냅니다. 자세한 내용은 할당량 및 제한 섹션을 참조하십시오.
![쿼리 프로필 개요는 하이브리드 테이블 요청에 대해 높은 제한 비율을 보여줍니다.](../_images/hybrid_table_profile_overview_throttling.png)
예¶
다음 Snowsight 쿼리 프로필 예제에서는 하이브리드 테이블 작업과 관련된 특성을 보여줍니다. 이러한 예를 이해하기 위해 쿼리하고 수정하는 테이블을 생성하거나 로드할 필요는 없습니다. 그러나 이는 참조를 위해 테이블 중 하나에 대한 CREATE TABLE 문입니다. PRIMARY KEY 제약 조건(timestamp
열)과 보조 인덱스(device_id
열)의 정의에 유의하십시오.
CREATE OR REPLACE HYBRID TABLE sensor_data_device1 (
device_id VARCHAR(10),
timestamp TIMESTAMP PRIMARY KEY,
temperature DECIMAL(6,4),
vibration DECIMAL(6,4),
motor_rpm INT,
INDEX device_idx(device_id));
또 다른 유사한 하이브리드 테이블인 sensor_data_device2
도 예제에서 사용되었습니다.
기본 키 열에 액세스하는 쿼리 계획¶
쿼리가 자동으로 인덱스되는 테이블의 기본 키(timestamp
)를 필터링하는 경우 쿼리 프로필은 TableScan 연산자를 사용합니다. 또한 이 쿼리에는 ROW_BASED 스캔 모드가 사용된다는 점에 유의하십시오.
SELECT * FROM sensor_data_device1 WHERE timestamp='2024-03-01 13:45:56.000';
![기본 키 열, 타임스탬프를 필터링하는 쿼리를 위한 TableScan 연산자](../_images/table_scan_pk_row_based.png)
보조 인덱스에 액세스하는 쿼리 계획¶
이 프로필을 생성한 쿼리는 다음과 같습니다.
SELECT COUNT(*) FROM sensor_data_device1 WHERE device_id='DEVICE2';
이 예제에서는 IndexScan 연산자와 그 특성을 중심으로 프로필의 일부만 제공합니다. 스캔 모드는 ROW_BASED 이며, 액세스 조건자 위에 마우스를 올리면 전체 조건자를 볼 수 있습니다. 완전히 정규화된 인덱스 이름도 표시됩니다.
![액세스 조건자 및 ROW_BASED 스캔 모드를 포함한 특성이 있는 IndexScan 연산자](../_images/secondary_index_scan_with_access_predicate.png)
하이브리드 테이블의 DML에 대한 쿼리 계획¶
하이브리드 테이블의 DML 작업은 일반적으로 단일 행을 수정합니다. 예:
UPDATE sensor_data_device2 SET device_id='DEVICE3' WHERE timestamp = '2024-04-02 00:00:05.000';
TableScan 연산자에 대한 쿼리 프로필은 이 UPDATE가 하이브리드 테이블의 행 저장소에 액세스하는 것을 보여줍니다(스캔 모드는 ROW_BASED).
![단일 행 UPDATE에 ROW_BASED 스캔을 사용하는 테이블 스캔 연산자](../_images/single_row_update_table_scan.png)
캐시된 데이터의 이점을 활용하는 반복 쿼리¶
이 경우, 다음 쿼리가 하이브리드 테이블에서 빠르게 연속해서 두 번 실행된다고 가정해 보겠습니다.
SELECT device_id, AVG(temperature)
FROM sensor_data_device2
WHERE temperature>33
GROUP BY device_id;
첫 번째 쿼리는 오브젝트 저장소에서 모든 데이터를 읽습니다. 두 번째 쿼리 실행에서는 열 캐시에서 데이터의 100%를 읽습니다. 또한 이 쿼리의 스캔 모드는 COLUMN_BASED 입니다.
![캐시에서 데이터의 100%를 읽는 테이블 스캔 연산자](../_images/table_scan_cached_100_percent.png)
조인(하이브리드 테이블에서 표준 테이블로)에 대한 쿼리 계획¶
하이브리드 테이블을 표준 테이블에 조인하면 하이브리드 테이블에는 스캔에 대한 Scan Mode 특성이 표시되지만, 표준 테이블에는 표시되지 않습니다. 예를 들어, 이 조인 계획의 왼쪽에 있는 TableScan 연산자는 ROW_BASED 스캔 모드를 사용했습니다. order_header
테이블은 order_id
를 기본 키(이 예제에서는 조인 열)로 사용하는 하이브리드 테이블입니다. 다른 테이블 truck_history
는 표준 테이블입니다.
![액세스 조건자 및 ROW_BASED 스캔 모드를 포함한 조인의 하이브리드 테이블에 대한 TableScan 연산자](../_images/table_scan_join_hybrid_table.png)