프린트 하기

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 19.10.0.0

 

에러 : SPM: 1 expired sql plan baselines auto-purged.

19c의 alert log 에서 볼수 있는 메세지

1
2
3
$ vi alert.log
2023-01-25T05:48:30.993539+09:00
SPM: 1 expired sql plan baselines auto-purged.

 

 

해결 방법 : 자동으로 purge 된 spm baseline 을 알려주는 메세지 

자동으로 purge 된 spm baseline 을 알려주는 메세지 

에러가 아님

메세지 그대로 1개의 만료된 sql plan baseline이 자동으로 삭제되었다는 메세지

 

 

원인 : dba_sql_plan_baselines 뷰에서 autopurge 가 YES 인 baseline이 일정기간뒤 자동으로 삭제됨

dba_sql_plan_baselines 뷰에서 autopurge 가 YES 인 baseline이 일정기간뒤 자동으로 삭제됨

 

 

autopurge가 YES인 spm baseline 확인

1
2
3
4
5
6
7
8
SQL>
select count(*) as " purgeable baselines count"
from   dba_sql_plan_baselines
where  autopurge = 'YES';
 
 purgeable baselines count
--------------------------
            61

 

 

몇주가 지나면 자동으로 지워지는지 확인

1
2
3
4
5
6
7
8
9
10
11
SQL>
set lines 200 pages 1000
col parameter_name for a20
col parameter_value for a20
select parameter_name,parameter_value 
from dba_sql_management_config 
where parameter_name = 'PLAN_RETENTION_WEEKS';
 
PARAMETER_NAME         PARAMETER_VALUE
-------------------- --------------------
PLAN_RETENTION_WEEKS 53

53주동안 사용하지 않으면 자동으로 지워짐

 

 

아래 명령을 이용해 보관기간 변경가능

1
2
3
SQL> exec DBMS_SPM.CONFIGURE('PLAN_RETENTION_WEEKS',60);
 
PL/SQL procedure successfully completed.

 

 

다시 확인

1
2
3
4
5
6
7
8
9
10
11
SQL>
set lines 200 pages 1000
col parameter_name for a20
col parameter_value for a20
select parameter_name,parameter_value 
from dba_sql_management_config 
where parameter_name = 'PLAN_RETENTION_WEEKS';
 
PARAMETER_NAME         PARAMETER_VALUE
-------------------- --------------------
PLAN_RETENTION_WEEKS 60

정상적으로 60주로 변경됨

 

 

참조 : 1438701.1, 1359841.1

https://blogs.oracle.com/optimizer/post/what-you-need-to-know-about-sql-plan-management-and-auto-capture