나는 오라클에서 대규모 쿼리를 수행하는 기능을 최근에 접했습니다. 한 가지 변경으로 인해 10 시간이 소요되는 쿼리가 3 시간이 걸렸습니다.오라클 "해시 그룹"이 어떻게 작동하는지 설명 할 수 있습니까?
간략하게 요약하면, 각 좌표에는 확률이있는 많은 좌표가 데이터베이스에 저장됩니다. 그런 다음이 좌표를 50 미터 크기의 저장소 (기본적으로 가장 가까운 50 미터까지 좌표를 내림)로 '비우기'하고 확률을 합산합니다.
이렇게하려면, 쿼리의 일부는처음 나는 확률 다수의 지점을 저장하고 ', Y, X가 기 ....에서 X, Y, 합 (확률)을 선택'이고 0.1이고 쿼리는 각각 10 분 정도 소요되었습니다.
그런 다음 배포본을 조정하기 위해 확률을 계산하는 방법을 변경하라는 요청이 있었기 때문에 모든 값이 0.1이 아니라 다른 값 (예 : 0.03, 0.06, 0.12, 0.3, 0.12, 0.06, 0.03) . 동일한 쿼리를 정확히 실행하면 약 3 시간의 쿼리가 발생했습니다.
모두 0.1로 돌아가서 쿼리를 10 분으로 되돌립니다.
시스템의 쿼리 계획 및 성능을 살펴보면 오라클의 그룹화 속도를 높이기 위해 설계된 '해시 그룹'기능이 문제가되는 것처럼 보였습니다. 각 고유 x, y, 확률 값에 대한 해시 항목을 생성 한 다음 고유 x, y 값에 대한 확률을 합산하는 것입니다.
아무도이 동작을 더 잘 설명 할 수 있습니까? 답변에
추가 정보
감사합니다. 그들은 내가 무슨 일이 있었는지 확인할 수있었습니다. 저는 현재 쿼리를 실행 중이고 v $ sql_workarea_active에서 tempseg_size가 현재 7502561280이고 빠르게 증가하고 있습니다.
실행중인 개발 서버에 8GB의 RAM 만 있으면 주어진 쿼리가 임시 테이블을 사용해야하는 것처럼 보입니다.
나는 쿼리 유형을 변경하고 일부 정보를 미리 계산하여 해결할 수있었습니다.
늦은 생각 : 파티션 옵션을 사용하면 각 버킷 값 x가 단일 파티션에만 포함될 수 있도록 범위 파티션을 지정할 가치가있을 수 있습니다 (범위 분할이 실제로 작동하는 유일한 방법 임). 그런 다음 각각의 단일 파티션을 처리하는 모든 집계 쿼리를 조합에 쿼리를 재구성합니다. 이것은 각 파티션의 집합에 대한 메모리 소비를 줄이고 메모리에서 실행할 수있게합니다. –