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 옵션을 사용해도 재시작이 필요하다는 것을 알 수 있습니다.
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io