[운영 종료] TmaxTibero Tech Blog

티맥스티베로 공식 블로그는 https://tmaxtibero.blog/ 로 이전되었습니다.

티맥스티베로 공식 블로그 이전 자세히보기

Admin, 환경설정

[Tibero] Tibero 운영 가이드 for beginner (6)

TmaxTiberotech 2023. 5. 12. 14:24

Tibero를 모니터링 할 수 있는 쿼리 및 Command를 안내합니다.

4. Tibero Monitoring

4.1. Instance/Database Info

Column
Description
Instance Name
노드 별 인스턴스 이름
Database Name
데이터베이스 이름
Version
티베로 버전 정보
Status
데이터베이스 OPEN Mode
NLS Character
캐릭터셋 정보(NLS_CHARACTERSET/NLS_NCHAR_CHARACTERSET)
Log Mode
로그 모드(NOARCHIVELOG/ARCHIVELOG)
DB Create Time
DB 생성 시간
DB Uptime
DB 가동 시간

 

Example
set linesize 160
col "Instance Name" format a15
col "Database Name" format a15
col "Version" format a24
col "Status" format a12
col "NLS Character" format a20
col "Log Mode" format a13
col "DB Create Time" format a20
col "DB Uptime" format a15
select i.instance_name "Instance Name"
          , d.name "Database Name"
          , v.vv "Version"
          , d.open_mode "Status"
          , c.cc "NLS Character"
          , d.log_mode "Log Mode"
          , to_char(d.create_date,'YYYY/MM/DD HH24:MI:SS') "DB Create Time"
          , floor(xx)||'d '||floor((xx-floor(xx))*24)||'h '||floor( ((xx - floor(xx))*24 -
floor((xx-floor(xx))*24) )*60 )||'m' as "DB Uptime"
from v$database d
        , ( select instance_name, (sysdate-startup_time) xx
            from v$instance
        ) i
        , ( select aggr_concat(value, ' ') vv
            from v$version
            where name in ('PRODUCT_MAJOR', 'PRODUCT_MINOR', 'BUILD_NUMBER',
'STABLE_VERSION')
              ) v
        , ( select aggr_concat(value, '/') cc
             from _dd_props
             where name in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET')
          ) c
/
Instance Name Database Name Version    Status                     NLS Character Log Mode
DB Create Time                DB Uptime
--------------------- ---------------------- ------------- ---------------- ---------------------------- ----------------------------
-------------------------           ----------------------------------------------
tac1                  tac                                6 159159 FS07_CS_1808     READ WRITE UTF8/UTF16
NOARCHIVELOG             2018/10/10 15:26:08 1d 3h 47m

4.2. Memory Info

Memory 영역 모니터링은 데이터베이스 성능과 밀접히 연관되어 있습니다.

대표적으로 악성 sql 로 인해 불필요한 Disk I/O 가 많이 발생된다면 메모리 재 사용률은

떨어지게 되고 DB 전체 성능이 안좋아지게 됨으로써 낮은 Hit Ratio 결과로 보여질 것 입니다.

이 때, 성능 진단 6.1 TPR 또는 5.7 Top SQL Info 를 통해 문제되는 sql 을 찾아 Tunning 함으로

DB 전체의 성능을 향상시킬 수 있습니다.

4.2.1. Tibero Memory Info

Item
Description
MEMORY_TARGET 값
인스턴스가 사용 가능 메모리 최대
TSM/SGA(Used)
인스턴스에서 사용하는 공유 메모리 값
PGA(Allocated)
할당되어 진 PGA(세션단위로할당) 메모리 총 값
PGA(Used)
사용 중 인 PGA 메모리 총 값

 

Example
set linesize 130
select name, round(value/1024/1024, 2) "Size(MB)"
from v$parameters
where name = 'MEMORY_TARGET'
union all
select 'TSM/SGA(Used)' name, round(sum(used)/1024/1024, 2) "Size(MB)"
from v$sga
where name in ('FIXED MEMORY', 'SHARED POOL MEMORY')
union all
select 'PGA(Allocated)' name, round(sum(value)/1024/1024, 2) "Size(MB)"
from v$pgastat
where name in ('FIXED pga memory', 'ALLOCATED pga memory')
union all
select 'PGA(Used)' name, round(value/1024/1024, 2) "Size(MB)"
from v$pgastat
where name = 'USED pga memory (from ALLOCATED)'
/
NAME                                                                     Size(MB)
---------------------------------------------------------------- --------------
MEMORY_TARGET                                                     2048
SGA(Used)                                                                836.43
PGA(Allocated)                                                            367.8
PGA(Used)                                                                  63.74

