Oracle RAC에서 alter system 명령어에서 deferred 옵션 확인

Last Updated on 1월 4, 2021 by 태랑(정현호)


Update : 2020/11/21


운영 중 바로 변경이 가능한 파라미터는 v$parameter에서는
ISSYS_MODIFIABLE 값이 'IMMEDIATE' 와 'DEFERRED'일 경우입니다


변경 가능한 파라미터 체크 해봅니다

SQL> select name,issys_modifiable from v$parameter;


FLASE: static parameter로 scope=spfile로만 값을 변경 가능합니다
즉 값을 변경해도 이후 startup 시부터 영향을 미칩니다

IMMEDIATE: 값을 변경하면 현재 session부터 바로 영향을 받게 됩니다

DEFERRED: 변경된 값이 이후 접속되는 session부터 영향을 줍니다


SQL> select name,issys_modifiable from v$parameter
      where issys_modifiable like 'DEFE%' 

NAME                                           ISSYS_MOD

------------------------------------------------------------------------------------------

backup_tape_io_slaves                  DEFERRED

audit_file_dest                                DEFERRED

object_cache_optimal_size            DEFERRED

object_cache_max_size_percent   DEFERRED

sort_area_size                               DEFERRED

sort_area_retained_size                 DEFERRED

olap_page_pool_size                      DEFERRED

 

7 rows selected.

 

많은 파라미터중 7개만 deferred 가 가능하다는걸 알수 있습니다

 

이중 object_cache_optimal_size 를 변경 해보도록 하겠습니다

object_cache_optimal_size는 캐시 크기가 최대 크기를 초과할 때 세션 객체 캐시를 어느 크기로 축소할 지 지정합니다.

사용 가능한 값: 10K ~ 운영 체제 한계치 입니다


기본값 : 100K 입니다

 

SYS:RACDB1>show parameter object_cache_optimal_size     

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        102400


현재는 102400byte -> 100KB 입니다

 

처음에는 scope=both로 테스트를 하겠습니다



1번 노드에서 204800byte로 변경 하겠습니다

SQL>alter system set object_cache_optimal_size=204800 deferred scope=both sid='*'

 

여기에서 중요한점은 deffered옵션을 scope 후에 기입하면 에러가뜹니다

scope 옵션전에 deffered 를 써주어야 합니다

 


변경후 조회 해보면 변경을 시도한 노드1은 그대로 입니다

SYS:RACDB1>show parameter object_cache_optimal_size

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------

object_cache_optimal_size                integer        102400

 

 

접속해 있던 2번노드에서 조회를 해보면

SYS:RACDB2>show parameter object_cache_optimal_size

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
 
object_cache_optimal_size                integer        102400

역시 파라미터 변경전 접속되어 있던 세션이라 변경이 적용 되지않았습니다

 

 

2번 노드로 다른세션으로 접속을 하고 난후 조회를 해보면

SYS:RACDB2-2>show parameter object_cache_optimal_size

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        204800




1번노드의 다른세션으로 접속을 하고난후 조회 해보면

SYS:RACDB1-2>show parameter object_cache_optimal_size

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        204800

 


변경후 접속된 세션부터 deferred 옵션이 적용되어 변경된
파라미터값이 인식되는걸 확인할수 있습니다

 

1번 인스턴스에서 startup force 로 해서 재시작해서
재구동된후에도 파라미터값이 유지되는지 확인

해보겠습니다

 



SYS:RACDB1>startup force

SYS:RACDB1>show parameter object_cache_optimal_size

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        204800

 

재시작후에도 파라미터값이 유지됨을 알수 있습니다

 

 

 

원래대로 102400 으로 돌린후 이번에는 scope=spfile로 해보겠습니다

 

SQL>alter system set object_cache_optimal_size=204800 deferred scope=spfile sid='*';

 

변경을 시도한 1번 인스턴스에는 당연히 변경되지않았으며

SYS:RACDB1>show parameter object_cache_optimal_size

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        102400

 

 

기존에 접속해 있던 2번 노드도 변경이 되지않음을 알수있습니다

SYS:RACDB2>show parameter object_cache_optimal_size

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        102400

 



 

1번노드의 다른세션에서 새로접속하여 조회를 해보면 새로접속했음에도
값이 변경되지않았음을
알수있으며


SYS:RACDB1-2
>show parameter object_cache_optimal_size             

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        102400

 

2번노드의 다른 새롭게 접속한 세션도 값이 변경되지않았음을 확인 할수있습니다

SYS:RACDB2-2>show parameter object_cache_optimal_size             

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        102400

테스트 결과로 spfile로 했을때는 deferred 옵션을 써도 세션레벨로 불가하고 재구동이 필요하다는 것을
알수 있습니다



다시 102400로 돌리고 scope=memory를 테스트해보겠습니다

이번에도 1번노드와 2번노드는 접속되어있는 상태이며 1-2와 2-2 세션은 변경후 접속후 확인하겠습니다

 

SQL>alter system set object_cache_optimal_size=204800 deferred scope=memory sid='*';


 

변경을 시도했던 1번노드는 값이 변경되지않았습니다

SYS:RACDB1>show parameter object_cache_optimal_size             

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        102400

 

 

접속되어있던 2번노드도 값이 변경 되지않았습니다

SYS:RACDB2>show parameter object_cache_optimal_size             

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------
object_cache_optimal_size                integer        102400




새롭게 접속한 1번노드의 다른 세션은 변경된값이 적용받은걸 확인할수 있으며

SYS:RACDB1-2>show parameter object_cache_optimal_size             

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------

object_cache_optimal_size                integer        204800




새롭게 접속한 2번노드의 다른 세션은 변경된 값이 적용됬음을 알수 있습니다

SYS:RACDB2-2>show parameter object_cache_optimal_size             

NAME                                                 TYPE           VALUE

------------------------------------------------------------------------------------------

object_cache_optimal_size                integer        204800




이로써 both와 memory는 새롭게 접속한 세션부터는 변경된 파라미터값을 받을수 있지만
spfile은 deferred 옵션을 사용해도 재구동이 필요하다는 것을 알수 있습니다

답글 남기기