이것은 최초의 식료품 점 (450) 기사입니다
그는 계획 "비정상적인 경우 변경 계획의 구현 - 여러 가지 방법으로 소문 쿼리 실행 계획을"의 오라클 구현하는 방법에 대한 기사를 작성했다 SQL의 실행 계획을 얻기 위해 다양한 방법을 설명 리앙 선생님의 책 " 수확이 더 많은 SQL 최적화 "않고, 여러 가지 방법 등 단계, 장점과 단점, 응용 프로그램 시나리오를 획득의 측면에서 체계적인 순서를 수행하려면 학습 비교할 수 있습니다,
방법 |
취득 단계 |
이점 |
결점 |
시나리오 |
---|---|---|---|---|
에 대한 계획을 설명 |
단계 1 : 단계 2 SQL 실행될 계획을 설명하는 표에서 *을 선택 (dbms_xplan.display ()); PS 편의 표시 형식에 대해 설정 될 수 있으며, 예를 들어 설정된 길이 10000set 페이지 크기 10000set LINESIZE 10000 |
실제 구현, 빠르고 편리한없이 |
3 테이블 방문한 횟수를 판별 할 수없는 런타임 통계 관련 출력 ;. 2 개 프로세스는 얼마나 많은 행 결정할 수 (논리 번호가 판독 얼마나 많은 재귀 호출 물리적 시간 횟수를 생성)도 없다 (1); |
는 SQL 실행 시간이 결과를 추측하는 데 오랜 시간이 아닌지 경우 결과를 반환 |
에 설정 AUTOTRACE |
1 단계 : 2 단계에서 설정 자동 추적 : 여기 당신의 SQL을 수행 |
1. 관련 통계 정보가 런타임에 출력을 할 수있다 (얼마나 많은 물리적 읽기의 경우 여러 번 전화를 재귀 방법을 읽을 수 많은 로직, 생산), 문들이 출력 실행 계획을 할 수 전에 완료해야 대기하는 동안 2 만 traceonly 스위치가 있습니다 화면 출력을 연주하지 않는 결과로 돌아 제어; |
이 테이블에 액세스 할 때 얼마나 많은 시간을 볼 수 없습니다 1. 문이 완료 사실입니다 때까지 기다려야,이 결과 될 수있다; |
나는 10046 추적 방법으로 설명이 방법을 사용하여, 약 재귀 호출 재귀 호출의 수를 알고 싶어요 |
STATISTICS_LEVEL = 모든 |
1 단계 : ALTER 세션 설정 STATISTICS_LEVEL 모든 =; 2 단계 : 여기 당신의 SQL을 실행, 3 단계 : 테이블에서 선택 * (dbms_xplan.display_cursor (NULL, NULL) 'allstats 지난'); |
분명히 테이블로부터 유도 될 수있다 1. 시작되면 여러 번 액세스;입니다 2 행수 명확 정확하게 오라클 평가의 정확성을 판단 할 수함으로써 예측 및 E-ROWS로부터 라인 수와 실제 A-ROWS을 할 수 있고, 수득 3 런타임 출력에 대한 명확한 통계하지만, 실행 계획 BUFFERS 있지만 논리적 읽기의 실제 값이다; |
(2) 출력이 기록 화면을 명중 제어 할 수 traceonly 출력 레코드를 표시하거나하지 않도록 제어하고 자동 추적 할 수 없으며; 3. 재귀 호출의 수를 볼 수 없습니다를 참조 1. 문이 완료 사실입니다 때까지 기다릴 필요가, 결과 일 수있다 실제 판독 값 없음; |
액세스 테이블의 수를 얻기 위해 단지 3 사용 |
dbms_xplan.display_cursor |
테이블 (dbms_xplan.display_cursor ( '& SQL_ID')) *로부터 선택하고, 상기 공유 풀로부터 수득 된 |
1. 알고 즉시 사용 가능한 실행 계획을 SQL_ID, 같은없이 실행을위한 계획을 설명 2. 실제 실행 계획을 얻을 수 있습니다; |
3 테이블 방문한 횟수를 판별 할 수없는 런타임 통계 관련 출력 ;. 2 개 프로세스는 얼마나 많은 행 결정할 수 (논리 번호가 판독 얼마나 많은 재귀 호출 물리적 시간 횟수를 생성)도 없다 (1); |
스트립에게 SQL 실행 계획 케이스의 수를 관찰 |
이벤트 10046 추적 추적 |
1 단계 : ALTER 세션 설정 이벤트 '영원히 10046 추적 이름 컨텍스트, 레벨 12'(열린 트랙) 2 단계 : 단어 실행, 3 단계 : ALTER 세션 설정 이벤트 '오프 10046 추적 이름 컨텍스트'(오프 트랙); 4 단계 : 추적 후 생성 된 파일 찾는 단계 5 : TKPROF TRC 파일 목적지; |
1.으로는 대기 이벤트를 해당 SQL 문을 볼 수 있으며, SQL 문이 함수 호출, SQL은 SQL을 가지고있다 2. 경우, 모두 어디 숨기려면 표시됩니다 3 쉽게 행의 수를 처리 함을 알 수있다 도 5는 전체 패키지를 추적 할 수 있으며, 물리적 논리 ;. 4 쉽게 분석 시간과 실행 시간을 알 수있다 읽기 생성; |
1 단계 성가신, 너무 많은 문제 2 테이블에 액세스 할 때 얼마나 많은 시간을 확인할 수 명확하게 표시하지 않는 실행 계획의 3 술어 부분; |
는 SQL 함수, 함수를 포함하고 등등 SQL,,, 다층 전화의 존재를 설정하면, 우리는 정확한 분석 만이 방법을 사용할 수 있습니다 원하는 |
awrsqrpt.sql |
1 단계 : @ / RDBMS / 관리 / awrsqrpt.sql, 2 단계 :? A (스냅인을 시작과 끝 스냅) 중단 원하는 선택, 3 단계 : 당신의 SQL_ID를 입력; |
당신은 쉽게 여러 실행 계획을 볼 수 있습니다; |
너무 많은 문제를 취득하는 과정; |
나는이 방법을 사용하는 여러 SQL 실행 계획의 스트립을보고 싶어 |
가장 정확한 가능한 실행 계획을 얻기 위해서는, 가장 중요한 점은, 해당 실행 계획은 대부분의 실제, 또는, 추정을 통해 것이다 획득의 편차가있다이 진정 만 정말 수행 SQL 실행이다 ,
, 편집 영상 포맷뿐만 아니라, 엑셀 형식을 마무리 용이하게하기 위해, 당신은 다운로드 할 수 있습니다,
1. 사진 형식
https://github.com/bisal-liu/oracle/blob/master/explain/%E6%89%A7%E8%A1%8C.png
2. 엑셀 형식
https://github.com/bisal-liu/oracle/blob/master/explain/%E6%89%A7%E8%A1%8C.xlsx