복붙노트

[SQL] 내가 어떻게 벤치마킹을 위해 오라클 실행 계획 캐시를 삭제합니까?

SQL

내가 어떻게 벤치마킹을 위해 오라클 실행 계획 캐시를 삭제합니까?

오라클 10gR2의에, 나는 성능을 비교하고 있음을 여러 SQL 쿼리를 가지고 있지만, 처음 실행 한 후, V는 내가 0.5을 처음 실행 28 초에서 이동 쿼리 중 하나 그래서, SQL 테이블 캐싱에 저장된 실행 계획을 가지고 $ 초 후.

난 노력 했어

ALTER SYSTEM FLUSH BUFFER_CACHE; -이 프로그램을 실행 한 후, 쿼리는 일관되게 내가 정확 믿지 않는 5 초에서 실행됩니다.

어쩌면 캐시에서 개별 항목 자체를 삭제 생각 : 어디 SQL_TEXT처럼 브이 $ SQL에서 삭제 'SELECT * FROM .... 하지만보기에서 삭제 할 수 없다는 대한 오류가 발생합니다.

해결법

  1. ==============================

    1.베드로는 당신에게 당신이 묻는 질문에 대한 답을 주었다.

    베드로는 당신에게 당신이 묻는 질문에 대한 답을 주었다.

    alter system flush shared_pool;
    

    즉, "캐시에서 삭제 준비된 문"을 사용하는 것과 문입니다.

    (준비된 문은 유일한 문이 더보다하지, 공유 풀에서 플러시 객체되지 않습니다.)

    나는 (당신의 질문에) 내 이전 코멘트에 나타난 바와 같이, V $ SQL은 테이블이 아닙니다. 그것은 동적 성능 뷰, 오라클의 내부 메모리 구조의 편리한 테이블 같은 표현입니다. 당신은 그들로부터 동적 성능 뷰, 할 수 있습니다 삭제되지 행에 SELECT 권한을 가지고있다.

    공유 풀을 플러시하고 버퍼 캐시?

    다음은 직접 귀하의 질문에 대답하지 않습니다. 대신, 근본적으로 다른 (어쩌면 더 중요한) 질문에 답 :

    우리는 일반적으로 공유 풀 및 / 또는 쿼리의 성능을 측정하기 위해 버퍼 캐시를 플러시해야 하는가?

    즉, 대답은 '노.

    톰 카이트 꽤 잘이를 해결 생각 :

    http://www.oracle.com/technology/oramag/oracle/03-jul/o43asktom.html http://www.oracle.com/technetwork/issue-archive/o43asktom-094944.html

    <인용>

    사실, 튜닝 도구는 그렇게하지 않는 것이 중요하다. 또한, 테스트를 실행 결과를 무시하고 그 결과를 밖으로 두 세 번 평균을 실행하는 것이 중요하다. 현실 세계에서, 버퍼 캐시는 결과가 결여 될하지 않습니다. 못. 당신 조정, 당신의 목표는 논리적 I를 줄일 때 / O (LIO), 자신의 다음 물리적 I / O (PIO) 소요됩니다주의 때문이다.

    공유 풀을 비우기와 캐시를 플러시하지 않는 것보다 더 인위적 버퍼 : 이것을 고려하십시오. 대부분의 사람들은 전통적인 지혜의 얼굴에 날아 때문에, 의심이 회의적 보인다. 나는 어떻게이 작업을 수행하는 방법을 보여 드리겠습니다,하지만 그래서 당신은 테스트를 위해 사용할 수 있습니다. 오히려, 나는 그것이 쓸데 운동과 완전히 인공 (따라서 잘못된 가정에 이르게가) 왜 설명하는 데 사용할 수 있습니다. 난 그냥 내 PC를 시작했는데, 나는 큰 테이블에 대해이 쿼리를 실행했습니다. I "플러시"버퍼 캐시 및 다시 실행

    톰 카이트 정확히 권리라고 생각합니다. 성능 문제를 해결하는 측면에서, 나는 "오라클 실행 계획 캐시를 삭제하는 것은"일반적으로 신뢰할 수있는 벤치마킹하는 단계라고 생각하지 않습니다.

    하자의 주소 성능에 대한 우려.

    (인덱스 및 데이터의 모든 블록에서) 버퍼 캐시를 플러시 경우에도 당신은 (~ 28초)의 후속 실행 (~ 오초)에 비해 쿼리의 첫 번째 실행에 상당한 시간이 소요 관찰 한 것을 우리에게 알려줍니다.

    나를 위해, 그 하드 구문 분석이 일부 무거운 리프팅을하고 있음을 시사한다. 이 중 많은 일, 또는 그는 대기가 많이 발생. 이것은 조사 및 조정할 수 있습니다.

    아마도 통계가 존재하지 않는 경우 궁금하네요, 그것은 쿼리 계획을 준비하기 전에 최적화 시간 통계 수집을 많이 쓰고있다. 즉 통계를 참조 테이블, 인덱스 및 인덱스의 모든 컬럼에 수집되어, 내가 확인 할 최초의 것들 중 하나입니다.

    쿼리가 많은 수의 테이블을 조인하는 경우, CBO는 조인 순서를위한 순열의 거대한 숫자를 고려 할 수있다.

    오라클 추적의 논의는이 답변의 범위를 벗어나지 만 그 다음 단계입니다.

    나는 당신이 아마 이벤트 10053 및 10046을 추적 할거야 생각하고있다.

    다음은 유용하게 사용할 수있는 톰 카이트하여 "이벤트 10053"토론에 대한 링크는 다음과 같습니다

    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:63445044804318

    접선과 관련된 일화 이야기 재 : 하드 구문 분석 성능

    몇 년 나는 초 측면에서 첫 번째 실행, 후속 실행에 분의 관점에서 시간을 경과 한 하나 개의 쿼리를 참조했다, 백업 할 수 있습니다. 우리가 발견 한 것은 처음 실행 시간의 시간의 대부분은 하드 구문 분석에 소요 된 것이 었습니다.

    이 문제의 쿼리는 순수 (순진?)이 엄청난보고보기를 합류했다 CrystalReports 개발자에 의해 작성되었습니다.

    뷰 중 하나는 테이블 (62)의 합류하고, 다른보기는 42 개 조인 테이블이다.

    쿼리 사용 비용 기반 최적화. 이 시간을 기다릴 것을 밝혀 추적, 가능한이 조인 경로 평가하는 동안 모든 CPU의 시간이었다.

    공급 업체의 각각은 "보고"공급 전망은 그 자체로도 나쁘지 않았다,하지만 그들 중 두 가지가 결합되었을 때, 그것은 고통스럽고 느린했다. 나는 문제가 최적화 고려하고 있음을 조인 순열의 수많은이었다 생각합니다. 제한하여 옵티 마이저에 의해 고려 순열의 수 있지만, 우리의 수정 쿼리를 다시 작성하는 것을 인스턴스 매개 변수가 있습니다. 개선 된 쿼리는 다스 또는 실제로 쿼리에 의해 필요했다 테이블 있도록 합류했다.

    (초기 즉각적인 단기 '밴드 에이드 "보고서 생성 실행이 이미 사용했기 때문에 수정, 보고서 생성 작업 실행하기 전에, 일찍 아침에 쿼리의 실행을 예약 할 수 있습니다. 즉, 보고서 생성을"빨리 "보였습니다 하드 구문 분석을 피하는 공유 풀에 준비된 문장.

    밴드 원조 수정 긴 실행 시간이 발견되지 않았을 때 그냥 쿼리의 예비 실행에 문제를 이동, 진정한 해결책이 아니었다.

    우리의 다음 단계는 아마 안정된 쿼리 계획을 얻으려면 쿼리에 대해 "저장 개요"를 구현했을 것이다.

    물론, 문 재사용 (바인드 변수를 사용하여 하드 구문 분석을 피할 수)는 오라클의 규범적인 패턴이다. 그것은 성능, 확장 성, 궁시렁, 궁시렁, 궁시렁를 mproves.

    이 일화 사건은 당신이 관찰하는 문제보다는 완전히 다를 수 있습니다.

    HTH

  2. ==============================

    2.내가 오라클과 협력 이래로 동안이었다,하지만 난 실행 계획은 공유 풀에 캐시됩니다 믿습니다. 이 시도:

    내가 오라클과 협력 이래로 동안이었다,하지만 난 실행 계획은 공유 풀에 캐시됩니다 믿습니다. 이 시도:

    alter system flush shared_pool;
    

    오라클 저장 최근 디스크 IO를 최소화하기 위해 데이터를 사용하는 위치 버퍼 캐시이다.

  3. ==============================

    3.우리는 성능 조정 쿼리 최근에 많은 일을하고 있었고, 일치하지 않는 쿼리 성능에 대한 하나의 원인은 오라클에 앉아있는 파일 시스템 캐시입니다.

    우리는 성능 조정 쿼리 최근에 많은 일을하고 있었고, 일치하지 않는 쿼리 성능에 대한 하나의 원인은 오라클에 앉아있는 파일 시스템 캐시입니다.

    그것은 당신이 오라클 캐시를 플러시하는 동안 파일 시스템이 여전히 쿼리 쿼리는 여전히 빠른 반환 것을 의미 요구되는 데이터를 가지고 가능성이 있습니다.

    불행하게도, 난 파일 시스템 캐시를 삭제하는 방법을 몰라 - 난 그냥 우리의 매우 도움 시스템 관리자에서 매우 도움이 스크립트를 사용합니다.

  4. from https://stackoverflow.com/questions/858829/how-do-i-clear-oracle-execution-plan-cache-for-benchmarking by cc-by-sa and MIT license