OS환경 : Oracle Linux 7.4 (64bit)
DB 환경 : Oracle Database 19.3.0.0
방법 : 오라클 19c cpu_count 파라미터 인스턴스 케이징
오라클에는 cpu_count 라는 파라미터가 존재함
이 파라미터의 값은 v$osstat 뷰에 있는 NUM_CPUS value 값에 의해 결정됨(서버의 cpu 코어수)
v$osstat 뷰 확인
1
2
3
4
5
|
SQL> select value from v$osstat where stat_name = 'NUM_CPUS';
VALUE
----------
1
|
cpu_count 값 확인
1
2
3
4
5
|
SQL> show parameter cpu_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 1
|
db 및 서버를 종료하고 서버의 cpu 코어수를 4개로 증가 시킨 뒤 db 기동후 확인해보면
4로 변경되어 있는것을 확인할 수 있음
v$osstat 뷰 및 cpu_count 파라미터 확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL> select value from v$osstat where stat_name = 'NUM_CPUS';
VALUE
----------
4
SQL> show parameter cpu_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 4
|
만약 한 서버에 db 인스턴스가 여러개인 경우 필요에 따라 개별 인스턴스별로 cpu 사용을 제한할수 있음
이 기능을 인스턴스 케이징(instance caging)이라고 부름
인스턴스 케이징은 두가지 방식으로 사용이 가능함
1. 파티션 방식(partition)
이 방식을 사용할때는 각 인스턴스들의 cpu_count 전체 합이 v$osstat 뷰에서 볼수 있는 cpu 수보다 작거나 같음
파티션 방식은 성능이 중요한 DB에 적합함
사용시 예시를 들자면 서버의 cpu 코어 총 갯수가 4인경우에 해당 서버에 인스턴스가 3개 존재할 때, 1번 인스턴스에게 cpu_count를 1을 주고, 2번 인스턴스에게 cpu_count를 2를 주고, 3번 인스턴스에게 cpu_count를 1을 줄수 있음
이 경우 전체 cpu_count 합은 cpu 수와 같은 4가 됨
그리고 각 인스턴스는 cpu_count를 각각 25%, 50%, 25% 씩 나눠서 사용함
이 방식의 단점은 개별 인스턴스에서 사용하지 않는 cpu를 다른 인스턴스에서 사용할 수 없다는 점임
2. 초과구독 방식(over-subscribe)
이 방식을 사용하면 cpu_count의 합계가 v$osstat에 나온 값에서 3배 이하까지 사용가능함
예를 들어서 cpu가 4개 존재하는 서버일 경우 최대 1번 인스턴스에게 cpu_count 2를 주고, 2번 인스턴스에게 cpu_count를 2를 주고, 3번 인스턴스에게 cpu_count를 2을 줄수 있음
이 경우 전체 cpu_count 합은 cpu 수(4)보다 큰 6이 됨 (참고로 cpu_count의 최대합은 4(cpu) * 3(배) = 12 보다 작아야함)
이때 각 인스턴스가 cpu를 최대로 사용하는 경우 cpu 경합이 일부 발생할 수 있음
그리고 만약 모든 인스턴스가 항상 cpu를 최대로 사용해야하는 경우 서버를 분할해야함
그리고 인스턴스 케이징을 재기동 없이 동적으로 변경할 수 있고 변경 사항은 몇 초 내에 적용됨
하지만 cpu_count 값을 너무 자주 변경하면 약간의 오버헤드가 발생할 수 있어 필요시에만 조정하는것을 권장함
그리고 이 값을 1로 설정하거나 값을 매우 작은 숫자에서 매우 큰 값으로 변경하지 않는 것이 성능상 좋음
인스턴스 케이징(cpu 케이징) 적용 방법
기존 인스턴스 케이징 파라미터 및 cpu_count 파라미터 확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL> select instance_caging from v$rsrc_plan where is_top_plan = 'TRUE';
INS
---
OFF
SQL> show parameter cpu_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 4
|
현재 인스턴스 케이징이 OFF 이고 cpu_count는 4임
cpu_count 변경 및 RESOURCE_MANAGER_PLAN 파라미터 활성화
1
2
3
4
5
6
7
|
SQL> alter system set cpu_count = 2;
System altered.
SQL> alter system set resource_manager_plan = 'default_plan';
System altered.
|
인스턴스 케이징 파라미터 및 cpu_count 파라미터 재확인
1
2
3
4
5
6
7
8
9
10
11
|
SQL> select instance_caging from v$rsrc_plan where is_top_plan = 'TRUE';
INS
---
ON
SQL> show parameter cpu_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 2
|
인스턴스 케이징이 ON으로 변경되고 cpu_count도 2로 변경됨
인스턴스 케이징 모니터링
v$rsrcmgrmetric_history 뷰를 이용해 모니터링이 가능함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SQL>
select to_char(begin_time, 'HH24:MI:SS') time, sum(avg_running_sessions) avg_running_sessions, sum(avg_waiting_sessions) avg_waiting_sessions
from v$rsrcmgrmetric_history
group by begin_time
order by begin_time;
TIME AVG_RUNNING_SESSIONS AVG_WAITING_SESSIONS
----- -------------------- --------------------
11:31 .060507042 0
11:32 .004579896 0
11:33 .002946044 0
11:34 .004024247 0
11:35 .003823237 0
11:36 .003244496 0
6 rows selected.
|
컬럼 설명
avg_running_sessions : 해당 분 동안 실행 중인 평균 세션 수
이 값이 cpu_count보다 훨씬 작은 경우 인스턴스는 해당 cpu_count 할당을 완전히 활용하지 않다는 뜻
이 경우 성능에 영향을 주지 않고 cpu_count를 줄일 수 있음
avg_waiting_sessions : 해당 분 동안 예약 대기 중인 평균 세션 수
이 값이 계속 0보다 큰 경우 cpu_count를 이 숫자만큼 늘려서 인스턴스의 성능을 향상시킬 수 있음
참조 : 1362445.1
'ORACLE > Admin' 카테고리의 다른 글
오라클 19c OCP, OCM 자격증 취득 관련 내용 (13) | 2023.12.20 |
---|---|
오라클 19c 인터벌 파티션 테이블 주기적으로 삭제 (0) | 2023.12.19 |
오라클 19c 파티션 테이블 high_value 컬럼 잘라서 보는 방법 (0) | 2023.12.13 |
오라클 19c 테이블 생성 시 unrecoverable 옵션 (0) | 2023.12.11 |
오라클 무료 모니터링 툴 ASH Viewer 사용법 (0) | 2023.12.11 |