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

Share

Last Updated on 1월 21, 2024 by Jade(정현호)

 

운영 중 바로 변경이 가능한 파라미터는 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 옵션을 사용해도 재시작이 필요하다는 것을 알 수 있습니다.

 

0
글에 대한 당신의 생각을 기다립니다. 댓글 의견 주세요!x