4.2.2. Buffer Hit Ratio

Item
Description
Database Buffer
데이터를 메모리에서 처리 한 확률 수치입니다.
통상적으로 90% 이상이 정상이나, 업무 특성 및 시점(batch수행)에 따라
낮을 수 있습니다.

 

Example
set linesize 132
set feedback off
col "Time" format a19
SELECT TO_CHAR(sysdate,'yyyy/mm/dd hh24:mi:ss') "Time"
                                              ,"Physical read"
              ,"Logical read"
              ,"Hit"
              ,CASE WHEN "Hit" > 90 then 'Good'
                        WHEN "Hit" between 70 and 90 then 'Average'
                        ELSE 'Not Good'
               END as "Status"
FROM
  (
  SELECT pr1.value + pr2.value "Physical read"
                ,bg1.value + bg2.value + bg3.value "Logical read"
                ,ROUND( (1 - (pr1.value + pr2.value) / (bg1.value + bg2.value + bg3.value) ) * 100, 2) "Hit"
FROM v$sysstat pr1, v$sysstat pr2,
           v$sysstat bg1 , v$sysstat bg2 , v$sysstat bg3
WHERE pr1.name = 'block disk read'
  and pr2.name = 'multi block disk read - blocks'
  and bg1.name = 'consistent block gets'
  and bg2.name = 'consistent multi gets - blocks'
  and bg3.name = 'current block gets'
)
/
Time                         Physical read         Logical read        Hit Status
--------------------------  ------------------ ----------------------- ---------- --------
2019/01/09 11:09:05              4752               1139327    99.58 Good

4.2.3. Shared Cache Hit Ratio

Item
Description
SQL(Library) Cache
사용자가 문장을 수행할 때 SQL 과 Parse Tree, Plan 등을 저장하여
공유하는 메모리 공간입니다.
통상적으로 90% 이상이 정상이나 업무 특성을 고려해 모니터링 합니다.
Dictionary Cache
SYSTEM TABLESPACE 에 저장되어 있는Data Dictionary 정보가
Shared Pool에 상주하는 부분으로 Tibero 데이터베이스에 저장된
모든 객체 및 이와 관련된 정보들 을 저장하는 시스템 테이블들이
로딩되는 영역입니다.
유저가 실행한 SQL 문장을 파싱할 때 Syntax와 접근 권한 등을
확인하면서
참조되고 공유하는 내용이므로 Shared Pool 영역에
저장됩니다. 
Hit율이 95%이하일 때는 Shared Pool 사이즈를
늘려줍니다.

 

Example
set linesize 132
set feedback off
col "Time" format a19
SELECT TO_CHAR(sysdate,'yyyy/mm/dd hh24:mi:ss') AS "Time"
             , 'SQL(Library) Cache' AS "Name"
             , hit AS "Hit(%)"
             , CASE WHEN hit > 90 then 'Good'
                     WHEN hit between 70 and 90 then 'Average'
                     ELSE 'Not Good'
               END AS "Status"
FROM ( SELECT gethitratio AS hit
               FROM v$librarycache
               WHERE namespace= 'SQL AREA' )
UNION ALL
SELECT TO_CHAR(sysdate,'yyyy/mm/dd hh24:mi:ss') AS "Time"
             , 'Dictionary Cache' AS "Name"
             , hit AS "Hit(%)"
             , CASE WHEN hit > 90 then 'Good'
                    WHEN hit between 70 and 90 then 'Average'
                    ELSE 'Not Good'
               END AS "Status"
FROM ( SELECT ROUND((1- sum(miss_cnt)/(sum(hit_cnt+miss_cnt)))*100, 2) AS hit
              FROM v$rowcache )
/
Time                          Name                          Hit(%) Status
---------------------------- ---------------------------- --------- ----------
2019/01/09 11:09:27 SQL(Library) Cache     98.44 Good
2019/01/09 11:09:27 Dictionary Cache          97.31 Good