oracle SPM
SQL> select* from table(dbms_xplan.display_cursor('76rrg3a06j24n',0));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 76rrg3a06j24n, child number 0
-------------------------------------
select * from hr.emp where EMPLOYEE_ID=206
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)| |
|* 1 | TABLE ACCESS FULL| EMP | 1 | 133 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
기본 라인 만 들 기:
declare
v_ret varchar2(100);
begin
v_ret := dbms_spm.load_plans_from_cursor_cache(sql_id=>'76rrg3a06j24n');
end;
검사 기준:
select sql_handle,sql_text,origin,version,enabled,accepted,fixed from dba_sql_plan_baselines
SQL_HANDLE SQL_TEXT ORIGIN VERSION ENABLED ACCEPTED FIXED
SQL_4313a2ffff308f08 MANUAL-LOAD 11.2.0.4.0 YES YES NO
색인 만 들 기:
create index i_employee_id on hr.emp(employee_Id);
다시 실행, child 검사number: select sql_id,child_number,sql_text ,child_Number from v$sql where sql_text like 'select %hr.emp%';
SQL_ID CHILD_NUMBER SQL_TEXT CHILD_NUMBER
76rrg3a06j24n 1 select * from hr.emp where EMPLOYEE_ID=206 1
실행 계획 보기:
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 266 | 2 (0)| 00:00:01 |
|* 1 | TABLE ACCESS FULL| EMP | 2 | 266 | 2 (0)| 00:00:01 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("EMPLOYEE_ID"=206)
Note
-----
- SQL plan baseline "SQL_PLAN_464x2zzzm13s8d8a279cc" used for this statement
여전히 전체 표 스 캔, 이것 은 비 과학적 이 고 이론 적 으로 색인 을 걷 는 것 입 니 다. 그 는 설명 을 했 습 니 다. 가 는 것 은 SQL 입 니 다.PLAN_464 x2zzzm13s8d8a279cc, 검사 dbasql_plan_baselines
SQL_HANDLE SQL_TEXT ORIGIN VERSION ENABLED ACCEPTED FIXED PLAN_NAME
SQL_4313a2ffff308f08 MANUAL-LOAD 11.2.0.4.0 YES YES NO SQL_PLAN_464x2zzzm13s8d8a279cc
SQL_4313a2ffff308f08 AUTO-CAPTURE 11.2.0.4.0 YES NO NO SQL_PLAN_464x2zzzm13s8f5e7e8ee
여기 서 사실 그 는 다른 실행 계획 을 포착 했다. 그러나 사용 하지 않 았 기 때문에 전체 표 스 캔 을 통 해 새로운 실행 계획 을 사용 했다.
declare
tp clob;
begin
tp:=dbms_spm.evolve_sql_plan_baseline(sql_handle=>'SQL_4313a2ffff308f08',plan_name=>'SQL_PLAN_464x2zzzm13s8f5e7e8ee');
end;
다시 실행:
Plan hash value: 1162342648
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 133 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 133 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | I_EMPLOYEE_ID | 1 | | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("EMPLOYEE_ID"=206)
Note
-----
- dynamic sampling used for this statement (level=2)
- SQL plan baseline "SQL_PLAN_464x2zzzm13s8f5e7e8ee" used for this statement
자, 정상 적 인 실행 계획 을 세 웠 습 니 다. 좋 은 base 를 다시 삭제 하 겠 습 니 다.line:
declare v_ret varchar2(100);
begin
v_ret:= dbms_spm.drop_sql_plan_baseline(sql_handle=>'SQL_4313a2ffff308f08',plan_name=>'SQL_PLAN_464x2zzzm13s8f5e7e8ee');
end ;
의심 할 여지없이, 또 시계 전 체 를 스 캔 했 지만, dbahist_sql_plan_baselines 에 서 는 여전히 생 성 되 어 있 습 니 다. 사용 하지 않 았 을 뿐 입 니 다.상태 수정:
declare
v_ret varchar2(100);
begin
v_ret := dbms_spm.alter_sql_plan_baseline(
sql_handle=>'SQL_4313a2ffff308f08',
plan_name=>'SQL_PLAN_464x2zzzm13s8d8a279cc',
attribute_name=>'enabled',
attribute_value=>'NO'
);
end;
실행 계획 을 보 려 면 둘 다 사용 하지 않 았 습 니 다. 이것 은 변 경 된 인자 (optimizer use sql plan baselines = false) 와 같 습 니 다: Execution Plan
----------------------------------------------------------
Plan hash value: 1162342648
---------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 133 | 2 (0)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID| EMP | 1 | 133 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | I_EMPLOYEE_ID | 1 | | 1 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("EMPLOYEE_ID"=206)
Note
-----
- dynamic sampling used for this statement (level=2)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activemq 5.5 의 입문 은 설치, 시작, 데이터베이스 지속 화 를 포함한다Apache ActiveMQ 5.5.0 은 주로 유지보수 버 전 으로 130 개가 넘 는 문 제 를 복 구 했 으 며 대부분 bug 와 개선 이 었 다. Improved performance for offline d...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.