Oracle Exadata (11gR2)에는 비교적 강력한 데이터베이스가 있습니다.
- cpu_count는 24입니다
- parallel_server_instances는 2입니다
- parallel_threads_per_cpu는 2입니다
Oracle Enterprise Manager (OEM)의 관찰을 통해 쿼리가 연속적으로 실행되어 성능이 끔찍했습니다. 이를 해결하기 위해 모든 테이블, 구체화 된 뷰 및 인덱스가 병렬 처리를 활용하도록 변경되었습니다. 예 :
ALTER TABLE SOME_TABLE PARALLEL (DEGREE DEFAULT INSTANCES DEFAULT);
병렬화를 켜도록 시스템이 변경되었습니다.
ALTER SYSTEM SET PARALLEL_DEGREE_POLICY = 'AUTO';
이로 인해 성능이 향상되었지만 OEM에서 단일 쿼리가 96의 DOP (사용 가능한 모든 리소스)를 묶는 경우가 종종있었습니다. 그 결과 후속 쿼리가 DOP 1 (병렬화 없음)로 다운 그레이드되었습니다. 호깅 쿼리가 완료 될 때까지 성능이 저하되었습니다.
이 문제를 해결하기 위해 모든 쿼리에 사용할 수있는 DOP를 제한하려고 시도했습니다.
ALTER SYSTEM SET PARALLEL_DEGREE_LIMIT = 24;
이것은 효과가 없었습니다. 제한을 초과하는 쿼리 (일반적으로 48 또는 96이지만 실제 패턴은 없음)가 자주 관찰됩니다.
단일 쿼리가 사용 가능한 모든 리소스를 사용하지 못하게하려면 어떻게해야합니까?