Table of Contents | ||
---|---|---|
|
개요
...
본 문서는 Altibase 모니터링을 위해 기본적으로 습득해야 할 사항과 그에 따른 일반적인 모니터링 쿼리 예시를 제시하는 문서로 아래와 같이 크게 3개의 섹션으로 구성되어 있다.
...
Note |
---|
이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다. 이 문서에 포함된 Altibase 제품의 특징이나 기능의 개발, 발표 등의 시기는 Altibase 재량입니다. Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다. |
Altibase 모니터링 개요
...
Altibase 모니터링을 위한 기본적인 사항에 대해 설명한다.
모니터링 분류
...
Altibase는 DBMS이다. DBMS 모니터링은 아래와 같이 크게 3가지로 분류할 수 있다.
...
- 내부 모니터링
데이터 딕셔너리에 대한 쿼리를 통한 DBMS 내부에서의 모니터링을 의미한다. - 외부 모니터링
OS 명령어를 통한 DBMS 외부에서의 모니터링을 의미한다. - trace로그 모니터링
DBMS에 의해 기록되는 각종 trace로그에 대한 모니터링을 의미한다.
데이터 딕셔너리
...
데이터베이스에 대한 모든 정보를 요약 및 저장하여 DBMS를 효율적으로 사용할 수 있도록 하는 것으로 Altibase 데이터 딕셔너리는 두 가지로 구성되어 있다.
...
- 성능 뷰 (performance view)
SELECT 시점에 Altibase 내부의 상태 정보를 뷰 형태로 제공되는 것으로 Altibase 상태의 최신 정보를 얻을 수 있다. 이 역시 SELECT만 가능하며 성능 뷰의 접두어는 'v$'이다.
모니터링 방법
...
현업에서 일반적으로 사용하는 모니터링 방법은 아래와 같다.
- 쉘 스크립트 작성
- 응용프로그램 작성
- 유틸리티 활용
Altibase 메타테이블 및 성능 뷰
...
Altibase 내부 모니터링을 위해서는 Altibase 데이터 딕셔너리인 메타테이블과 성능 뷰에 대한 이해가 우선적으로 필요하다.
...
이에 앞서 숙지해야 할 사항에 대해 설명한다.
ERD 표기에 관하여
...
사용자의 이해와 쿼리 편의를 고려하여 기반 테이블이 존재하지 않는 성능 뷰 특성을 무시, 아래와 같이 성능 뷰를 테이블로 표현하여 조인 시 참고할 주요 키를 FK 형태로 표현하였다.
...
또한, 위 ERD에서 메타테이블의 ID 컬럼과 성능 뷰의 META_ID 컬럼처럼 동일한 속성의 컬럼이 메타테이블 및 성능 뷰에 따라 서로 다른 이름일 수 있는데, 이런 경우는 컬럼에 동일한 색상을 주어 같은 속성임을 나타냈다.
유의사항
...
Altibase 메타테이블과 성능 뷰는 아래와 같은 특성이 있음을 유의해야 한다.
- 동일한 속성의 컬럼이 메타테이블 및 성능뷰에 따라 서로 다른 이름일 수 있다.
- Altibase 버전에 따라 메타테이블 및 성능 뷰의 컬럼이름이 변경되거나 삭제될 수 있다.
- Altibase 버전에 따라 메타테이블 및 성능 뷰가 추가되거나 삭제될 수 있다.
용어
...
설명에 앞서 혼동이 발생할 수 있는 일부 용어에 대한 정의이다.
...
- 세션 (session)
Altibase에 접속한 사용자의 접속 단위를 의미한다. 하나의 사용자는 동시에 여러 개의 세션을 가질 수 있다. - 구문 (statement)
트랜잭션에서 수행되는 SQL 하나하나를 의미하는 용어로 문맥에 따라 'SQL (구)문', 'Query', '질의(문)', '쿼리(문)'는 모두 동일한 의미를 가지는 경우가 많다. 본 문서에서는 '쿼리'로 통일한다. - 메모리DB GC (garbage collector) or GC
사용자가 commit을 수행하면 MVCC(Multi Versioning Concurrency Control, 다중레코드동시제어) 기법에 의해 유지되던 변경전의 레코드는 삭제가 되어야 한다.
Altibase는 변경전의 레코드 삭제를 위해 별도 스레드를 운영하는데, 이를 각각 메모리 DB GC, 디스크 DB GC라 칭한다. 하지만, Altibase v5.3.3부터 디스크 DB의 MVCC 방식이 변경되어 디스크 DB GC가 없어지면서 메모리 DB GC만 존재하기에 줄여서 GC 또는 Ager라 한다.
세션, 쿼리, 트랜잭션, Lock, 서비스 쓰레드, 메모리DB GC 관련 주요 메타테이블 및 성능 뷰
...
메타테이블 및 성능 뷰를 통하여 실시간으로 세션, 쿼리, 트랜잭션, Lock, 서비스쓰레드, 메모리DB GC 상태를 확인 가능하다. 관련 조인쿼리 시 참고할 주요 키 컬럼만 표기한 메타테이블 및 성능 뷰의 관계는 아래와 같다.
...
참고로 이중화를 수행으로 인한 트랜잭션도 v$transaction, v$lock, v$lock_wait를 활용하나 세션번호, 쿼리번호가 없는 이중화 트랜잭션 특성상 이중화 섹션에서 별도로 언급하는 것으로 한다.
주요 메타테이블
...
- SYS_USERS_
데이터베이스 사용자의 정보가 저장된 메타테이블로 사용자이름(USER_NAME)과 같은 정보를 확인할 수 있어 가장 기본적으로 활용된다.
...
- SYS_TABLES_
테이블(큐테이블 포함)뿐만 아니라 시퀀스, 뷰의 정보도 함께 저장한 메타테이블로 해당 객체 이름(TABLE_NAME)과 같은 정보를 확인할 수 있어 SYS_USERS_와 함께 기본적으로 활용된다.
주요 성능 뷰
...
- v$session
현재 접속되어 있는 사용자의 세션 정보를 나타내는 성능 뷰이다.
...
- v$lock_statement
현재 Lock을 획득한 트랜잭션에서 가장 마지막에 수행된 구문을 나타내는 성능 뷰로 Lock 발생시 관련 세션 및 구문에 대한 신속한 확인을 위해 주로 활용된다.
테이블스페이스, 테이블, 컬럼, 인덱스, 제약조건 관련 주요 메타테이블 및 성능 뷰
...
Altibase Hybrid DBMS 특성상 테이블스페이스, 테이블에 대한 정보를 메모리 또는 디스크에 따라 별도(TBS, TABLE 박스 참조)로 확인이 가능하게끔 되어있으며 세그먼트의 경우는 v$segment와 관계(보라색)된 각각의 성능 뷰를 통해 상세한 자원 사용 현황을 확인할 수 있다.
...
참고로 표기는 되지 않았지만 SYS_USERS_, SYS_TABLES_을 제외한 모든 메타테이블은 쿼리 편의를 고려하여 USER_ID와 TABLE_ID 컬럼이 모두 존재한다. 성능 뷰 v$segment와 v$index 역시 테이블별 합산을 고려하여 TABLE_OID 컬럼이 존재한다.
주요 메타데이블
...
- SYS_COLUMNS_
모든 테이블의 컬럼 정보가 저장된 메타테이블로 컬럼 이름(COLUMN_NAME)은 물론 데이터 타입(DATA_TYPE), 컬럼 순서(COLUMN_ORDER)와 같은 상세한 정보를 확인할 수 있다.
...
- SYS_INDICES_
모든 인덱스 정보가 저장된 메타테이블로 인덱스 이름(INDEX_NAME)은 물론 테이블스페이스번호(TBS_ID), 인덱스유형(INDEX_TYPE), 구성컬럼개수(COLUMN_CNT)와 같은 상세한 정보를 확인할 수 있다.
주요 성능 뷰
...
- v$tablespaces
모든 테이블스페이스 정보를 나타내는 성능 뷰로 테이블스페이스 관련 모니터링 시 기본적으로 활용된다.
...
- v$index
모든 인덱스에 대한 간략한 정보를 나타내는 성능 뷰로 디스크 인덱스의 경우 해당 세그먼트(INDEX_SEG_PID)를 알 수 있어 디스크 인덱스의 크기를 구할 수 있다.
통계정보 관련 주요 성능 뷰
...
성능뷰를 통하여 DBMS 레벨, 세션 레벨, 쿼리 레벨에서의 대기이벤트(wait event)와 연산(operation)에 대한 통계정보, DBMS 레벨의 디스크 테이블스페이스 데이터 파일 I/O, 메모리 사용량 버퍼 풀 통계정보와 같은 다양한 통계정보를 확인할 수 있다.
...
통계정보 관련 성능 뷰는 대부분 뷰 자체만으로도 모니터링이 가능하므로 조인이 불필요하나 대기이벤트, 연산, 디스크 테이블스페이스의 데이터 파일 I/O에 대한 통계정보의 경우 특정 세션 또는 특정 데이터 파일에 연관을 지어확인할 필요가 있다. 관련 정보를 얻기 위해 조인쿼리 시 참고할 주요 키 컬럼만 표기한 메타테이블 및 성능 뷰의 관계는 아래와 같다.
대기이벤트 관련 성능 뷰
...
대기이벤트란 '세션' 또는 'Altibase 쓰레드'들의 일련의 대기 작업을 의미한다. 예를 들면, 서비스쓰레드라는 쓰레드가 디스크 버퍼에 적재된 페이지에 접근하기 위해 페이지의 래치 획득을 기다리는 작업, 로그 기록을 위해 로그 버퍼의 래치 획득을 기다리는 작업등이 있다.
...
- v$session_wait
'세션' 중 조회 시점에 '활성화된 세션'의 대기이벤트에 대해서만 통계정보를 나타낸다. 세션이 유휴상태(idle)가 되거나 종료되면 관련 통계정보는 사라진다.
연산 관련 성능 뷰
...
연산이란 '세션'또는 'Altibase 쓰레드'가 수행하는 각종 연산 작업을 의미한다. 예를 들면, 특정 세션의 쿼리 수행, 서비스쓰레드의 리두로그 쓰기 등이 있다.
- v$sysstat
'세션'또는 'Altibase 쓰레드'의 연산에 대한 통계정보를 '연산' 별로 나타낸다. Altibase 구동 이후부터 누적되는 통계정보로 종료 시 초기화된다. - v$sesstat
'세션'의 연산에 대해서만 통계정보를 나타낸다. 세션이 종료되면 관련 통계정보는 사라진다.
데이터 파일 I/O
...
- v$filestat
디스크 테이블스페이스의 데이터 파일별 I/O 통계정보를 나타낸다.
기타 주요 성능 뷰
...
그 외 주요 통계정보를 제공하는 성능 뷰는 아래와 같다. 성능 뷰 자체가 의미 있는 통계정보를 제공하므로 다른 성능 뷰와 조인할 필요가 없다.
...
- v$lfg
리두로그 파일 관련 성능 뷰로 특정 컬럼 하나가 주요 모니터링 대상이다.
LF_PREPARE_WAIT_COUNT컬럼은 현재 리두로그 파일에서 새로운 리두로그 파일로 스위칭하려 할 때, 다음 리두로그 파일이 아직 생성되지 않아 서비스스레드가 기다린 횟수를 나타낸다. 이 값이 크다면 PREPARE_LOG_FILE_COUNT 프로퍼티의 값을 더 큰 값으로 변경 후 적용(Altibase 재구동)하여 충분한 개수의 리두로그 파일을 미리 만들어지도록 한다.
Altibase 구동 시점부터 누적 및 합산되는 형태로 Altibase 셧다운 시 초기화된다.
이중화 관련 주요 메타테이블 및 성능 뷰
...
이중화 관련 모니터링을 위한 조인쿼리 시 참고할 주요 키 컬럼만 표기한 메타테이블 및 성능 뷰의 관계는 아래와 같다. 참고로 SYS_REPL_ITEMS_는 데이터베이스 사용자 이름과 테이블 이름을 알기 위해 SYS_USERS_와 SYS_TABLES_을 굳이 조인하지 않아도 되게끔 컬럼 이름과 사용자 이름이 함께 저장되어 있다.
또한, 앞서 언급했듯이 세션 번호와 쿼리 번호가 없는 이중화 트랜잭션 특성상 v$repsender_transtbl, v$repreceiver_transtbl을 통하여 이중화 상대 서버에서 대응되는 트랜잭션을 식별한다.
주요 메타테이블
...
- SYS_REPLICATIONS_
모든 이중화 객체에 대한 정보가 저장된 메타테이블로 이중화 대상 서버가 이중화를 반영한 시점(XSN)과 같은 상세한 정보를 확인할 수 있다.
- SYS_REPL_HOSTS_
이중화 대상 서버의 정보가 저장된 메타테이블로 이중화 대상 서버의 주소(HOST_IP)와 포트 번호(PORT_NO)를 확인할 수 있다.
- SYS_REPL_ITEMS_
이중화 대상 테이블에 대한 정보가 저장된 메타테이블이다.
주요 성능 뷰
...
- v$repsender
이중화 송신 스레드인 sender의 상태를 나타내는 성능 뷰로 sender가 구동되어 있지 않으면 조회되지 않는다.
...
- v$repsender_transtbl
sender가 수행 중인 이중화 트랜잭션에 대한 정보를 나타내는 성능 뷰로 해당 트랜잭션과 대응되는 상대편 서버의 트랜잭션을 알 수 있다. 이 역시 sender가 구동되어 있지 않으면 조회되지 않는다. - v$repreceiver_transtbl
receiver가 수행 중인 이중화 트랜잭션에 대한 정보를 나타내는 성능 뷰로 해당 트랜잭션과 대응되는 상대편 서버의 트랜잭션을 알 수 있다. 이중화 트랜잭션의 Lock으로 인해 로컬 트랜잭션이 대기하는 현상이 발생할 때 주요 참고지표가 된다. 이 역시 receiver가 구동되어 있지 않으면 조회되지 않는다.
사용자의 테이블스페이스 접근 권한 여부, 시스템/객체 권한, PSM, 뷰 관련 주요 메타테이블 및 성능 뷰
...
실시간 모니터링이 필요하진 않으나 운영업무 중 자주 확인되는 요소로 '사용자의 테이블스페이스 접근 가능 여부', '시스템/객체 권한', '스키마객체'를 들 수 있다. 스키마 객체의 경우는 PSM(프로시져/펑션/타입세트), 뷰가 대표적이다.
...
또한, 대부분의 데이터베이스 객체는 그에 대응하는 별도의 메타테이블을 가지나 뷰의 경우는 테이블과 함께 관리되므로 뷰의 이름과 같은 구체적인 정보는 SYS_TABLES_에서 확인하여야만 한다. SYS_VIEWS_는 뷰의 컴파일 여부만 저장되어 있다. (즉, SYS_VIEWS_의 VIEW_ID는 SYS_TABLES_의 TABLE_ID와 같다.)
주요 메타테이블
...
- SYS_TBS_USERS_
사용자가 접근 가능한 테이블스페이스 목록이 저장된 메타테이블이다. - SYS_PRIVILEGES_
시스템 권한, 객체 권한에 대한 권한번호(PRIV_ID)와 권한 이름(PRIV_NAME)이 저장된 메타테이블이다. - SYS_GRANT_SYSTEM_
사용자가 부여받은 시스템 권한에 대한 권한번호(PRIV_ID)가 저장된 메타테이블이다. - SYS_GRANT_OBJECT_
사용자가 부여 받은 객체 권한에 대한 권한번호(PRIV_ID)와 객체 정보가 저장된 메타테이블로 객체번호(OBJ_ID)를 통해 해당 객체의 상세정보를 확인할 수 있다.
- SYS_VIEWS_, SYS_VIEW_PARSE_
SYS_VIEWS_는 뷰의 컴파일 상태만 저장된 메타테이블이다. 뷰의 생성 구문은 SYS_VIEW_PARSE_를 통하여 확인할 수 있다. - SYS_PROCEDURES_, SYS_PROC_PARSE_
PSM(프로시져, 펑션, 타입세트)에 대한 상세한 정보가 저장된 메타테이블이다. 각 PSM에 대응하는 생성 구문은 SYS_PROC_PARSE_를 통하여 확인할 수 있다.
모니터링 요소와 모니터링 쿼리
...
모니터링 요소
...
Altibase 모니터링 시 일반적으로 요구되는 사항을 최소단위로 분리, 이를 모니터링 요소라 칭하고 각 모니터링 요소를 표로 제시한다. 사용자는 아래 표를 참조하여 모니터링 하고자 하는 요소에 대응되는 쿼리 및 OS 명령어를 확인하여 활용하도록 한다. 쿼리 이해를 위한 메타테이블 및 성능 뷰의 관계에 대한 간략한 설명은 'Altibase 메타테이블 및 성능 뷰 개요' 섹션을 참조하도록 한다.
모니터링 쿼리
...
각 모니터링 요소에 대응하는 쿼리로 모니터링 목적에 따라 SELECT, WHERE, LIMIT절을 변경하도록 한다. 컬럼에 대한 간략한 설명은 있으나 컬럼 이름이 직관적이어서 별도의 설명이 필요 없다고 판단되는 경우, 이전에 이미 설명한 컬럼이 중복되어 나오는 경우에는 생략하였다. 컬럼에 대한 보다 상세한 설명과 이해를 위해서 기본적으로 General Reference 매뉴얼을 함께 참조하는 것을 권장한다.
매뉴얼 다운로드 페이지 : http://support.altibase.com/kr/manual
세션(Session)
Anchor | ||||
---|---|---|---|---|
|
...
세션의 상태를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다. 특정 세션에 관한 정보만 모니터링 하려면 WHERE절에 v$session의 'id' 컬럼을 추가하여 사용한다.
[SS01] 전체 세션 개수
Anchor | ||||
---|---|---|---|---|
|
Altibase에 접속되어 있는 세션 수를 보여준다.
Code Block title Altibase v4 이상 theme DJango language sql SELECT COUNT(*) TOTAL_SESSION_CNT FROM V$SESSION ;
[SS02] 세션 정보
Anchor | ||||
---|---|---|---|---|
|
- 세션의 클라이언트 정보 및 로그인 시각 등 세션 관련 정보를 볼 수 있다.
아래 쿼리는 Altibase v5 부터 사용할 수 있으나 CLIENT_APP_INFO 컬럼을 삭제하거나 주석 처리하면 Altibase v4에서도 사용할 수 있다.
Code Block title Altibase v5 버전 이상 theme DJango language sql SELECT A.ID SESSION_ID , A.DB_USERNAME USER_NAME , REPLACE2(REPLACE2(A.COMM_NAME, 'SOCKET-', NULL), '-SERVER', NULL) CLIENT_IP , A.CLIENT_APP_INFO -- Altibase v4 에서 사용 시 제거 , A.CLIENT_PID , A.SESSION_STATE , DECODE(A.AUTOCOMMIT_FLAG, 1, 'ON', 'OFF') AUTOCOMMIT , DECODE(A.LOGIN_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + A.LOGIN_TIME / (24*60*60), 'YY/MM/DD HH:MI:SS')) LOGIN_TIME , DECODE(A.IDLE_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + A.IDLE_START_TIME / (24*60*60), 'YY/MM/DD HH:MI:SS')) IDLE_TIME , NVL(LTRIM(B.QUERY), 'NONE') CURRENT_QUERY FROM V$SESSION A LEFT OUTER JOIN V$STATEMENT B ON A.CURRENT_STMT_ID = B.ID ;
주요 컬럼 설명
Anchor ss02_col ss02_col CLIENT_IP 세션과 관련된 클라이언트 응용프로그램의 ip 주소. CLIENT_APP_INFO 세션과 관련된 클라이언트 응용프로그램의 이름. ALtibase v5 부터 추가된 컬럼 CLIENT_PID 세션과 관련된 클라이언트 응용프로그램의 프로세스 아이디로 클라이언트 응용프로그램이 실행되는 OS에서 관련 프로세스를 식별할 수 있다. SESSION_STATE 세션의 상태를 나타내는 문자열로 INIT, AUTH, SERVICE READY, SERVICE, END, ROLLBACK, UNKNOWN 7가지 상태가 있다. IDLE_TIME 세션이 아무것도 하지 않기 시작한 시간으로 idle_timeout 의 기준이 된다. 단위는 유닉스 시간(unix time)이다. CURRENT_QUERY 세션에서 가장 마지막으로 수행하였거나 현재 수행 중인 쿼리.
- SYSDBA 권한으로 접속한 세션의 정보를 볼 수 있다.
아래 쿼리는 Altibase v5 부터 사용할 수 있으나 CLIENT_APP_INFO 컬럼을 삭제하거나 주석 처리하면 Altibase v4에서도 사용할 수 있다.
SELECT 절에 사용된 컬럼은 [SS02] 세션 정보와 같으니 해당 쿼리의 컬럼 설명을 참고한다.
Code Block theme DJango language sql SELECT A.ID SESSION_ID , A.DB_USERNAME USER_NAME , REPLACE2(REPLACE2(A.COMM_NAME, 'SOCKET-', NULL), '-SERVER', NULL) CLIENT_IP , A.CLIENT_APP_INFO -- Altibaase v4 에서 사용 시 제거 , A.CLIENT_PID , A.SESSION_STATE , DECODE(A.AUTOCOMMIT_FLAG, 1, 'ON', 'OFF') AUTOCOMMIT , DECODE(A.LOGIN_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + A.LOGIN_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LOGIN_TIME , DECODE(A.IDLE_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') +A.IDLE_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) IDLE_TIME , NVL(LTRIM(B.QUERY), 'NONE') CURRENT_QUERY FROM V$SESSION A LEFT OUTER JOIN V$STATEMENT B ON A.CURRENT_STMT_ID = B.ID WHERE A.SYSDBA_FLAG = 1 ;
구문 (Statement)
Anchor | ||||
---|---|---|---|---|
|
...
쿼리의 상태를 확인하기 위한 각 모니터링 쿼리를 설명한다.
쿼리 수행과 관련된 상세한 시간 정보를 확인하기 위해서 기본적으로 TIMED_STATISTICS가 활성화(1)되어 있어야 한다.
특정 세션에 관한 정보만 모니터링 하려면 WHERE 절에 v$statement의 'session_id' 컬럼을 추가하여 사용한다.
TIMED_STATISTICS 활성화 방법
- TIMED_STATISTICS는 Altibase v5부터 지원하는 Altibase 프로퍼티이다.
TIMED_STATISTICS를 활성화하면 활성화 이후에 수행된 쿼리들의 시간 정보를 알 수 있다.
Code Block theme DJango language sql ALTER SYSTEM SET TIMED_STATISTICS=1;
[ST01] 전체 쿼리 개수
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT COUNT(*) AS TOTAL_STMT_CNT FROM V$STATEMENT ;
[ST02] 쿼리 정보
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT SESSION_ID , ID STMT_ID , TX_ID , ROUND((PARSE_TIME+VALIDATE_TIME+OPTIMIZE_TIME)/1000000, 1) PREPARE_TIME , ROUND(FETCH_TIME/1000000, 1) FETCH_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , EXECUTE_FLAG , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , NVL(LTRIM(QUERY), 'NONE') QUERY FROM V$STATEMENT ORDER BY EXECUTE_TIME DESC ;
주요 컬럼 설명
STMT_ID 쿼리의 아이디 TX_ID 해당 쿼리를 수행시킨 트랜잭션의 아이디 PREPARE_TIME prepare(parse, validation, optimization)를 수행하는데 소요된 시간으로 단위는 초다. 쿼리가 수행될 때마다 갱신된다. TIMED_STATISTICS를 활성화해야 볼 수 있다. Altibase v4에서는 TIMED_STATISTICS를 제공하지 않으므로 이 값은 무의미하다. FETCH_TIME prepare 완료 후 execution을 수행하는데 소요된 시간으로 쿼리가 수행될 때마다 갱신된다. query timeout의 기준이 되며 단위는 초다. TIMED_STATISTICS를 활성화해야 볼 수 있다. Altibase v4에서는 TIMED_STATISTICS를 제공하지 않으므로 이 값은 무의미하다. EXECUTE_TIME 쿼리에 대한 결과를 클라이언트가 가져갈(fetch) 때 걸리는 시간이다. 결과의 크기에 따라 하나의 쿼리는 여러 번의 fetch를 수행할 수 있으며 이때마다 갱신된다. fetch_timeout의 기준이 되며 단위는 초이다. TIMED_STATISTICS를 활성화해야 볼 수 있다. Altibase v4 에서는 TIMED_STATISTICS를 제공하지 않으므로 이 값은 무의미하다. TOTAL_TIME 하나의 쿼리가 수행되기 위해 소요된 시간의 합계를 의미하는 것으로 prepare, fetch, execution을 모두 포함한다. 쿼리가 수행될 때마다 갱신되며 단위는 단위는 초이다. TIMED_STATISTICS를 활성화해야 볼 수 있다. Altibase v4 에서는 TIMED_STATISTICS를 제공하지 않으므로 이 값은 무의미하다. EXECUTE_FLAG 이 값이 0이면 prepare만 된 상태이며 1이면 execution 중인 상태이다. LAST_START_TIME 가장 마지막으로 수행된 쿼리가 수행된 시각으로 단위는 유닉스 시각(unix time)이다.
[ST03] 현재 수행 중인 쿼리 개수
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT COUNT(*) AS ACTIVE_STMT_CNT FROM V$STATEMENT WHERE EXECUTE_FLAG = 1 ;
[ST04] 현재 수행 중인 쿼리 정보
Anchor | ||||
---|---|---|---|---|
|
- Altibase v4 이상 버전에서 사용할 수 있다.
컬럼 설명은 [ST02] 의 '주요 컬럼 설명' 부분을 참고하자.
Code Block theme DJango language sql SELECT SESSION_ID , ID STMT_ID , TX_ID , ROUND((PARSE_TIME+VALIDATE_TIME+OPTIMIZE_TIME)/1000000, 1) PREPARE_TIME , ROUND(FETCH_TIME/1000000, 1) FETCH_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , NVL(LTRIM(QUERY), 'NONE') QUERY FROM V$STATEMENT WHERE EXECUTE_FLAG = 1 ORDER BY EXECUTE_TIME DESC ;
[ST05] 장시간으로 수행 쿼리 정보
Anchor | ||||
---|---|---|---|---|
|
- 600초 이상 수행 중인 쿼리 정보를 보여준다.
- Altibase v4 이상 버전에서 사용할 수 있다.
컬럼 설명은 [ST02] 의 '주요 컬럼 설명' 부분을 참고하자.
Code Block theme DJango language sql SELECT SESSION_ID , ID STMT_ID , TX_ID , ROUND((PARSE_TIME+VALIDATE_TIME+OPTIMIZE_TIME)/1000000, 1) PREPARE_TIME , ROUND(FETCH_TIME/1000000, 1) FETCH_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , NVL(LTRIM(QUERY), 'NONE') QUERY FROM V$STATEMENT WHERE EXECUTE_FLAG = 1 AND EXECUTE_TIME/1000000 > 600 -- 쿼리 수행 시간 조건을 변경하면 이 조건의 값을 변경하면 된다. 값은 초 단위이다. ORDER BY EXECUTE_TIME DESC ;
[ST06] 장시간 수행되는 DML트랜잭션의 마지막 쿼리 정보
Anchor | ||||
---|---|---|---|---|
|
3600초 이상, 장시간 수행 중인 트랜잭션의 마지막 쿼리 정보를 보여준다.
Altibase v4 이상 버전에서 사용할 수 있다. 단 SELECT 절에서 SS.CLIENT_APP_INFO 컬럼은 주석 처리하거나 삭제해야 한다. SS.CLIENT_APP_INFO 는 Altibase v5 부터 제공하는 컬럼이다.
Code Block theme DJango language sql SELECT ST.SESSION_ID , SS.COMM_NAME CLIENT_IP , SS.CLIENT_PID , SS.CLIENT_APP_INFO , (BASE_TIME - TR.FIRST_UPDATE_TIME) AS UTRANS_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , NVL(LTRIM(ST.QUERY), 'NONE') QUERY FROM V$TRANSACTION TR, V$STATEMENT ST, V$SESSIONMGR, V$SESSION SS WHERE TR.ID = ST.TX_ID AND ST.SESSION_ID = SS.ID AND TR.FIRST_UPDATE_TIME != 0 -- 0:read only transaction AND (BASE_TIME - TR.FIRST_UPDATE_TIME) > 3600 -- 수행 시간 조건을 변경하고자 할 경우 이 조건의 값을 변경하면 된다. 값은 초 단위이다. ORDER BY UTRANS_TIME DESC ;
주요 컬럼 설명
다른 컬럼에 대한 설명은 [ST02] 의 '주요 컬럼 설명' 부분을 참고하자.
UTRANS_TIME
트랜잭션이 최초에 변경연산을 시작한 시점을 기준으로 현재까지의 경과시간을 의미한다. UTRANS_TIME의 기준이 되며 단위는 초(sec)다.
참고로 이 값을 계산하기 위한 v$sessionmgr의 base_time과 v$transaction의 first_update_time은 TIMED_STATISTICS 프로퍼티를 활성화(0)하지 않아도 갱신된다.
[ST07] 풀 스캔 쿼리 정보
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다. 단, SELECT 절에서 SS.CLIENT_APP_INFO 컬럼은 주석처리하거나 삭제해야 한다. SS.CLIENT_APP_INFO 는 Altibase v5 버전부터 제공하는 컬럼이다.
컬럼에 대한 설명은 [ST02] 의 '주요 컬럼 설명' 부분을 참고하자.
Code Block theme DJango language sql SELECT SESSION_ID , S.COMM_NAME CLIENT_IP , S.CLIENT_PID , S.CLIENT_APP_INFO , DECODE(LAST_QUERY_START_TIME, 0, '-', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + LAST_QUERY_START_TIME / (24*60*60), 'MM/DD HH:MI:SS')) LAST_START_TIME , ROUND((PARSE_TIME+VALIDATE_TIME+OPTIMIZE_TIME)/1000000, 1) PREPARE_TIME , ROUND(FETCH_TIME/1000000, 1) FETCH_TIME , ROUND(EXECUTE_TIME/1000000, 1) EXECUTE_TIME , ROUND(TOTAL_TIME/1000000, 1) TOTAL_TIME , NVL(LTRIM(QUERY), 'NONE') QUERY FROM V$STATEMENT T, V$SESSION S WHERE S.ID = T.SESSION_ID AND (MEM_CURSOR_FULL_SCAN > 0 OR DISK_CURSOR_FULL_SCAN > 0) AND UPPER(QUERY) NOT LIKE '%INSERT%' ORDER BY EXECUTE_TIME DESC ;
[ST08] 풀 스캔 쿼리 수행 횟수 통계
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT COUNT(EXECUTE_SUCCESS) EXECUTE_CNT , SUBSTR(LTRIM(QUERY), 1, 40) QUERY FROM V$STATEMENT WHERE (MEM_CURSOR_FULL_SCAN > 0 OR DISK_CURSOR_FULL_SCAN > 0) AND UPPER(QUERY) NOT LIKE '%INSERT%' GROUP BY QUERY ORDER BY EXECUTE_CNT DESC ;
주요 컬럼 설명
execute_cnt 성공적으로 수행 완료된 쿼리 실행 횟수의 합계
[ST09] 세션 별 쿼리 목록
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT SESSION_ID , ID STMT_ID , TX_ID , SUBSTR(QUERY, 1, 100) QUERY FROM V$STATEMENT ORDER BY 1, 2 ;
[ST10] 세션 당 statement 생성 수
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있는 쿼리이다.
Code Block theme DJango language sql SELECT SE.ID SESSION_ID , COUNT(DISTINCT ST.ID) CURR_STMT_CNT_PER_SESSION FROM V$SESSION SE , V$STATEMENT ST WHERE 1=1 AND SE.ID=ST.SESSION_ID GROUP BY SE.ID ORDER BY SE.ID;
주요 컬럼 설명
CURR_STMT_CNT_PER_SESSION
해당 세션에서 관리하는 Statement 갯수
서비스 쓰레드(Service Thread)
Anchor | ||||
---|---|---|---|---|
|
...
서비스 쓰레드와 관련된 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[SV01] 서비스 쓰레드 상태
Anchor | ||||
---|---|---|---|---|
|
Altibase v5 이상
Code Block theme DJango language sql SELECT RUN_MODE , STATE , COUNT(*) CNT FROM V$SERVICE_THREAD GROUP BY RUN_MODE, STATE ;
Altibase v4
Code Block theme DJango language sql SELECT TYPE , STATE , COUNT(*) CNT FROM V$SERVICE_THREAD GROUP BY TYPE, STATE ;
주요 컬럼 설명
RUN_MODE / TYPE
서비스 쓰레드의 작동 모드 / SHARED, DEDICATED STATE
서비스 쓰레드의 상태. 일반적으로 POLL 또는 EXECUTE 상태이다.
NONE 서비스 쓰레드가 초기화된 상태 POLL 서비스 쓰레드가 이벤트를 기다리고 있는 상태 QUEUE-WAIT 서비스 쓰레드가 작업 큐(Task Queue)를 대기하는 상태 EXECUTE 서비스 쓰레드가 쿼리를 수행 중인 상태
[SV02] 서비스 쓰레드 경합 확인
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상에서 사용할 수 있는 쿼리이다.
Code Block theme DJango language sql SELECT NAME, MISS_COUNT, TRY_COUNT, ROUND(MISS_COUNT/TRY_COUNT*100, 2) PER FROM V$MUTEX WHERE NAME = 'MMT_SERVICE_THREAD_MUTEX' ORDER BY 4 DESC ;
주요 컬럼 설명
MISS_COUNT
Statement를 처리하기 위해 서비스 쓰레드에 처리를 요청하였으나 Busy하여 실패한 횟수 TRY_COUNT Statement를 처리하기 위해 서비스 쓰레드에 처리를 요청한 횟수 PER miss_count/try_count*100
트랜잭션 및 Lock(Transaction & Lock)
Anchor | ||||
---|---|---|---|---|
|
...
트랜잭션 및 Lock 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[TL01] Transaction 및 lock 정보
Anchor | ||||
---|---|---|---|---|
|
Altibase v5 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT TX.ID TX_ID , WAIT_FOR_TRANS_ID BLOCKED_TX_ID , DECODE(TX.STATUS, 0, 'BEGIN', 1, 'PRECOMMIT', 2, 'COMMIT_IN_MEMORY', 3, 'COMMIT', 4, 'ABORT', 5, 'BLOCKED', 6, 'END') STATUS , DECODE(TX.LOG_TYPE, 0, U1.USER_NAME, 'REPLICATION') USER_NAME , DECODE(TX.LOG_TYPE, 0, TX.SESSION_ID, RT.REP_NAME) SESSION_ID , DECODE(TX.LOG_TYPE, 0, ST.COMM_NAME, RR.PEER_IP) CLIENT_IP , DECODE(ST.AUTOCOMMIT_FLAG, 1, 'ON', 'OFF') AUTOCOMMIT , L.LOCK_DESC , DECODE(TX.FIRST_UPDATE_TIME, 0, '0', TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + TX.FIRST_UPDATE_TIME / (60*60*24), 'MM/DD HH:MI:SS')) FIRST_UPDATE_TIME , U2.USER_NAME||'.'||T.TABLE_NAME TABLE_NAME , DECODE(TX.LOG_TYPE, 0, SUBSTR(ST.QUERY, 1, 10), 'REMOTE TX_ID '||REMOTE_TID) CURRENT_QUERY , DECODE(TX.DDL_FLAG, 0, 'NON-DDL', 'DDL') DDL , DECODE(TX.FIRST_UNDO_NEXT_LSN_FILENO, -1, '-', TX.FIRST_UNDO_NEXT_LSN_FILENO) 'LOGFILE#' FROM V$TRANSACTION TX, V$LOCK L LEFT OUTER JOIN (SELECT ST.*, SS.AUTOCOMMIT_FLAG, SS.DB_USERID, SS.COMM_NAME FROM V$STATEMENT ST, V$SESSION SS WHERE SS.ID = ST.SESSION_ID AND SS.CURRENT_STMT_ID = ST.ID) ST ON L.TRANS_ID = ST.TX_ID LEFT OUTER JOIN V$REPRECEIVER_TRANSTBL RT ON L.TRANS_ID = RT.LOCAL_TID LEFT OUTER JOIN V$REPRECEIVER RR ON RT.REP_NAME = RR.REP_NAME LEFT OUTER JOIN V$LOCK_WAIT LW ON L.TRANS_ID = LW.TRANS_ID LEFT OUTER JOIN SYSTEM_.SYS_USERS_ U1 ON ST.DB_USERID = U1.USER_ID, SYSTEM_.SYS_TABLES_ T LEFT OUTER JOIN SYSTEM_.SYS_USERS_ U2 ON T.USER_ID = U2.USER_ID WHERE TX.ID = L.TRANS_ID AND T.TABLE_OID = L.TABLE_OID AND TX.STATUS != 6 ORDER BY TX.ID, ST.ID, TX.FIRST_UPDATE_TIME DESC ;
주요 컬럼 설명
TX_ID 트랜잭션의 아이디 BLOCKED_TX_ID lock 획득 대기를 유발한 트랜잭션의 아이디로 없는 경우는 공백이다. STATUS 트랜잭션의 상태를 의미하는 0~6까지의 숫자를 문자열로 나타낸다.
BEGIN(0), PRECOMMIT(1), COMMIT_IN_MEMORY(2), COMMIT(3), ABORT(4), BLOCKED(5), END(6)USER_NAME 트랜잭션을 수행 중인 사용자의 이름으로 이중화 트랜잭션의 경우 'REPLICATION'으로 표시된다. SESSION_ID 트랜잭션을 수행 중인 세션의 아이디로 이중화 트랜잭션의 경우 이중화 객체 이름이 표시된다. CLIENT_IP 세션과 관련된 클라이언트 응용프로그램의 ip 주소로 이중화 트랜잭션의 경우 원격 서버의 ip 이다. FIRST_UPDATE_TIME 트랜잭션이 최초로 변경연산을 시작한 시각. SELECT만 수행하는 트랜잭션은 0 이다. LOCK_DESC 해당 트랜잭션에 의해 lock이 설정된 경우 lock 정보를 출력한다. IX_LOCK, IS_LOCK, X_LOCK 등이 있다. TABLE_NAME lock 획득 대상 테이블로 '사용자이름.테이블이름' 형식으로 나타낸다. CURRENT_QUERY 트랜잭션에서 가장 마지막으로 수행하였거나 현재 수행 중인 쿼리. 이중화 트랜잭션의 경우 상대편 서버의 ip 주소와 트랜잭션 아이디를 나타낸다. DDL 트랜잭션의 DDL 여부. / DDL(0) non-DDL(1) LOGFILE# 트랜잭션과 관련된 리두로그 파일 번호. SELECT만 수행하는 트랜잭션은 '-' 이다.
리두 로그파일(Redo Logfile)
Anchor | ||||
---|---|---|---|---|
|
...
Redo Logfile 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[LO01] 리두로그 파일 정보
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT OLDEST_ACTIVE_LOGFILE OLDEST_LOGFILE , CURRENT_LOGFILE CURRENT_LOGFILE , CURRENT_LOGFILE-OLDEST_ACTIVE_LOGFILE LOGFILE_GAP FROM V$ARCHIVE ;
주요 컬럼 설명
OLDEST_LOGFILE 가장 오래된 리두로그 파일의 번호 CURRENT_LOGFILE 현재 사용 중인 온라인 리두로그 파일의 번호 LOGFILE_GAP 현재 사용 중인 온라인 리두로그 파일과 가장 오래된 리두로그 파일 사이의 리두로그 파일 개수
[LO02] 리두로그 파일 prepare 대기 누적횟수
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT LF_PREPARE_WAIT_COUNT FROM V$LFG ;
주요 컬럼 설명
LF_PREPARE_WAIT_COUNT 현재 리두로그 파일에서 새로운 리두로그 파일로 스위칭하려 할 때, 다음 리두로그 파일이 아직 생성되지 않아 서비스 스레드가 기다린 횟수를 나타낸다. 이 값이 크다면 PREPARE_LOG_FILE_COUNT 프로퍼티의 값을 더 큰 값으로 변경 후 적용(재구동)하여 충분한 개수의 리두로그 파일을 미리 만들어지도록 한다. Altibase 구동 시점부터 누적 및 합산되는 형태로 Altibase 셧다운 시 초기화된다.
가비지 컬렉션(Garbage Collection : GC)
Anchor | ||||
---|---|---|---|---|
|
...
GC 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[GC01] 메모리 DB GC gap
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT GC_NAME , SCNOFTAIL , MINMEMSCNINTXS , ADD_OID_CNT-GC_OID_CNT GC_GAP FROM V$MEMGC ;
주요 컬럼 설명
GC_NAME GC의 이름으로 2개가 존재한다. MEM_LOGICAL_AGER는 인덱스의 old version을 삭제하는 GC이며 MEM_DELTHR는 테이블 레코드의 old version을 삭제하는 GC다. SCNOFTAIL GC에 의해 확인된 삭제해야 할 old version 중 가장 최신 version의 번호 MINMEMSCNINTXS 가장 오래된 old version의 번호 GC_GAP 각 GC가 삭제해야 할 old version의 양의 의미하는 것으로 이 값이 클수록 삭제해야 할 old version의 양이 많다는 의미이다. 이때 scnoftail > minmemscnintxs 이면 active 트랜잭션 때문에 삭제를 진행하지 못하는 것이고, 반대로 scnoftail < minmemscnintxs 이면 삭제는 계속 진행 중이지만 계속되는 갱신 트랜잭션의 완료로 인해 삭제해야 할 old version이 증가하고 있는 상황으로 판단할 수 있다.
[GC02] 메모리 DB GC가 대기하고 있는 트랜잭션에서 수행중인 쿼리
Anchor | ||||
---|---|---|---|---|
|
GC가 대기하고 있는 트랜잭션이란 'Altibase에서 가장 오래된 old version'을 참조하는 트랜잭션을 의미한다. 이와 같은 트랜잭션으로 인해 GC가 동작하지 않고 무한히 대기하게 된다면 메모리 사용량 또한 무한히 증가할 수 있으므로 GC gap 증가 시 확인요소 중 한 가지다.
...
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT SESSION_ID , TOTAL_TIME , EXECUTE_TIME , TX_ID , QUERY FROM V$STATEMENT WHERE TX_ID IN (SELECT ID FROM V$TRANSACTION WHERE MEMORY_VIEW_SCN = (SELECT MINMEMSCNINTXS FROM V$MEMGC LIMIT 1)) AND EXECUTE_FLAG = 1 ORDER BY 2 DESC ;
아래 Altibase v5 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT ST.SESSION_ID, ST.TX_ID, TOTAL_TIME/1000000 'TOTAL(SEC)', EXECUTE_TIME/1000000 'EXECUTE(SEC)', FETCH_TIME/1000000 'FETCH(SEC)', ST.QUERY FROM V$STATEMENT ST, V$TRANSACTION TX WHERE ST.TX_ID = TX.ID AND TX_ID IN (SELECT ID FROM V$TRANSACTION, (SELECT MINMEMSCNINTXS FROM V$MEMGC LIMIT 1) GC WHERE MEMORY_VIEW_SCN = GC.MINMEMSCNINTXS OR MIN_MEMORY_LOB_VIEW_SCN = GC.MINMEMSCNINTXS) AND ST.SESSION_ID != SESSION_ID() AND TX.SESSION_ID <> SESSION_ID() ORDER BY 3 DESC;
메모리(Memory)
Anchor | ||||
---|---|---|---|---|
|
...
OS에서 Altibase가 점유하는 메모리 사용률 관련 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[MS01] Altibase의 메모리 사용 현황
Anchor | ||||
---|---|---|---|---|
|
- ALtibase를 구성하는 모듈별 메모리 사용 현황을 볼 수 있다.
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT NAME , ROUND(ALLOC_SIZE/1024/1024) 'ALLOC(M)' , ROUND(MAX_TOTAL_SIZE/1024/1024) 'MAX_TOTAL(M)' FROM V$MEMSTAT ORDER BY 3 DESC ;
주요 컬럼 설명
NAME Altibase를 구성하는 모듈의 이름으로 모듈의 목록은 Altibase Version에 따라 차이가 있을 수 있다. 주요 모듈에 대한 간략한 설명은 아래와 같다.
• Storage_Disk_Ager : Disk Garbage Collection에 사용되는 메모리
• Storage_Disk_Buffer : Disk Buffer 관리에 사용되는 메모리
• Storage_Disk_Collection : Direct Path Insert와 LOB 연산에 사용되는 메모리
• Storage_Disk_Datafile : Disk File 관리에 사용되는 메모리
• Storage_Disk_Index : Disk Index 관리에 사용되는 메모리
• Storage_Disk_Page : Disk Page 관리에 사용되는 메모리
• Storage_Disk_Recovery : Disk 복구에 사용되는 메모리
• Storage_Memory_Ager : Memory Garbage Collection 에 사용되는 메모리
• Storage_Memory_Collection : Memory Record 관리에 사용되는 메모리
• Storage_Memory_Interface : Cursor 등의 Interface 관리에 사용되는 메모리
• Storage_Memory_Locking : Locking 관리에 사용되는 메모리
• Storage_Memory_Manager : Memory Data 저장에 사용되는 메모리
• Storage_Memory_Index : Index 관리에 사용되는 메모리
• Storage_Memory_Page : Memory Page 관리에 사용되는 메모리
• Storage_Memory_Recovery : Memory 복구에 사용되는 메모리
• Storage_Memory_Utility : Storage Manager Tool에 사용되는 메모리
• Storage_Memory_Transaction : Transaction 관리에 사용되는 메모리
• Temp_Memory : Memory Index 저장에 사용되는 메모리
• Transaction_Table : Transaction Table 관리에 사용되는 메모리
• Transaction_OID_List : Garbage Collection의 OID 저장에 사용되는 메모리
• Transaction_Table_Info : Transaction Table 정보 관리에 사용되는 메모리ALLOC(M) 해당 모듈이 현재 사용하고 있는 메모리 크기. MAX_TOTAL(M) 해당 모듈이 사용했던 최대 메모리 크기.
[MS02] ALTIBASE의 메모리 사용량 합계
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT ROUND(SUM(ALLOC_SIZE)/1024/1024) 'ALLOC(M)' , ROUND(SUM(MAX_TOTAL_SIZE)/1024/1024) 'MAX_TOTAL(M)' FROM V$MEMSTAT ;
테이블스페이스(Tablespace : TBS)
Anchor | ||||
---|---|---|---|---|
|
...
테이블스페이스 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[TS01] 메모리 테이블스페이스 사용량
Anchor | ||||
---|---|---|---|---|
|
Altibase v5.5.1 이상 버전에서 사용할 수 있다.
휘발성(VOLATILE) 테이블스페이스 사용량도 볼 수 있게 되었다. Altibase v5.5.1부터 휘발성 메모리 테이블스페이스의 정보를 저장하는 V$VOL_TABLESPACES가 추가되었다.
Code Block title Altibase v5.5.1 이상 theme DJango language sql SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((USED/1024/1024), 0)/ROUND((TOTAL/1024/1024), 0))*100, '999.99') 'USAGE(%)' , STATE , AUTOEXTEND FROM (SELECT ID TBS_ID , DECODE(TYPE, 0, 'MEM_SYS_DIC', 1, 'MEM_SYS_DATA', 2, 'MEM_USER_DATA', 8, 'VOL_USER_DATA') TBS_TYPE , NAME TBS_NAME , DECODE(M.MAXSIZE, 140737488322560, D.MEM_MAX_DB_SIZE , 0 , T.TOTAL_PAGE_COUNT * T.PAGE_SIZE, M.MAXSIZE) MAX , M.ALLOC_PAGE_COUNT * T.PAGE_SIZE TOTAL , NVL(M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT, T.TOTAL_PAGE_COUNT)*PAGE_SIZE ALLOC , NVL(MT.USED, 0) USED , DECODE(T.STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , DECODE(M.AUTOEXTEND_MODE, 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATABASE D , V$TABLESPACES T , (SELECT SPACE_ID , SPACE_NAME , ALLOC_PAGE_COUNT , FREE_PAGE_COUNT , DECODE(MAX_SIZE, 0, (SELECT VALUE1 FROM V$PROPERTY WHERE NAME = 'VOLATILE_MAX_DB_SIZE'), MAX_SIZE) AS MAXSIZE , AUTOEXTEND_MODE FROM V$VOL_TABLESPACES UNION ALL SELECT SPACE_ID , SPACE_NAME , ALLOC_PAGE_COUNT , FREE_PAGE_COUNT , MAXSIZE , AUTOEXTEND_MODE FROM V$MEM_TABLESPACES ) M LEFT OUTER JOIN (SELECT TABLESPACE_ID, SUM((FIXED_USED_MEM + VAR_USED_MEM)) USED FROM V$MEMTBL_INFO GROUP BY TABLESPACE_ID ) MT ON M.SPACE_ID = MT.TABLESPACE_ID WHERE T.ID = M.SPACE_ID) ;
Altibase v5.3.3 용 쿼리이다. 휘발성 메모리 테이블스페이스 정보는 나오지 않는다.
Code Block title Altibase v5.3.3 용 쿼리 theme DJango language sql SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((USED/1024/1024), 0)/ROUND((TOTAL/1024/1024), 0))*100, '999.99') 'USAGE(%)' , STATE , AUTOEXTEND FROM (SELECT ID TBS_ID , DECODE(TYPE, 0, 'MEM_SYS_DIC', 1, 'MEM_SYS_DATA', 2, 'MEM_USER_DATA', 8, 'VOL_USER_DATA') TBS_TYPE , NAME TBS_NAME , DECODE(MAXSIZE, 140737488322560, D.MEM_MAX_DB_SIZE, 0, ALLOCATED_PAGE_COUNT*PAGE_SIZE, MAXSIZE) MAX , ALLOCATED_PAGE_COUNT * PAGE_SIZE TOTAL , NVL(M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT, TOTAL_PAGE_COUNT)*PAGE_SIZE ALLOC , MT.USED USED , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , DECODE(AUTOEXTEND_MODE, 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATABASE D , V$TABLESPACES T , V$MEM_TABLESPACES M , (SELECT TABLESPACE_ID , SUM((FIXED_USED_MEM + VAR_USED_MEM)) USED FROM V$MEMTBL_INFO GROUP BY TABLESPACE_ID) MT WHERE T.ID = M.SPACE_ID AND ID = MT.TABLESPACE_ID ) ;
Altibase v4.3.9 용 쿼리이다.
Altibase v4 에서는 사용자가 메모리 테이블스페이를 생성할 수 있는 기능을 제공하지 않았기 때문에 'SYS_TBS_MEMORY'라는 하나의 테이블스페이스만 나온다.Code Block title Altibase v4 버전 용 쿼리 theme DJango language sql SELECT TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((USED/1024/1024), 0)/ROUND((TOTAL/1024), 0))*100, '999.99') 'USAGE(%)' FROM (SELECT 'SYS_TBS_MEMORY' TBS_NAME , MEM_MAX_DB_SIZE MAX , MEM_ALLOC_PAGE_COUNT * 32 TOTAL , (MEM_ALLOC_PAGE_COUNT - MEM_FREE_PAGE_COUNT) * 32 ALLOC , MTBL.USED USED FROM V$DATABASE DB , (SELECT SUM(FIXED_USED_MEM+VAR_USED_MEM) AS USED FROM V$MEMTBL_INFO ) MTBL ) ;
주요 컬럼 설명
TBS_ID 테이블스페이스 고유 번호이다.
TBS_TYPE 메모리 테이블스페이스 유형. 0 - 시스템 메모리 테이블스페이스로 데이터베이스 시스템의 운영상 필요한 메타 데이터를 저장하기 위한 테이블스페이스이다. 1 - 시스템 메모리 테이블스페이스로 데이터베이스 생성 시 기본으로 생성되는 데이터를 저장하기 위한 테이블스페이스. 2 - 사용자가 생성한 메모리 테이블스페이스이다. 8 - 사용자가 생성한 휘발성 메모리 테이블스페이스이다.
MAX(M) 메모리 테이블스페이스에서 사용할 수 있는 최대 메모리 크기이다. 테이블스페이스 생성 시 MAXSIZE 를 지정하지 않는 경우에 ''UNDEFINED' 를 출력한다.
테이블스페이스 속성이 AUTOEXTEND OFF인 경우 TOTAL(M)을 출력한다.
TOTAL(M) 메모리 테이블스페이스가 현재까지 할당받은 페이지의 합계이다. 즉, 현재까지 할당된 '사용 중인 페이지'와 '빈 페이지'의 합계로 데이터 파일(메모리 체크포인트 이미지 파일) 크기와 같다. Altibase를 구동하면 메모리에는 '사용 중인 페이지'만 적재된다. 따라서 이 값만큼 물리 메모리를 사용하고 있다고 판단하기는 어렵다. ALLOC(M) 메모리 테이블스페이스가 현재까지 할당받은 페이지 중 '빈 페이지'를 제외한 '사용 중인 페이지'만의 합계이다. 예를 들어, 100M 크기의 메모리 테이블에 DROP 또는 TRUNCATE를 수행하면 전체 페이지 합계는 변함없으나 페이지 반납을 통해 '사용 중인 페이지'가 '빈 페이지'가 되므로 이 값이 0에 가깝게 된다. USED(M) 메모리 테이블스페이스의 '사용 중인 페이지' 중에서 '실제로 데이터가 적재된 페이지'의 합계이다. 예를 들어, ALLOC이 100M 크기인 메모리 테이블에 전체 DELELE를 수행하면 ALLOC은 100M로 변함없으나 USED는 0에 가깝게 된다. USAGE(%)
메모리 테이블스페이스가 '현재까지 할당받은 페이지' 대비 '사용 중인 페이지'에 대한 백분율. (즉, USED/TOTAL) STATE
테이블스페이스의 상태. 1 - 오프라인, 2 - 온라인, 3 - 백업 중인 오프라인 상태의 테이블스페이스, 4 - 백업 중인 온라인 상태의 테이블스페이스, 128 - 삭제된(dropped) 테이블스페이스
1024 - 폐기된(discarded) 테이블스페이스
1028 - 백업 중인 폐기된(discarded) 상태의 테이블스페이스AUTOEXTEND 메모리 테이블스페이스의 자동 확장 여부. / ON(1), OFF(2)
[TS02] 전체 메모리 테이블스페이스 사용량
Anchor | ||||
---|---|---|---|---|
|
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT MEM_MAX_DB_SIZE/1024/1024 'MAX(M)' , ROUND(MEM_ALLOC_PAGE_COUNT*32/1024, 2) 'TOTAL(M)' , TRUNC((MEM_ALLOC_PAGE_COUNT-MEM_FREE_PAGE_COUNT)*32/1024, 2) 'ALLOC(M)' , (SELECT ROUND(SUM((FIXED_USED_MEM + VAR_USED_MEM))/(1024*1024), 3) FROM V$MEMTBL_INFO) 'USED(M)' , TRUNC(((MEM_ALLOC_PAGE_COUNT-MEM_FREE_PAGE_COUNT)*32*1024)/MEM_MAX_DB_SIZE, 4)*100 'USAGE(%)' FROM V$DATABASE ;
주요 컬럼 설명
MAX(M) 전체 메모리 테이블스페이스가 최대로 할당 가능한 페이지의 합계로 Altibase 프로퍼티 MEM_MAX_DB_SIZE에 의해 정의된다. TOTAL(M) 전체 메모리 테이블스페이스가 현재까지 할당 받은 페이지의 합계이다. ALLOC(M) 전체 메모리 테이블스페이스가 현재까지 할당 받은 페이지중 '빈 페이지'를 제외한 '사용중인 페이지'만의 합계이다. USED(M) 전체 메모리 테이블스페이스의 '사용중인 페이지'중에서 '실제로 데이터가 적재된 페이지'의 합계이다. USAGE(%) 전체 메모리 테이블스페이스가 '최대로 할당 가능한 페이지' 대비 '사용중인 페이지'에 대한 백분율. (즉, ALLOC/MAX)
[TS03] 디스크 테이블스페이스 사용량
Anchor | ||||
---|---|---|---|---|
|
Altibase v5.5.1 이상 버전에서 사용할 수 있다. 다른 버전과 달리 언두 테이블스페이스의 사용량도 확인할 수 있다.
Code Block title Altibase v5.5.1 이상 theme DJango language sql SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((USED/1024/1024), 0)/ROUND((MAX/1024/1024), 0))*100, '999.99') 'USAGE(%)' , STATE , AUTOEXTEND FROM (SELECT T.ID TBS_ID , DECODE(TYPE, 3, 'DISK_SYS_DATA', 4, 'DISK_USER_DATA', 5, 'DISK_SYS_TEMP', 6, 'DISK_USER_TEMP', 7, 'DISK_SYS_UNDO') TBS_TYPE , NAME TBS_NAME , D.MAX * PAGE_SIZE MAX , TOTAL_PAGE_COUNT * PAGE_SIZE TOTAL , DECODE(TYPE, 7, U.TOTAL_EXT_CNT * PROP.EXTENT_SIZE, ALLOCATED_PAGE_COUNT * PAGE_SIZE) ALLOC , DECODE(TYPE, 3, NVL(DS.USED, 0) , 4, NVL(DS.USED, 0) , 7, (U.TX_EXT_CNT+U.USED_EXT_CNT+U.UNSTEALABLE_EXT_CNT) * PROP.EXTENT_SIZE , ALLOCATED_PAGE_COUNT * PAGE_SIZE ) USED , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T LEFT OUTER JOIN(SELECT SPACE_ID , SUM(TOTAL_USED_SIZE) USED FROM X$SEGMENT GROUP BY SPACE_ID) DS ON DS.SPACE_ID = T.ID , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID ) D , V$DISK_UNDO_USAGE U , (SELECT VALUE1 EXTENT_SIZE FROM V$PROPERTY WHERE NAME = 'SYS_UNDO_TBS_EXTENT_SIZE') PROP WHERE T.ID = D.SPACEID ) ;
Altibase v5.3.3, v5.3.5
- Altibase v5 에서 디스크 테이블의 구조 변경으로 디스크 테이블스페이스의 실 사용량(USED)을 구할 수 없고 할당 크기(ALLOC)만을 알 수 있었으나 BUG-31372가 반영 후 실 사용량(USED)을 확인할 수 있게 되었다.
- BUG-31372 가 반영된 버전은 아래와 같다.
- Altibase v5.3.3.33
- Altibase v5.3.5.15
- Altibase v5.5.1.0.3
이 버전에서는 언두 테이블스페이스와 임시 테이블스페이스의 실 사용량(USED)을 구할 수 없다.
Code Block title Altibase v5.3.3, v5.3.5 용 쿼리 theme DJango language sql SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((USED/1024/1024), 0)/ROUND((MAX/1024/1024), 0))*100, '999.99') 'USAGE(%)' , STATE , AUTOEXTEND FROM (SELECT T.ID TBS_ID , DECODE(TYPE, 3, 'DISK_SYS_DATA', 4, 'DISK_USER_DATA', 5, 'DISK_SYS_TEMP', 6, 'DISK_USER_TEMP', 7, 'DISK_SYS_UNDO') TBS_TYPE , NAME TBS_NAME , D.MAX * PAGE_SIZE MAX , TOTAL_PAGE_COUNT*PAGE_SIZE TOTAL , DECODE(TYPE, 7, (SELECT (SUM(TOTAL_EXTENT_COUNT*PAGE_COUNT_IN_EXTENT)*PAGE_SIZE) FROM V$UDSEGS) + (SELECT (SUM(TOTAL_EXTENT_COUNT*PAGE_COUNT_IN_EXTENT)*PAGE_SIZE) FROM V$TSSEGS) , /* UNDO */ ALLOCATED_PAGE_COUNT*PAGE_SIZE) ALLOC , DECODE(TYPE, 3, NVL(DS.USED, 0), 4, NVL(DS.USED, 0) /* SYS_TEMP */ , ALLOCATED_PAGE_COUNT*PAGE_SIZE) USED , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T LEFT OUTER JOIN (SELECT SPACE_ID , SUM(TOTAL_USED_SIZE) USED FROM X$SEGMENT GROUP BY SPACE_ID ) DS ON DS.SPACE_ID = T.ID ,(SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID ) D WHERE T.ID = D.SPACEID) ;
Altibase v5.1.5
Altibase v5 에서 디스크 테이블의 구조 변경으로 디스크 테이블스페이스의 실 사용량(USED)을 구할 수 없고 할당 크기(ALLOC)만을 알 수 있다.
이 버전에서는 언두 테이블스페이스와 임시 테이블스페이스의 실 사용량을 구할 수 없다.Code Block title Altibase v5.1.5 용 쿼리 theme DJango language sql SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR((ROUND((ALLOC/1024/1024), 0)/ROUND((MAX/1024/1024), 0))*100, '999.99') 'USAGE(%)' , STATE , AUTOEXTEND FROM (SELECT T.ID TBS_ID , DECODE(TYPE, 3, 'DISK_SYS_DATA', 4, 'DISK_USER_DATA', 5, 'DISK_SYS_TEMP', 6, 'DISK_USER_TEMP', 7, 'DISK_SYS_UNDO') TBS_TYPE , NAME TBS_NAME , D.MAX * PAGE_SIZE MAX , TOTAL_PAGE_COUNT * PAGE_SIZE TOTAL , DECODE(TYPE, 7, (SELECT (SUM(total_page_count) * PAGE_SIZE) FROM V$undo_seg)+ (SELECT (SUM(ALLOC_PAGE_COUNT) * PAGE_SIZE) FROM v$tss_seg)) , ALLOCATED_PAGE_COUNT * PAGE_SIZE ALLOC , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T ,(SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE T.ID = D.SPACEID) ;
Altibase v4
Code Block title Altibase v4 버전 용 쿼리 theme DJango language sql SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((USED/1024/1024), 0)/ROUND((MAX/1024/1024), 0))*100, '999.99') 'USAGE(%)' , STATE , AUTOEXTEND FROM (SELECT TBS.ID TBS_ID , DECODE(TYPE, 1, 'DISK_SYS_DATA', 2, 'DISK_USER_DATA', 3, 'DISK_SYS_TEMP', 4, 'DISK_USER_TEMP', 5, 'DISK_SYS_UNDO') TBS_TYPE , TBS.NAME TBS_NAME , DAT.MAX * TBS.PAGE_SIZE MAX , TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE TOTAL , DECODE(TBS.TYPE, 5, UNDO.ALLOC * TBS.PAGE_SIZE /* UNDO TABLESPACE*/ , TBS.ALLOCATED_PAGE_COUNT * TBS.PAGE_SIZE) ALLOC , DECODE(TBS.TYPE, 3, TBS.ALLOCATED_PAGE_COUNT * TBS.PAGE_SIZE /* TEMP TABLESPACE */ , 5, UNDO.USED * TBS.PAGE_SIZE /* UNDO TABLESPACE*/ , DECODE(SEG.USED, '', 0, (SEG.USED * TBS.PAGE_SIZE * TBS.A_EXTENT_PAGE_COUNT))) /* USER TABLESPACE & SYS_TBS_DATA */USED , DECODE(TBS.STATE, 1, 'ONLINE', 2, 'BEGIN BACKUP', 3, 'END BACKUP', 'NOT DEFINED') STATE , DAT.AUTOEXTEND FROM V$TABLESPACES TBS LEFT OUTER JOIN (SELECT SPACE_ID , SUM(EXTENT_TOTAL_COUNT) ALLOC , SUM(EXTENT_FULL_COUNT ) USED FROM X$SEGMENT GROUP BY SPACE_ID ) SEG ON TBS.ID = SEG.SPACE_ID ,(SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID ) DAT , (SELECT SUM(ALLOCATED_PAGE_COUNT) ALLOC , SUM(USED_PAGE_COUNT) USED FROM V$UNDO_TBS ) UNDO WHERE TBS.ID = DAT.SPACEID );
주요 컬럼 설명
MAX(M) 디스크 테이블스페이스가 최대로 할당 가능한 페이지의 합계로 페이지는 '사용 중인 페이지'와 '빈 페이지'로 구분된다. TOTAL(M) 디스크 테이블스페이스가 현재까지 할당받은 페이지의 합계. 즉, 현재까지 할당된 '사용 중인 페이지'와 '빈 페이지'의 합계로 데이터 파일 크기와 대응한다. ALLOC(M) 디스크 테이블스페이스가 현재까지 할당받은 페이지 중 '빈 페이지'를 제외한 '사용 중인 페이지'만의 합계이다. 예를 들어, 100M 크기의 디스크 테이블에 DROP 또는 TRUNCATE를 수행하면 전체 페이지 합계는 변함없으나 페이지 반납을 통해 '사용 중인 페이지'가 '빈 페이지'가 되므로 이 값이 0에 가깝게 된다. USED(M) 디스크 테이블스페이스의 '사용 중인 페이지'중에서 '실제 데이터가 적재된 페이지'의 합계이다.
하지만, 디스크 테이블스페이스 관리 기법의 변화로 인해 Altibase v5.1.5부터 v5.3.3까지는 확인할 수 없다. Altibase v5.5 부터는 메모리 테이블스페이스처럼 확인이 가능하다.USAGE(%) 디스크 테이블스페이스가 '최대로 할당 가능한 페이지' 대비 '실제 데이터가 적재된 페이지'에 대한 백분율이다.(즉,USED/MAX)
[TS04] 디스크 언두 테이블스페이스 사용량
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v5.5.1 부터 사용할 수 있다.
Code Block theme DJango language sql SELECT T.NAME TBS_NAME , ROUND(D.MAX * PAGE_SIZE / 1024 /1024, 2) 'MAX(M)' , ROUND((TOTAL_PAGE_COUNT * PAGE_SIZE) / 1024 / 1024, 2) 'TOTAL(M)' , ROUND((U.TOTAL_EXT_CNT*PROP.EXTENT_SIZE)/1024/1024, 2) 'ALLOC(M)' , ROUND(((U.TX_EXT_CNT+U.USED_EXT_CNT+U.UNSTEALABLE_EXT_CNT) * PROP.EXTENT_SIZE)/1024/1024, 2) 'USED(M)' , ROUND((((U.TX_EXT_CNT+U.USED_EXT_CNT+U.UNSTEALABLE_EXT_CNT) * PROP.EXTENT_SIZE)/(D.MAX*PAGE_SIZE))*100, 2) 'USAGE(%)' , DECODE(STATE,1,'OFFLINE',2,'ONLINE',5,'OFFLINE BACKUP',6,'ONLINE BACKUP',128,'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D , V$DISK_UNDO_USAGE U , (SELECT VALUE1 EXTENT_SIZE FROM V$PROPERTY WHERE NAME = 'SYS_UNDO_TBS_EXTENT_SIZE') PROP WHERE T.ID = D.SPACEID AND T.ID = 3 ;
...
주요 컬럼 설명
MAX(M) 언두 테이블스페이스에서 사용할 수 있는 최대 크기 TOTAL(M) 언두 테이블스페이스로 할당 받은 전체 크기 ALLOC(M) 현재까지 할당 받은 페이지 중 '빈 페이지'를 제외한 '사용 중인 페이지'만의 합계 USED(M) 언두 테이블스페이스의 사용량. 변경 트랜잭션에 의해 사용 중이거나 재사용 할 수 없는 EXTENT 크기 USAGE(%) 사용률(MAX 대비 USED) STATE 테이블스페이스 상태
[TS05] 트랜잭션 별 언두 테이블스페이스 사용량
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v5.5.1 부터 사용할 수 있다.
Code Block theme DJango language sql SELECT DECODE(TX.SESSION_ID, -1, 'REP('||REP.REP_NAME||')', TX.SESSION_ID) SESSION_ID , TX.ID TX_ID , DECODE(TX.STATUS, 0, 'BEGIN', 1, 'PRECOMMIT', 2, 'COMMIT_IN_MEMORY', 3, 'COMMIT', 4, 'ABORT', 5, 'BLOCKED', 6, 'END') TX_STATUS , RPAD(DECODE(ST.EXECUTE_FLAG, NULL, 'REP('||REP.REP_NAME||')', 1, 'SQL ING', 0, 'SQL END'), 10) SQL_STATUS , RPAD(DECODE(TX.LOG_TYPE, 1, 'REP '||REP.PEER_IP||':'||REP.PEER_PORT, S.COMM_NAME||' PID:'||S.CLIENT_PID), 40) CLIENT_IP , RPAD(DECODE(TX.LOG_TYPE, 1, 'REP('||REP.REP_NAME||')', S.CLIENT_APP_INFO), 15) CLIENT_APP_INFO , RPAD(DECODE(S.AUTOCOMMIT_FLAG, 1, 'ON', 0, 'OFF', NULL, 'REP('||REP.REP_NAME||')'), 10) AUTOCOMMIT , RPAD(DECODE(TX.LOG_TYPE, 1, 'REP('||REP.REP_NAME||')', S.UTRANS_TIME_LIMIT), 15) UTRANS_TIMEOUT , DECODE(ST.LAST_QUERY_START_TIME, NULL, TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + TX.FIRST_UPDATE_TIME / (60*60*24), 'YYYY-MM-DD HH:MI:SS'), TO_CHAR(TO_DATE('1970010109', 'YYYYMMDDHH') + ST.LAST_QUERY_START_TIME / (60*60*24), 'YYYY-MM-DD HH:MI:SS')) LAST_QUERY_START_TIME , ((((TSS.TOTAL_EXTENT_COUNT+TSS.TOTAL_EXTDIR_COUNT)*TSS.PAGE_COUNT_IN_EXTENT)+((UDS.TOTAL_EXTENT_COUNT+UDS.TOTAL_EXTDIR_COUNT)*UDS.PAGE_COUNT_IN_EXTENT))*TBS.PAGE_SIZE) /1024/1024 UNDO_USAGE , DECODE(TX.LOG_TYPE, 1, 'REMOTE_TX_ID : '||REP_TX.REMOTE_TID, SUBSTR(ST.QUERY, 1, 30)) QUERY FROM V$TXSEGS TXS , V$TSSEGS TSS , V$UDSEGS UDS , V$TRANSACTION TX LEFT OUTER JOIN V$SESSION S ON TX.ID = S.TRANS_ID LEFT OUTER JOIN V$STATEMENT ST ON S.CURRENT_STMT_ID = ST.ID LEFT OUTER JOIN V$REPRECEIVER_TRANSTBL REP_TX ON TX.ID = REP_TX.LOCAL_TID LEFT OUTER JOIN V$REPRECEIVER REP ON REP_TX.REP_NAME = REP.REP_NAME , V$TABLESPACES TBS WHERE 1=1 AND UDS.SPACE_ID = 3 AND TXS.ID = UDS.TXSEG_ENTRY_ID AND TXS.ID = TSS.TXSEG_ENTRY_ID AND TXS.TRANS_ID = TX.ID AND TBS.ID = UDS.SPACE_ID ;
주요 컬럼 설명
SESSION_ID 트랜잭션을 수행한 세션 ID 또는 이중화 객체 이름 TX_ID 트랜잭션 ID TX_STATUS 트랜잭션 상태 SQL_STATUS SQL문 상태 CLIENT_IP 클라이언트 IP와 프로세스 ID AUTOCOMMIT 세션의 AUTOCOMMIT 모드 UTRANS_TIMEOUT 세션의 UTRANS_TIMEOUT 설정값 LAST_QUERY_START_TIME SQL문 시작 시각 UNDO_USAGE 트랜잭션의 언두 사용량(MB단위) QUERY 언두를 사용하거나 접근한 트랜잭션에서 수행한 마지막 쿼리
[TS06] 전체 테이블스페이스 사용량
Anchor | ||||
---|---|---|---|---|
|
아래는 Altibase v5.5.1 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((TOTAL/1024), 0)/ROUND((MAX/1024/1024), 0))*100, '999.99') 'USAGE(%)' , '' STATE , '' 'AUTOEXTEND' FROM (SELECT '' TBS_ID , 'ALL_MEM_TBS' TBS_TYPE , '-' TBS_NAME , MEM_MAX_DB_SIZE MAX , MEM_ALLOC_PAGE_COUNT*32 TOTAL , (MEM_ALLOC_PAGE_COUNT-MEM_FREE_PAGE_COUNT)*32 ALLOC , (SELECT SUM(FIXED_USED_MEM + VAR_USED_MEM) FROM V$MEMTBL_INFO) USED FROM V$DATABASE ) UNION ALL SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((USED/1024/1024), 0)/ROUND((TOTAL/1024/1024), 0))*100, '999.99') 'USAGE(%)' , STATE , AUTOEXTEND FROM (SELECT ID TBS_ID , DECODE(TYPE, 0, 'MEM_SYS_DIC', 1, 'MEM_SYS_DATA', 2, 'MEM_USER_DATA', 8, 'VOL_USER_DATA') TBS_TYPE , NAME TBS_NAME , DECODE(M.MAXSIZE, 140737488322560, D.MEM_MAX_DB_SIZE , 0 , T.TOTAL_PAGE_COUNT * T.PAGE_SIZE, M.MAXSIZE) MAX , M.ALLOC_PAGE_COUNT * T.PAGE_SIZE TOTAL , NVL(M.ALLOC_PAGE_COUNT-M.FREE_PAGE_COUNT, T.TOTAL_PAGE_COUNT)*PAGE_SIZE ALLOC , NVL(MT.USED, 0) USED , DECODE(T.STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , DECODE(M.AUTOEXTEND_MODE, 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATABASE D , V$TABLESPACES T , (SELECT SPACE_ID , SPACE_NAME , ALLOC_PAGE_COUNT , FREE_PAGE_COUNT , DECODE(MAX_SIZE, 0, (SELECT VALUE1 FROM V$PROPERTY WHERE NAME = 'VOLATILE_MAX_DB_SIZE'), MAX_SIZE) AS MAXSIZE , AUTOEXTEND_MODE FROM V$VOL_TABLESPACES UNION ALL SELECT SPACE_ID , SPACE_NAME , ALLOC_PAGE_COUNT , FREE_PAGE_COUNT , MAXSIZE , AUTOEXTEND_MODE FROM V$MEM_TABLESPACES ) M LEFT OUTER JOIN (SELECT TABLESPACE_ID, SUM((FIXED_USED_MEM + VAR_USED_MEM)) USED FROM V$MEMTBL_INFO GROUP BY TABLESPACE_ID ) MT ON M.SPACE_ID = MT.TABLESPACE_ID WHERE T.ID = M.SPACE_ID) UNION ALL SELECT TBS_ID , TBS_TYPE , TBS_NAME , TO_CHAR(MAX/1024/1024, '999,999,999') 'MAX(M)' , TO_CHAR(TOTAL/1024/1024, '999,999,999') 'TOTAL(M)' , TO_CHAR(ALLOC/1024/1024, '999,999,999') 'ALLOC(M)' , TO_CHAR(USED/1024/1024, '999,999,999') 'USED(M)' , TO_CHAR((ROUND((USED/1024/1024), 0)/ROUND((MAX/1024/1024), 0))*100, '999.99') 'USAGE(%)' , STATE , AUTOEXTEND FROM (SELECT T.ID TBS_ID , DECODE(TYPE, 3, 'DISK_SYS_DATA', 4, 'DISK_USER_DATA', 5, 'DISK_SYS_TEMP', 6, 'DISK_USER_TEMP', 7, 'DISK_SYS_UNDO') TBS_TYPE , NAME TBS_NAME , D.MAX * PAGE_SIZE MAX , TOTAL_PAGE_COUNT * PAGE_SIZE TOTAL , DECODE(TYPE, 7, U.TOTAL_EXT_CNT * PROP.EXTENT_SIZE, ALLOCATED_PAGE_COUNT * PAGE_SIZE) ALLOC , DECODE(TYPE, 3, NVL(DS.USED, 0) , 4, NVL(DS.USED, 0) , 7, (U.TX_EXT_CNT+U.USED_EXT_CNT+U.UNSTEALABLE_EXT_CNT) * PROP.EXTENT_SIZE , ALLOCATED_PAGE_COUNT * PAGE_SIZE ) USED , DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARDED') STATE , D.AUTOEXTEND FROM V$TABLESPACES T LEFT OUTER JOIN(SELECT SPACE_ID , SUM(TOTAL_USED_SIZE) USED FROM X$SEGMENT GROUP BY SPACE_ID) DS ON DS.SPACE_ID = T.ID , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND), 1, 'ON', 'OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID ) D , V$DISK_UNDO_USAGE U , (SELECT VALUE1 EXTENT_SIZE FROM V$PROPERTY WHERE NAME = 'SYS_UNDO_TBS_EXTENT_SIZE') PROP WHERE T.ID = D.SPACEID ) ;
주요 컬럼 설명
MAX(M) 언두 테이블스페이스에서 사용할 수 있는 최대 크기 TOTAL(M) 테이블스페이스가 현재까지 할당받은 크기.
메모리 체크포인트 이미지 파일 및 디스크 데이터 크기와 동일하다.ALLOC(M) 테이블스페이스가 현재까지 할당 받은 페이지 중 '빈 페이지'를 제외한 '사용 중인 페이지'의 크기 USED(M) 테이블스페이스가 사용 중인 페이지에서 실제 데이터가 적재된 크기. USAGE(%) 전체 메모리 테이블스페이스 : MAX 대비 TOTAL 사용률
메모리 테이블스페이스 : TOTAL 대비 USED 사용률
디스크 테이블스페이스 : MAX 대비 USED 사용률
[TS07] 메모리 테이블스페이스 데이터 파일 체크포인트 경로
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v5 버전부터 사용할 수 있다.
Code Block theme DJango language sql SELECT M.SPACE_ID TBS_ID, SPACE_NAME TBS_NAME, CHECKPOINT_PATH FROM V$MEM_TABLESPACES M, V$MEM_TABLESPACE_CHECKPOINT_PATHS C WHERE M.SPACE_ID = C.SPACE_ID ;
[TS08] 메모리 테이블스페이스 데이터 파일
Anchor | ||||
---|---|---|---|---|
|
메모리 테이블스페이스의 stable한 데이터 파일을 보여준다. 아래 쿼리는 Altibase v5 버전부터 사용할 수 있다.
Code Block theme DJango language sql SELECT MEM_DATA_FILE DATAFILE_NAME FROM V$STABLE_MEM_DATAFILES ;
[TS09] 디스크 테이블스페이스 데이터 파일
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v5 버전부터 사용할 수 있다.
Code Block theme DJango language sql SELECT B.NAME TBS_NAME, A.ID 'FILE#', A.NAME DATAFILE_NAME, CURRSIZE*8/1024 'ALLOC(M)', ROUND(CASE2(A.MAXSIZE=0, CURRSIZE, A.MAXSIZE)*8/1024) 'MAX(M)', DECODE(AUTOEXTEND, 0, 'OFF', 'ON') 'AUTOEXTEND' FROM V$DATAFILES A, V$TABLESPACES B WHERE B.ID = A.SPACEID ORDER BY B.NAME, A.ID ;
주요 컬럼 설명
FILE# 데이터 파일의 번호. 하나의 디스크 테이블스페이스는 여러 개의 데이터 파일을 가질 수 있다.
[TS10] 디스크 테이블스페이스 데이터 파일 별 I/O
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v5 버전부터 사용할 수 있다.
Code Block theme DJango language sql SELECT NAME TBS_NAME, A.PHYRDS PHY_READ, A.PHYWRTS PHY_WRITE, A.PHYRDS+A.PHYWRTS PHY_TOTAL, TRUNC(A.PHYRDS/READ_SUM*100,2) 'READ(%)', TRUNC(A.PHYWRTS/WRITE_SUM*100,2) 'WRITE(%)', TRUNC( (A.PHYRDS+A.PHYWRTS) / (READ_SUM+WRITE_SUM) * 100 , 2) 'TOTAL(%)', A.AVGIOTIM AVG_IO_TIME FROM V$FILESTAT A, V$DATAFILES B, (SELECT SUM(PHYRDS) READ_SUM, SUM(PHYWRTS) WRITE_SUM FROM V$FILESTAT ) C WHERE A.SPACEID = B.SPACEID AND A.FILEID = B.ID AND READ_SUM > 0 AND WRITE_SUM > 0 ORDER BY A.PHYRDS+A.PHYWRTS DESC, ROWNUM DESC ;
주요 컬럼 설명
PHY_READ 물리적 Read I/O 발생 회수 PHY_WRITE 물리적 Write I/O 발생 회수. PHY_TOTAL 물리적 I/O 발생 회수. READ(%) 전체 물리적 Read I/O 대비 발생 비율. WRITE(%) 전체 물리적 Write I/O 대비 발생 비율 TOTAL(%) 전체 물리적 I/O 대비 발생 비율. AVG_IO_TIME 평균 물리적 I/O 시간으로 단위는 밀리 초다.
[TS11] 디스크 테이블스페이스 데이터 파일 별 단일 페이지 Read I/O
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v5 버전부터 사용할 수 있다.
Code Block theme DJango language sql SELECT B.NAME TBS_NAME, A.SINGLEBLKRDS READ_CNT_PER_PAGE, A.SINGLEBLKRDTIM READ_TIME_PER_PAGE, TRUNC(A.SINGLEBLKRDTIM/A.SINGLEBLKRDS,2) AVERAGE_TIME FROM V$FILESTAT A, V$DATAFILES B WHERE A.SPACEID = B.SPACEID AND A.FILEID = B.ID AND A.SINGLEBLKRDS > 0 ORDER BY AVERAGE_TIME DESC ;
주요 컬럼 설명
READ_CNT_PER_PAGE 단일 페이지에 대한 Read 개수 READ_TIME_PER_PAGE 단일 페이지에 대한 Read 시간으로 단위는 밀리 초이다. AVERAGE_TIME 단일 페이지에 대한 평균 Read 시간으로 단위는 밀리 초이다.
[TS12] 임시 테이블스페이스 사용량
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v6.3.1 부터 사용할 수 있다.
Code Block theme DJango language sql SELECT SUM(NORMAL_AREA_SIZE) SUM_NORMAL_AREA_SIZE FROM X$TEMPTABLE_STATS WHERE DROP_TIME = '19700101_090000' ;
주요 컬럼 설명
NORMAL_AREA_SIZE 사용한 Temp Tablespace 공간의 크기
[TS13] 트랜잭션 별 임시 테이블스페이스 사용량
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v6.3.1 부터 사용할 수 있다.
Code Block theme DJango language sql SELECT NORMAL_AREA_SIZE FROM X$TEMPTABLE_STATS T, V$STATEMENT STMT WHERE T.TRANSACTION_ID = STMT.TX_ID ;
[TS14] 전체 테이블스페이스 상태
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v5.3.3 부터 사용할 수 있다.
Code Block theme DJango language sql SELECT NAME TBS_NAME, DECODE(STATE, 1, 'OFFLINE', 2, 'ONLINE', 5, 'OFFLINE BACKUP', 6, 'ONLINE BACKUP', 128, 'DROPPED', 'DISCARD') STATE FROM V$TABLESPACES ;
디스크 버퍼(Disk Buffer)
...
Disk Buffer 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[DB01] 디스크 버퍼 Hit Ratio
Altibase v4 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT HIT_RATIO 'HIT_RATIO(%)' FROM V$BUFFPOOL_STAT ;
주요 컬럼 설명
HIT_RATIO(M) Altibase 구동 이후부터 Disk Buffer에 이미 적재된 page가 재사용되는 비율을 의미하는 것으로 이 값이 작을수록 물리적인 읽기(read page) 횟수가 많다는 것이다. 물리적인 읽기 횟수가 많으면, 시스템이 빠른 질의 처리를 못 한다. 이 컬럼은 (get_pages + fix_pages - read_pages) / (get_pages + fix_pages) 계산을 수행한 것이다.
객체(Object)
Anchor | ||||
---|---|---|---|---|
|
...
object 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[OB01] 메모리 테이블 사용량
Anchor | ||||
---|---|---|---|---|
|
메모리 테이블의 사용량을 조회하는 쿼리이다. 아래 쿼리는 Altibase v4 이상 버전에서 사용할 수 있다.
Code Block title Altibase v6.5.1 이상 theme DJango language sql SELECT MT.USER_NAME , MT.TABLE_NAME , MT.PARTITION_NAME , TBS.NAME TBS_NAME , TO_CHAR((MU.FIXED_ALLOC_MEM+MU.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((MU.FIXED_USED_MEM+MU.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((MU.FIXED_USED_MEM+MU.VAR_USED_MEM)/(MU.FIXED_ALLOC_MEM+MU.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM (SELECT U.USER_NAME , T.TABLE_NAME , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', P.PARTITION_OID) TABLE_OID , DECODE(T.IS_PARTITIONED, 'F', RPAD('-', 14), 'T', P.PARTITION_NAME) PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', T.TBS_ID, 'T', P.TBS_ID) TBS_ID FROM SYSTEM_.SYS_USERS_ U , SYSTEM_.SYS_TABLES_ T LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ P ON T.TABLE_ID = P.TABLE_ID WHERE 1=1 AND U.USER_ID <> 1 AND U.USER_ID = T.USER_ID AND T.TBS_ID IN (SELECT ID FROM V$TABLESPACES WHERE TYPE IN (1, 2, 8)) ) MT , V$MEMTBL_INFO MU , V$TABLESPACES TBS WHERE 1=1 AND MT.TABLE_OID = MU.TABLE_OID AND TBS.ID = MT.TBS_ID ORDER BY 1, 2, 3 ;
Code Block title Altibase v4 ~ 6.3.1 theme DJango language sql SELECT A.USER_NAME , B.TABLE_NAME , D.NAME TBS_NAME , TO_CHAR((C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((C.FIXED_USED_MEM+C.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((C.FIXED_USED_MEM+C.VAR_USED_MEM)/(C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_TABLES_ B , V$MEMTBL_INFO C , V$TABLESPACES D WHERE 1=1 AND A.USER_NAME <> 'SYSTEM_' AND B.TABLE_TYPE = 'T' AND A.USER_ID = B.USER_ID AND B.TABLE_OID = C.TABLE_OID AND B.TBS_ID = D.ID ORDER BY USER_NAME, TBS_NAME, TABLE_NAME ;
주요 컬럼 설명
Anchor OB01_col OB01_col USER_NAME
테이블 소유자 TABLE_NAME
테이블 이름 PARTITION_NAME
테이블에 파티션드 테이블을 생성했을 경우 파티션드 테이블 이름. 메모리 파티션 테이블은 6.5.1 부터 지원. TBS_NAME
테이블 생성 시 지정한 테이블스페이스 이름 ALLOC(M) 메모리 테이블에서 할당받은 페이지의 합계이다. USED(M) 메모리 테이블이 할당받은 페이지 중에서 '실제 데이터가 적재된 페이지'의 합계이다. 예를 들어, ALLOC이 100M 크기인 메모리 테이블에 전체 DELELE를 수행하면 ALLOC은 100M로 변함없으나 USED는 0에 가깝게 된다. TRUNCATE 를 수행하면 ALLOC 을 줄일 수 있다. USAGE(%) 메모리 테이블에 할당된 페이지 중에서 '실제 데이터가 적재된 페이지'에 대한 백분율로 나타낸다. (즉, USED/ALLOC)
[OB02] 큐
Anchor | ||||
---|---|---|---|---|
|
큐 테이블의 사용량을 조회하는 쿼리이다. 아래 쿼리는 Altibase v4 이상 버전에서 사용할 수 있다.
컬럼 설명은 '메모리 테이블 및 사용량 컬럼 설명' 참고
Code Block title Altibase v4 이상 theme DJango language sql SELECT A.USER_NAME , B.TABLE_NAME , D.NAME TABLESPACE_NAME , C.TABLE_OID , TO_CHAR((C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((C.FIXED_USED_MEM+C.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((C.FIXED_USED_MEM+C.VAR_USED_MEM)/(C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_TABLES_ B , V$MEMTBL_INFO C , V$TABLESPACES D WHERE 1=1 AND A.USER_NAME <> 'SYSTEM_' AND B.TABLE_TYPE = 'Q' AND A.USER_ID = B.USER_ID AND B.TABLE_OID = C.TABLE_OID AND B.TBS_ID = D.ID ;
[OB03] Efficiency 가 낮은 메모리 테이블
Anchor | ||||
---|---|---|---|---|
|
- 할당받은 전체 페이지에 비해 실제 사용이 낮은 메모리 테이블을 조회하는 쿼리이다.
메모리 테이블에서 할당받은 페이지의 전체 크기가 1G 이상이고 USAGE가 50% 이하인 메모리 테이블을 출력한다.
Code Block title Altibase v6.5.1 이상 theme DJango language sql SELECT MT.USER_NAME , MT.TABLE_NAME , MT.PARTITION_NAME , TBS.NAME TBS_NAME , TO_CHAR((MU.FIXED_ALLOC_MEM+MU.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((MU.FIXED_USED_MEM+MU.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((MU.FIXED_USED_MEM+MU.VAR_USED_MEM)/(MU.FIXED_ALLOC_MEM+MU.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM (SELECT U.USER_NAME , T.TABLE_NAME , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', P.PARTITION_OID) TABLE_OID , DECODE(T.IS_PARTITIONED, 'F', RPAD('-', 14), 'T', P.PARTITION_NAME) PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', T.TBS_ID, 'T', P.TBS_ID) TBS_ID FROM SYSTEM_.SYS_USERS_ U , SYSTEM_.SYS_TABLES_ T LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ P ON T.TABLE_ID = P.TABLE_ID WHERE 1=1 AND U.USER_ID <> 1 AND U.USER_ID = T.USER_ID AND T.TBS_ID IN (SELECT ID FROM V$TABLESPACES WHERE TYPE IN (1, 2, 8)) ) MT , V$MEMTBL_INFO MU , V$TABLESPACES TBS WHERE 1=1 AND MT.TABLE_OID = MU.TABLE_OID AND TBS.ID = MT.TBS_ID AND ROUND((FIXED_ALLOC_MEM+VAR_ALLOC_MEM)/1024/1024, 2) >= 1024 -- 메모리 테이블에 할당된 페이지가 1G 이상 AND ROUND((FIXED_USED_MEM+VAR_USED_MEM)/(FIXED_ALLOC_MEM+VAR_ALLOC_MEM+0.01)*100, 2) <= 50 -- USAGE가 50% 이하 ORDER BY 1, 2, 3 ;
Code Block title Altibase v4 이상 theme DJango language sql SELECT C.USER_NAME , B.TABLE_NAME , TO_CHAR((C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM)/1024/1024, '999,999,999.9') 'ALLOC(M)' , TO_CHAR((C.FIXED_USED_MEM+C.VAR_USED_MEM)/1024/1024, '999,999,999.9') 'USED(M)' , TO_CHAR(((C.FIXED_USED_MEM+C.VAR_USED_MEM)/(C.FIXED_ALLOC_MEM+C.VAR_ALLOC_MEM))*100, '999.9') 'USAGE(%)' FROM V$MEMTBL_INFO A , SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_USERS_ C WHERE A.TABLE_OID = B.TABLE_OID AND B.USER_ID = C.USER_ID AND ROUND((FIXED_ALLOC_MEM+VAR_ALLOC_MEM)/1024/1024, 2) >= 1024 -- 메모리 테이블에 할당된 페이지가 1G 이상 AND ROUND((FIXED_USED_MEM+VAR_USED_MEM)/(FIXED_ALLOC_MEM+VAR_ALLOC_MEM+0.01)*100, 2) <= 50 -- USAGE가 50% 이하 AND B.USER_ID <> 1 ORDER BY 'FREE(M)' DESC ;
주요 컬럼 설명
ALLOC(M) 메모리 테이블에서 할당받은 페이지의 합계이다. USED(M) 메모리 테이블이 할당받은 페이지 중에서 '실제 데이터가 적재된 페이지'의 합계이다. 예를 들어, ALLOC이 100M 크기인 메모리 테이블에 전체 DELELE를 수행하면 ALLOC은 100M로 변함없으나 USED는 0에 가깝게 된다. TRUNCATE 를 수행하면 ALLOC 을 줄일 수 있다. USAGE(%) 메모리 테이블에 할당된 페이지 중에서 '실제 데이터가 적재된 페이지'에 대한 백분율로 나타낸다. (즉, USED/ALLOC)
[OB04] 메모리 인덱스, 큐 인덱스 사용량
Anchor | ||||
---|---|---|---|---|
|
- 메모리 테이블의 인덱스와 큐 테이블의 인덱스 사용량을 조회하는 쿼리이다.
버전 별로 쿼리가 다르므로 버전에 맞는 쿼리를 사용해야 한다.
Code Block title Altibase v5 이상 theme DJango language sql SELECT U.USER_NAME, T.TABLE_NAME TABLE_NAME , B.INDEX_NAME , LPAD(I.IS_PARTITIONED, 14) INDEX_PARTITIONED , ROUND(((USED_NODE_COUNT + PREPARE_NODE_COUNT) / 15 * 32768)/1024/1024, 1) AS 'SIZE(MB)' FROM V$MEM_BTREE_HEADER B , SYSTEM_.SYS_INDICES_ I , SYSTEM_.SYS_TABLES_ T , SYSTEM_.SYS_USERS_ U WHERE 1=1 AND B.INDEX_ID = I.INDEX_ID AND I.TABLE_ID = T.TABLE_ID AND B.INDEX_TBS_ID <> 0 AND U.USER_ID = T.USER_ID ORDER BY TABLE_NAME, B.INDEX_ID ;
주요 컬럼 설명
INDEX_PARTITIONED
해당 인덱스가 파티션 인덱스인지 알려준다. F : 논파티션 인덱스 T : 파티션 인덱스 메모리 파티션 인덱스는 Altibase v6.5.1 부터 지원한다. SIZE(MB)
인덱스에 달린 노드 수로 인덱스 크기를 알 수 있다. 인덱스 노드 15개당 하나의 페이지를 사용하며 페이지 크기는 32KB이다. Altibase 버전에 따라 노드 별 사용할 수 있는 슬롯의 개수에 차이가 있다. 이 때문에 같은 데이터일지라도 버전에 따라 인덱스 크기가 다를 수 있다.
[OB05] 디스크 테이블
Anchor | ||||
---|---|---|---|---|
|
디스크 테이블의 사용량 정보이다. 버전 별로 쿼리가 다르므로 버전에 맞는 쿼리를 사용해야 한다.
Code Block title Altibase v5.3.3 이상 theme DJango language sql SELECT U.USER_NAME USER_NAME , TBL.TABLE_NAME TABLE_NAME , DECODE(TBL.IS_PARTITIONED, 'T', TBL.PARTITION_NAME, 'F', '-') PARTITIONED_TABLE , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024, '999,999,999,999') 'MAX(KB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.TOTAL_EXTENT_COUNT)/1024, '999,999,999,999') 'ALLOC(KB)' , TO_CHAR(SEG.TOTAL_USED_SIZE/1024, '999,999,999,999') 'USED(KB)' FROM (SELECT TBL.USER_ID , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , TBL.TABLE_NAME , PT.PARTITION_NAME , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TBS_ID, 'T', PT.TBS_ID) TBS_ID , TBL.IS_PARTITIONED FROM SYSTEM_.SYS_TABLES_ TBL LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON TBL.TABLE_ID = PT.TABLE_ID WHERE TBL.TABLE_TYPE = 'T' ) TBL , (SELECT S.TABLE_OID, SUM(S.TOTAL_EXTENT_COUNT) TOTAL_EXTENT_COUNT, SUM(S.TOTAL_USED_SIZE) TOTAL_USED_SIZE FROM X$SEGMENT S WHERE S.SEGMENT_TYPE IN (6, 7) /* 6 : 테이블, 7 : LOB 데이터(6.1.1 이상), 5 : 인덱스 */ GROUP BY S.TABLE_OID) SEG , SYSTEM_.SYS_USERS_ U , V$TABLESPACES TBS , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.TABLE_OID = TBL.TABLE_OID AND U.USER_ID = TBL.USER_ID AND D.SPACEID = TBL.TBS_ID AND TBS.ID = TBL.TBS_ID ORDER BY USER_NAME, TABLE_NAME, PARTITIONED_TABLE ;
Code Block title Altibase v5.1.5 theme DJango language sql SELECT U.USER_NAME USER_NAME , TBL.TABLE_NAME TABLE_NAME , DECODE(TBL.IS_PARTITIONED, 'T', TBL.PARTITION_NAME, 'F', '-') PARTITIONED_TABLE , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024/1024, '999,999,999') 'MAX(MB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024/1024, '999,999,999') 'ALLOC(MB)' FROM (SELECT TBL.USER_ID , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , TBL.TABLE_NAME , PT.PARTITION_NAME , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TBS_ID, 'T', PT.TBS_ID) TBS_ID , TBL.IS_PARTITIONED FROM SYSTEM_.SYS_TABLES_ TBL LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON TBL.TABLE_ID = PT.TABLE_ID ) TBL , V$SEGMENT SEG , SYSTEM_.SYS_USERS_ U , V$TABLESPACES TBS , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.SEGMENT_TYPE = 'TABLE' /* 'TABLE' : 테이블, 'INDEX' : 인덱스 */ AND SEG.TABLE_OID = TBL.TABLE_OID AND U.USER_ID = TBL.USER_ID AND D.SPACEID = TBL.TBS_ID AND TBS.ID = TBL.TBS_ID ORDER BY USER_NAME, PARTITIONED, TABLE_NAME, PARTITIONED_TABLE ;
Code Block title Altibase v4.3.9 theme DJango language sql SELECT U.USER_NAME 'USER_NAME' , TBL.TABLE_NAME 'TABLE_NAME' , TBS.NAME 'TBS_NAME' , TO_CHAR((TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE)/1024 , '999,999,999') 'TBS_MAX(KB)' , TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024, '999,999,999') 'ALLOC(KB)' , TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_FULL_COUNT)/1024, '999,999,999') 'USED(KB)' FROM X$SEGMENT SEG , SYSTEM_.SYS_TABLES_ TBL , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U WHERE 1=1 AND SEG.TABLE_OID = TBL.TABLE_OID AND SEG.SPACE_ID = TBL.TBS_ID AND SEG.SPACE_ID = TBS.ID AND TBL.USER_ID = U.USER_ID AND TBL.TABLE_TYPE = 'T' AND SEG.SEGMENT_TYPE = 6 ORDER BY USER_NAME, TABLE_NAME ;
주요 컬럼 설명
TABLE_NAME
테이블의 이름 PARTITIONED_TABLE
테이블에 파티션 테이블을 생성한 경우 파티션 테이블의 이름을 보여준다. 논-파티션드 테이블의 경우 '-'
TBS_NAME
테이블 생성 시 지정한 테이블스페이스를 보여준다. 파티션드 테이블에 테이블스페이스를 지정한 경우 파티션드 테이블에서 지정한 테이블스페이스 이름을 보여준다. MAX(MB)
테이블이 속한 테이블스페이스의 최대 크기를 의미한다. ALLOC(MB)
테이블이 할당받은 총 크기를 의미한다. USED(MB)
테이블이 할당받은 공간 중 데이터가 포함된 크기를 의미한다.
데이터를 DELETE 를 수행하면 DELETE한 공간은 재사용 가능하지만 디스크 테이블의 경우 메모리 테이블과는 다르게 DELETE를 수행해도 USED는 줄어들지 않는다.
DELETE로 재사용 가능한 공간을 제외하고 실제 USED 를 확인하려면 AGING 작업을 수행해야 한다. 예) ALTER TABLE table_name AGING ;
ALTER TABLE ~ AGING ; 수행 중에는 테이블에 X락을 잡기 때문에 해당 테이블에 대한 다른 요청은 대기 상태가 되므로 수행 시 주의해야 한다. AGING 작업을 수행하지 않으면 ALLOC 과 USED 는 항상 같은 값을 갖는다.
[OB06] 디스크 인덱스 사용량
Anchor | ||||
---|---|---|---|---|
|
디스크 인덱스의 사용량 정보이다. 버전 별로 쿼리가 다르므로 버전에 맞는 쿼리를 사용해야 한다.
Code Block title Altibase v5.3.3 이상 theme DJango language sql SELECT U.USER_NAME USER_NAME , I_LIST.TABLE_NAME , DECODE(I_LIST.PARTITION_NAME, NULL, '-', I_LIST.PARTITION_NAME) PARTITIONED_NAME , I_LIST.INDEX_NAME INDEX_NAME , DECODE(I_LIST.INDEX_PARTITION_NAME, NULL, '-', I_LIST.INDEX_PARTITION_NAME) PARTITIONED_INDEX , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024/1024, '999,999,999') 'MAX(MB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.TOTAL_EXTENT_COUNT)/1024/1024, '999,999,999') 'ALLOC(MB)' , TO_CHAR(SEG.TOTAL_USED_SIZE/1024/1024, '999,999,999') 'USED(MB)' FROM (SELECT T.TABLE_NAME , PT.PARTITION_NAME , I.INDEX_NAME , PI.INDEX_PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', I.TABLE_ID, 'T', PT.TABLE_ID) TABLE_ID , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , DECODE(I.IS_PARTITIONED, 'F', I.TBS_ID, 'T', PI.TBS_ID) TBS_ID , I.INDEX_ID , T.USER_ID FROM SYSTEM_.SYS_INDICES_ I LEFT OUTER JOIN SYSTEM_.SYS_INDEX_PARTITIONS_ PI ON PI.INDEX_ID = I.INDEX_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON PT.PARTITION_ID = PI.TABLE_PARTITION_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLES_ T ON T.TABLE_ID = I.TABLE_ID ) I_LIST , X$SEGMENT SEG , V$INDEX I , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.TABLE_OID = I.TABLE_OID AND SEG.SEGMENT_PID = I.INDEX_SEG_PID AND SEG.SPACE_ID = I_LIST.TBS_ID AND I_LIST.INDEX_ID = I.INDEX_ID AND I_LIST.TABLE_OID = I.TABLE_OID AND I_LIST.TBS_ID = TBS.ID AND D.SPACEID = I_LIST.TBS_ID AND U.USER_ID = I_LIST.USER_ID ORDER BY I_LIST.TABLE_NAME, I_LIST.INDEX_NAME, I_LIST.PARTITION_NAME, I_LIST.INDEX_PARTITION_NAME ;
Code Block title Altibase v5.1.5 버전 theme DJango language sql SELECT U.USER_NAME USER_NAME , I_LIST.TABLE_NAME , DECODE(I_LIST.PARTITION_NAME, NULL, '-', I_LIST.PARTITION_NAME) PARTITIONED_NAME , I_LIST.INDEX_NAME INDEX_NAME , DECODE(I_LIST.INDEX_PARTITION_NAME, NULL, '-', I_LIST.INDEX_PARTITION_NAME) PARTITIONED_INDEX , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024/1024, '999,999,999') 'MAX(MB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024/1024, '999,999,999') 'ALLOC(MB)' FROM (SELECT T.TABLE_NAME , PT.PARTITION_NAME , I.INDEX_NAME , PI.INDEX_PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', I.TABLE_ID, 'T', PT.TABLE_ID) TABLE_ID , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , DECODE(I.IS_PARTITIONED, 'F', I.TBS_ID, 'T', PI.TBS_ID) TBS_ID , I.INDEX_ID , T.USER_ID FROM SYSTEM_.SYS_INDICES_ I LEFT OUTER JOIN SYSTEM_.SYS_INDEX_PARTITIONS_ PI ON PI.INDEX_ID = I.INDEX_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON PT.PARTITION_ID = PI.TABLE_PARTITION_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLES_ T ON T.TABLE_ID = I.TABLE_ID ) I_LIST , V$SEGMENT SEG , V$INDEX I , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.TABLE_OID = I.TABLE_OID AND SEG.SEGMENT_PID = I.INDEX_SEG_PID AND SEG.SPACE_ID = I_LIST.TBS_ID AND I_LIST.INDEX_ID = I.INDEX_ID AND I_LIST.TABLE_OID = I.TABLE_OID AND I_LIST.TBS_ID = TBS.ID AND D.SPACEID = I_LIST.TBS_ID AND U.USER_ID = I_LIST.USER_ID ORDER BY I_LIST.TABLE_NAME, I_LIST.INDEX_NAME, I_LIST.PARTITION_NAME, I_LIST.INDEX_PARTITION_NAME ;
Code Block title Altibase v4.3.9 theme DJango language sql SELECT U.USER_NAME AS 'USER_NAME' , TBL.TABLE_NAME AS 'TABLE_NAME' , IDX.INDEX_NAME AS 'INDEX_NAME' , TBS.NAME AS 'TBS_NAME' , TO_CHAR((TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE)/1024/1024 , '999,999,999') AS 'TBS_MAX(KB)' , TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024/1024, '999,999,999') AS 'ALLOC(MB)' , TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_FULL_COUNT )/1024/1024, '999,999,999') AS 'USED(MB)' FROM X$SEGMENT SEG , V$INDEX I , SYSTEM_.SYS_INDICES_ IDX , SYSTEM_.SYS_TABLES_ TBL , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U WHERE SEG.TABLE_OID = I.TABLE_OID AND SEG.SEGMENT_DESC = I.INDEX_SEG_DESC AND I.INDEX_ID = IDX.INDEX_ID AND IDX.TABLE_ID = TBL.TABLE_ID AND SEG.SPACE_ID = IDX.TBS_ID AND SEG.SPACE_ID = TBS.ID AND IDX.USER_ID = U.USER_ID AND TBL.TABLE_TYPE = 'T' AND SEG.SEGMENT_TYPE = 5 ORDER BY U.USER_NAME, TBL.TABLE_NAME, IDX.INDEX_NAME ;
주요 컬럼 설명
TABLE_NAME
테이블 이름 PARTITIONED_TABLE
테이블에 파티션드 테이블을 생성했을 경우 파티션 테이블의 이름을 보여준다. 논-파티션드 테이블의 경우 '-'
INDEX_NAME
인덱스 이름 PARTITIONED_INDEX
인덱스에 파티션드 인덱스를 생성했을 경우 파티션드 인덱스 이름을 보여준다. 논-파티션드 인덱스의 경우 '-' TBS_NAME
인덱스 생성 시 지정한 테이블스페이스를 보여준다. 파티션드 인덱스에 테이블스페이스를 지정한 경우 파티션드 인덱스에서 지정한 테이블스페이스 이름을 보여준다. MAX(MB)
인덱스가 속한 테이블스페이스의 최대 크기를 의미한다. ALLOC(MB)
인덱스에서 할당받은 총 크기를 의미한다. USED(MB)
인덱스가 할당받은 공간 중 데이터가 포함된 크기를 의미한다.
데이터를 DELETE 를 수행하면 DELETE한 공간은 재사용 가능하지만 DELETE를 수행해도 인덱스의 USED는 줄어들지 않는다.
DELETE로 재사용 가능한 공간을 제외하고 실제 USED 를 확인하려면 AGING 작업을 수행해야 한다. 예) ALTER INDEX index_name AGING ;
ALTER INDEX ~ AGING ; 수행 중에는 해당 테이블에 X락을 잡기 때문에 해당 테이블에 대한 다른 요청은 대기 상태가 되므로 수행 시 주의해야 한다. AGING 작업을 수행하지 않으면 ALLOC 과 USED 는 항상 같은 값을 갖는다.
[OB07] 파티션 테이블 정보
Anchor | ||||
---|---|---|---|---|
|
파티션 테이블의 파티셔닝 방법, 파티셔닝 기준 등 파티션 테이블에 관한 정보를 보여주는 쿼리이다.
Code Block title Altibase v6.5.1 이상 theme DJango language sql SELECT U.USER_NAME , T.TABLE_NAME , P.PARTITION_NAME , DECODE(PM.PARTITION_METHOD, 0, RPAD('RANGE', 16), 1, RPAD('HASH', 16), 2, RPAD('LIST', 16)) PARTITION_METHOD , RPAD(P.PARTITION_ORDER, 15) PARTITION_ORDER , RPAD(PM.ROW_MOVEMENT, 12) ROW_MOVEMENT , P.PARTITION_MIN_VALUE , P.PARTITION_MAX_VALUE , RPAD(P.PARTITION_ACCESS, 6) 'ACCESS' -- Altibase v6.5.1 이전 버전은 삭제 후 사용 , TO_CHAR(P.CREATED, 'YYYY-MM-DD HH:MI:SS') CREATED -- Altibase v6.5.1 이전 버전은 삭제 후 사용 , TO_CHAR(P.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME -- Altibase v6.5.1 이전 버전은 삭제 후 사용 FROM SYSTEM_.SYS_TABLES_ T , SYSTEM_.SYS_TABLE_PARTITIONS_ P , SYSTEM_.SYS_PART_TABLES_ PM , SYSTEM_.SYS_USERS_ U WHERE 1=1 AND U.USER_ID = T.USER_ID AND T.TABLE_ID = P.TABLE_ID AND PM.TABLE_ID = T.TABLE_ID ;
주요 컬럼 설명
[OB08] 시퀀스
Anchor | ||||
---|---|---|---|---|
|
시퀀스 객체에 대한 정보를 보여주는 쿼리이다.
Code Block title Altibase v4 이상 theme DJango language sql SELECT USER_NAME , TABLE_NAME SEQ_NAME , MIN_SEQ MIN , CURRENT_SEQ , MAX_SEQ MAX , INCREMENT_SEQ INCREMENT , IS_CYCLE , CACHE_SIZE CACHE FROM V$SEQ A , SYSTEM_.SYS_USERS_ B , SYSTEM_.SYS_TABLES_ C WHERE 1=1 AND A.SEQ_OID = C.TABLE_OID AND B.USER_ID = C.USER_ID AND B.USER_NAME <> 'SYSTEM_' ;
[OB09] 시노님
Anchor | ||||
---|---|---|---|---|
|
시노님에 대한 정보를 보여주는 쿼리이다.
Code Block title Altibase v5 이상 theme DJango language sql SELECT NVL(U.USER_NAME, 'PUBLIC') SYNONYM_OWNER , S.SYNONYM_NAME , S.OBJECT_OWNER_NAME OBJECT_OWNER , S.OBJECT_NAME , TO_CHAR(S.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME FROM SYSTEM_.SYS_SYNONYMS_ S LEFT OUTER JOIN SYSTEM_.SYS_USERS_ U ON S.SYNONYM_OWNER_ID = U.USER_ID WHERE 1=1 --AND U.USER_ID <> 0 -- PUBLIC 시노님을 제외하고 싶은 경우 주석 제거하고 사용한다. ;
Code Block title Altibase v4.3.9 theme DJango language sql SELECT NVL(U.USER_NAME, 'PUBLIC') SYNONYM_OWNER , S.SYNONYM_NAME , S.SCHEMA_NAME OBJECT_OWNER , S.OBJECT_NAME FROM SYSTEM_.SYS_SYNONYMS_ S LEFT OUTER JOIN SYSTEM_.SYS_USERS_ U ON S.USER_ID = U.USER_ID ;
주요 컬럼 설명
[OB10] PSM
Anchor | ||||
---|---|---|---|---|
|
저장 프로시저와 저장 함수에 대해 실행 정보를 볼 수 있는 쿼리이다.
Code Block title Altibase v5 이상 theme DJango language sql SELECT A.USER_NAME , PROC_NAME PSM_NAME , DECODE(OBJECT_TYPE, 0, 'PROCEDURE', 1, 'FUNCTION', 3, 'TYPESET') PSM_TYPE , DECODE(STATUS, 0, 'VALID', 'INVALID') STATUS , TO_CHAR(B.CREATED, 'YYYY-MM-DD HH:MI:SS') CREATED , TO_CHAR(B.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME -- Altibase v4 에서는 삭제 후 사용 FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_PROCEDURES_ B WHERE 1=1 AND A.USER_ID = B.USER_ID AND A.USER_NAME <> 'SYSTEM_' ORDER BY 1, 2, 3;
주요 컬럼 설명
STATUS 컴파일 상태를 나타낸다. INVALID는 컴파일이 필요한 상태이다.
[OB11] PSM 생성구문
Anchor | ||||
---|---|---|---|---|
|
PROC_NAME 조건에 PSM 이름을 입력하면 해당 PSM 의 생성 구문을 보여준다.
Code Block title Altibase v4 이상 theme DJango language sql SELECT PARSE FROM SYSTEM_.SYS_PROC_PARSE_ WHERE PROC_OID = (SELECT PROC_OID FROM SYSTEM_.SYS_PROCEDURES_ WHERE PROC_NAME = 'psm_name') -- 조회하고자 하는 psm이름을 입력한다. ORDER BY SEQ_NO ;
[OB12] VIEW
Anchor | ||||
---|---|---|---|---|
|
VIEW 객체에 대한 정보를 보여준다.
Code Block title Altibase v5 이상 theme DJango language sql SELECT A.USER_NAME , B.TABLE_NAME VIEW_NAME , DECODE(C.STATUS, 0, 'VALID', 'INVALID') STATUS , TO_CHAR(B.CREATED, 'YYYY-MM-DD HH:MI:SS') CREATED -- Altibase v4 에서는 삭제 후 사용 , TO_CHAR(B.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME -- Altibase v4 에서는 삭제 후 사용 FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_TABLES_ B , SYSTEM_.SYS_VIEWS_ C WHERE 1=1 AND A.USER_ID = B.USER_ID AND B.TABLE_ID = C.VIEW_ID AND B.TABLE_TYPE = 'V' ;
[OB13] VIEW 생성구문
Anchor | ||||
---|---|---|---|---|
|
TABLE_NAME 조건에 뷰 이름을 입력하면 해당 뷰의 생성 구문을 보여준다.
Code Block title Altibase v4 이상 theme DJango language sql SELECT PARSE FROM SYSTEM_.SYS_VIEW_PARSE_ WHERE VIEW_ID = (SELECT TABLE_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_NAME = 'view_name') -- 조회하고자 하는 view이름을 입력한다. ORDER BY SEQ_NO ;
[OB14] PACKAGE
Anchor | ||||
---|---|---|---|---|
|
패키지에 대한 정보를 보여준다.
Code Block title Altibase v6.3.1 이상 theme DJango language sql SELECT A.USER_NAME , PACKAGE_NAME , DECODE(PACKAGE_TYPE, 6, 'PACKAGE_SPEC', 7, 'PACKAGE_BODY') PACKAGE_TYPE , DECODE(STATUS, 0, 'VALID', 'INVALID') STATUS , TO_CHAR(B.CREATED, 'YYYY-MM-DD HH:MI:SS') CREATED , TO_CHAR(B.LAST_DDL_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_DDL_TIME FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_PACKAGES_ B WHERE 1=1 AND A.USER_ID = B.USER_ID AND A.USER_NAME <> 'SYSTEM_' ;
주요 컬럼 설명
PACKAGE_TYPE 패키지 유형. 스펙인지 바디인지를 나타낸다. STATUS 컴파일 상태를 나타낸다. INVALID는 컴파일이 필요한 상태이다.
[OB15] PACKAGE 서브프로그램
Anchor | ||||
---|---|---|---|---|
|
패키지에 포함된 서브프로그램(저장 프로시저와 저장 함수)에 대한 정보를 보여준다.
Code Block title Altibase v6.3.1 이상 theme DJango language sql SELECT USER_NAME , OBJECT_NAME , PACKAGE_NAME , DECODE(SUB_TYPE, 0, 'PROCEDURE', 1, 'FUNCTION') SUB_TYPE , PARA_NAME , PARA_ORDER , DECODE(INOUT_TYPE, 0, 'IN', 1, 'OUT', 2, 'IN OUT') INOUT_TYPE , DATA_TYPE , SIZE , DEFAULT_VAL FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_PACKAGE_PARAS_ B WHERE 1=1 AND A.USER_ID = B.USER_ID AND A.USER_NAME <> 'SYSTEM_' ;
주요 컬럼 설명
SUB_TYPE 컴파일 상태를 나타낸다. 1 이면 컴파일이 필요한 상태이다. PARA_NAME 서브프로그램 파라미터 이름 PARA_ORDER 서브프로그램 파라미터 순서. 첫번째일 경우 1을 가짐. INOUT_TYPE 파라미터의 입출력 여부 DATA_TYPE 파라미터의 데이터 타입 SIZE 파라미터 타입의 크기 DEFAULT_VAL 파라미터의 기본값
[OB16] PACKAGE 생성구문
Anchor | ||||
---|---|---|---|---|
|
PACKAGE_NAME 조건에 패키지 이름을 입력하면 해당 패키지의 생성 구문을 보여준다.
Code Block title Altibase v6.3.1 이상 theme DJango language sql SELECT PARSE , DECODE(PACKAGE_TYPE, 6, 'PACKAGE_SPEC', 7, 'PACKAGE_BODY') PACKAGE_TYPE FROM SYSTEM_.SYS_PACKAGE_PARSE_ WHERE PACKAGE_OID IN (SELECT PACKAGE_OID FROM SYSTEM_.SYS_PACKAGES_ WHERE PACKAGE_NAME = 'package_name') -- 조회하고자 하는 패키지 이름을 입력한다. ORDER BY SEQ_NO ;
[OB17] 트리거
Anchor | ||||
---|---|---|---|---|
|
트리거 생성 정보를 보여준다.
Code Block title Altibase v4.3.9 이상 theme DJango language sql SELECT TR.USER_NAME , T.TABLE_NAME , TR.TRIGGER_NAME , RPAD(DECODE(TR.IS_ENABLE, 0, 'NO', 1, 'YES'), 9) IS_ENABLE , RPAD(DECODE(TR.EVENT_TIME, 1, 'BEFORE', 2, 'AFTER', 3, 'INSTEAD OF'), 10) EVENT_TIME , RPAD(DECODE(TR.EVENT_TYPE, 1, 'INSERT', 2, 'DELETE', 4, 'UPDATE'), 10) EVENT_TYPE , DECODE(TR.GRANULARITY, 1, 'FOR EACH ROW', 2, 'FOR EACH STATEMENT') GRANULARITY FROM SYSTEM_.SYS_TABLES_ T , SYSTEM_.SYS_TRIGGERS_ TR WHERE 1=1 AND TR.TABLE_ID = T.TABLE_ID;
주요 컬럼 설명
[OB18] 작업(Job)
Anchor | ||||
---|---|---|---|---|
|
작업(Job) 객체에 대한 정보를 보여준다.
Code Block title Altibase v6.5.1 이상 theme DJango language sql SELECT JOB_NAME , EXEC_QUERY PROC_NAME , INTERVAL , LPAD(DECODE(INTERVAL_TYPE, 'YY', 'YEARLY', 'MM', 'MONTHLY', 'DD', 'DAILY', 'HH', 'HOURLY', 'MI', 'MINUTELY'), 13) INTERVAL_TYPE , LPAD(DECODE(STATE, 0, '-', 1, 'ING'), 5) STATE , LPAD(EXEC_COUNT, 10) EXEC_COUNT , LPAD(ERROR_CODE, 10) ERROR_CODE , TO_CHAR(START_TIME, 'YYYY-MM-DD HH:MI:SS') START_TIME , TO_CHAR(LAST_EXEC_TIME, 'YYYY-MM-DD HH:MI:SS') LAST_EXEC_TIME , TO_CHAR(END_TIME, 'YYYY-MM-DD HH:MI:SS') END_TIME , DECODE(IS_ENABLE, 'T', 'YES', 'F', 'NO') IN_ENABLE -- Altibase v6.3.1 에서는 삭제 후 사용한다. FROM SYSTEM_.SYS_JOBS_;
주요 컬럼 설명
JOB_NAME
JOB 객체의 이름 PROC_NAME
JOB에 등록한 프로시저 이름 INTERVAL, INTERVAL_TYPE
수행 주기 STATE
JOB 진행 상태. ING이면 작업 스케줄러에 의해 프로시저가 현재 수행 중임을 의미한다. EXEC_COUNT
JOB의 실행 횟수. ERROR_CODE
마지막 JOB 실행 결과. START_TIME
JOB이 처음 수행을 시작한 시각. LAST_EXEC_TIME
마지막으로 JOB을 수행한 시각 가장 최근에 수행된 시각을 의미한다. END_TIME
마지막으로 수행된 JOB이 종료한 시각. IN_ENABLE
작업 스케줄러에 의해 JOB 실행이 가능한 상태인지 알 수 있다.
[OB19] 데이터베이스 사용자
Anchor | ||||
---|---|---|---|---|
|
데이터베이스 사용자 정보를 조회하는 문장입니다.
Code Block theme DJango language sql SELECT USER_ID, USER_NAME, TBS.NAME 'DEFAULT_TBS', CREATED FROM SYSTEM_.SYS_USERS_ U, V$TABLESPACES TBS WHERE U.DEFAULT_TBS_ID = TBS.ID;
[OB20] 테이블스페이스 목록
Anchor | ||||
---|---|---|---|---|
|
테이블스페이스 목록을 조회하는 문장입니다.
Code Block theme DJango language sql SELECT ID 'TBS_ID' , NAME 'TBS_NAME' , DECODE(TYPE, 0, 'SYSTEM_TBS', 1, 'SYSTEM_TBS', 2, 'USER_MEM_TBS', 3, 'SYSTEM_TBS', 4, 'USER_DISK_TBS', 5, 'SYSTEM_TBS', 6, 'USER_DISK_TEMP', 7, 'SYSTEM_UNDO', 8, 'USER_VOL_TBS') 'TBS_TYPE' FROM V$TABLESPACES;
권한(Privileges)
Anchor | ||||
---|---|---|---|---|
|
...
Privileges 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[PV01] 시스템 권한 (System Privilege)
Anchor | ||||
---|---|---|---|---|
|
모든 사용자에게 부여된 시스템 권한을 보여준다. 특정 사용자에게 보여된 권한만을 보려면 주석부분(A.USER_NAME 조건)을 삭제하고 사용자 이름을 입력하고 조회한다.
Code Block title Altibase v4.3.9 이상 theme DJango language sql SELECT A.USER_NAME GRANTEE , C.USER_NAME GRANTOR , REPLACE(D.PRIV_NAME, '_', ' ') PRIV_NAME FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_GRANT_SYSTEM_ B, SYSTEM_.SYS_USERS_ C, SYSTEM_.SYS_PRIVILEGES_ D WHERE C.USER_NAME <> 'SYSTEM_' AND A.USER_TYPE <> 'R' -- 이 조건은 Altibase v6.5.1 이하 버전에서는 삭제 후 사용해야 한다. AND B.GRANTEE_ID = A.USER_ID AND B.GRANTOR_ID = C.USER_ID AND B.PRIV_ID = D.PRIV_ID --AND A.USER_NAME = 'user_name' ORDER BY GRANTEE, GRANTOR ;
주요 컬럼 설명
GRANTEE 권한을 부여 받은 사용자의 이름 GRANTOR 권한을 부여한 사용자의 이름 PRIV_NAME 시스템 권한 이름
[PV02] 객체 권한 (Object Privilege)
Anchor | ||||
---|---|---|---|---|
|
모든 사용자에게 부여된 객체 권한을 보여준다.
Altibase v6.3.1 이상 버전에서 사용할 수 있는 쿼리이다. 하위 버전에서 사용하려면 주석이 추가된 부분을 삭제하면 된다.
Code Block title Altibase v6.3.1 이상 theme DJango language sql SELECT A.USER_NAME GRANTEE , C.USER_NAME GRANTOR , F.USER_NAME OBJECT_OWNER , OBJ.OBJ_NAME OBJECT_NAME , DECODE(OBJ.OBJ_TYPE, 'T', DECODE(OBJ.OBJ_TYPE1, 'T', 'TABLE', 'V', 'VIEW'), 'S', 'SEQUENCE', 'P', 'PROCEDURE', 'Y', 'External library', 'D', 'DIRECTORY') OBJECT_TYPE , REPLACE(D.PRIV_NAME, '_', ' ') PRIV_NAME , DECODE(B.WITH_GRANT_OPTION, 0, 'NO', 'YES') WITH_GRANT_OPTION FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_GRANT_OBJECT_ B , SYSTEM_.SYS_USERS_ C , SYSTEM_.SYS_PRIVILEGES_ D , (SELECT TABLE_NAME as OBJ_NAME, TABLE_TYPE as OBJ_TYPE1, 'T' as OBJ_TYPE, TABLE_ID as obj_id, USER_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_TYPE IN ('V', 'T') UNION SELECT TABLE_NAME as OBJ_NAME, '' as OBJ_TYPE1, TABLE_TYPE as OBJ_TYPE, TABLE_ID as obj_id, USER_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_TYPE = 'S' UNION SELECT PROC_NAME as OBJ_NAME, '' as OBJ_TYPE1, 'P' as OBJ_TYPE, PROC_OID as obj_id, user_id FROM system_.SYS_PROCEDURES_ UNION SELECT directory_NAME as OBJ_NAME, '' as OBJ_TYPE1, 'D' as OBJ_TYPE, DIRECTORY_ID as obj_id, user_id FROM SYSTEM_.SYS_DIRECTORIES_ UNION -- 6.3.1 이하에서는 삭제 후 사용 SELECT library_name as OBJ_NAME, '' as OBJ_TYPE1, 'Y' as OBJ_TYPE, library_ID as obj_id, user_id -- 6.3.1 이하에서는 삭제 후 사용 FROM SYSTEM_.SYS_LIBRARIES_ -- 6.3.1 이하에서는 삭제 후 사용 ) OBJ , SYSTEM_.SYS_USERS_ F WHERE 1=1 AND C.USER_NAME <> 'SYSTEM_' AND A.USER_TYPE <> 'R' -- 이 조건은 Altibase v6.5.1 이하 버전에서는 삭제 후 사용해야 한다. AND B.GRANTEE_ID = A.USER_ID AND B.GRANTOR_ID = C.USER_ID AND B.PRIV_ID = D.PRIV_ID AND B.OBJ_ID = OBJ.OBJ_ID AND OBJ.OBJ_TYPE = B.OBJ_TYPE AND OBJ.USER_ID = F.USER_ID ORDER BY GRANTEE, GRANTOR, OBJECT_OWNER, OBJECT_NAME, PRIV_NAME ;
주요 컬럼 설명
GRANTEE
권한을 부여 받은 사용자의 이름 GRANTOR
권한을 부여한 사용자의 이름 OBJECT_OWNER
객체 소유자 이름 OBJECT_NAME
객체 이름 PRIV_NAME
권한 종류 WITH_GRANT_OPTION
객체 권한을 부여 받은 사용자가 다른 사용자에게도 해당 권한을 부여할 수 있는지를 의미한다.
[PV03] 롤(Role) 생성 정보
Anchor | ||||
---|---|---|---|---|
|
- 데이터베이스에 생성된 롤(Role) 목록과 롤에 부여된 시스템 권한 및 객체 권한을 확인할 수 있다.
롤은 Altibase v6.5.1 부터 지원하는 기능이다.
Code Block title Altibase v6.5.1 이상 theme DJango language sql SELECT A.USER_NAME 'ROLE_NAME' , RPAD('SYSTEM', 9) PRIV_TYPE , '' OBJECT_NAME, '' OBJECT_TYPE , REPLACE(D.PRIV_NAME, '_', ' ') PRIV_NAME , '' WITH_GRANT_OPTION FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_GRANT_SYSTEM_ B, SYSTEM_.SYS_PRIVILEGES_ D WHERE 1=1 AND A.USER_ID <> 0 AND A.USER_TYPE = 'R' AND B.GRANTEE_ID = A.USER_ID AND B.PRIV_ID = D.PRIV_ID UNION SELECT A.USER_NAME 'ROLE_NAME' , RPAD('OBJECT', 9) PRIV_TYPE , F.USER_NAME||'.'||OBJ.OBJ_NAME OBJECT_NAME , DECODE(OBJ.OBJ_TYPE, 'T', DECODE(OBJ.OBJ_TYPE1, 'T', 'TABLE', 'V', 'VIEW'), 'S', 'SEQUENCE', 'P', 'PROCEDURE', 'Y', 'External library', 'D', 'DIRECTORY') OBJECT_TYPE , REPLACE(D.PRIV_NAME, '_', ' ') PRIV_NAME , DECODE(B.WITH_GRANT_OPTION, 0, 'NO', 'YES') WITH_GRANT_OPTION FROM SYSTEM_.SYS_USERS_ A , SYSTEM_.SYS_GRANT_OBJECT_ B , SYSTEM_.SYS_PRIVILEGES_ D , (SELECT TABLE_NAME as OBJ_NAME, TABLE_TYPE as OBJ_TYPE1, 'T' as OBJ_TYPE, TABLE_ID as obj_id, USER_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_TYPE IN ('V', 'T') UNION SELECT TABLE_NAME as OBJ_NAME, '' as OBJ_TYPE1, TABLE_TYPE as OBJ_TYPE, TABLE_ID as obj_id, USER_ID FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_TYPE = 'S' UNION SELECT PROC_NAME as OBJ_NAME, '' as OBJ_TYPE1, 'P' as OBJ_TYPE, PROC_OID as obj_id, user_id FROM system_.SYS_PROCEDURES_ UNION SELECT directory_NAME as OBJ_NAME, '' as OBJ_TYPE1, 'D' as OBJ_TYPE, DIRECTORY_ID as obj_id, user_id FROM SYSTEM_.SYS_DIRECTORIES_ UNION SELECT library_name as OBJ_NAME, '' as OBJ_TYPE1, 'Y' as OBJ_TYPE, library_ID as obj_id, user_id FROM SYSTEM_.SYS_LIBRARIES_ ) OBJ , SYSTEM_.SYS_USERS_ F WHERE 1=1 AND A.USER_ID <> 0 AND A.USER_TYPE = 'R' AND B.GRANTEE_ID = A.USER_ID AND B.PRIV_ID = D.PRIV_ID AND B.OBJ_ID = OBJ.OBJ_ID AND OBJ.OBJ_TYPE = B.OBJ_TYPE AND OBJ.USER_ID = F.USER_ID ;
주요 컬럼 설명
ROLE_NAME
롤(Role)의 이름 PRIV_TYPE
롤에 부여된 권한이 시스템 권한인지 객체 권한인지 알 수 있다. 'SYSTEM' 은 시스템 권한이며 'OBJECT'는 객체 권한이다. OBJECT_NAME PRIV_TYPE이 OBJECT인 경우 객체 이름을 출력한다. 객체소유자.객체이름 형식으로 보여준다. OBJECT_TYPE PRIV_TYPE이 OBJECT인 경우 객체 종류를 출력한다. PRIV_NAME 권한 이름 WITH_GRANT_OPTION PRIV_TYPE이 OBJECT인 경우 객체 권한을 부여 받은 사용자가 다른 사용자에게도 해당 권한을 부여할 수 있는지를 의미한다.
[PV04] 롤(Role)을 부여받은 사용자 정보
Anchor | ||||
---|---|---|---|---|
|
롤이 누구에게 부여되었고 누가 롤을 부여했는지 확인할 수 있다.
Code Block title Altibase v6.5.1 이상 theme DJango language sql SELECT U1.USER_NAME GRANTEE , U2.USER_NAME GRANTOR , RU.USER_NAME ROLE_NAME FROM SYSTEM_.SYS_USER_ROLES_ R , SYSTEM_.SYS_USERS_ RU , SYSTEM_.SYS_USERS_ U1 , SYSTEM_.SYS_USERS_ U2 WHERE 1=1 AND RU.USER_TYPE = 'R' AND R.ROLE_ID <> 0 AND RU.USER_ID = R.ROLE_ID AND R.GRANTEE_ID = U1.USER_ID AND R.GRANTOR_ID = U2.USER_ID ;
주요 컬럼 설명
GRANTEE
롤을 부여받은 데이터베이스 사용자 GRANTOR
롤을 부여한 데이터베이스 사용자 ROLE_NAME
롤 이름
[PV05] 시스템 및 객체 권한 종류
Anchor | ||||
---|---|---|---|---|
|
Altibase에서 지원하는 시스템 권한과 객체 권한 목록을 보여준다.
Code Block title Altibase v4.3.9 이상 theme DJango language sql SELECT DECODE(PRIV_TYPE, 1, 'OBJECT', 2, 'SYSTEM') PRIV_TYPE , PRIV_NAME FROM SYSTEM_.SYS_PRIVILEGES_ ORDER BY PRIV_TYPE, PRIV_NAME;
제약조건(Constraints)
Anchor | ||||
---|---|---|---|---|
|
...
Constraints 정보를 확인하기 위한 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[CT01] 전체 제약조건 목록
Anchor | ||||
---|---|---|---|---|
|
데이터베이스 내에 생성된 모든 제약조건 목록을 보여준다.
아래 쿼리는 Altibase v6.3.1 이상 버전에서 동작하며 주석 부분을 삭제하면 하위 버전에서도 사용할 수 있다.
Code Block title Altibase v6.3.1 이상 theme DJango language sql SELECT USER_NAME , TABLE_NAME OBJECT_NAME , DECODE(B.TABLE_TYPE, 'T', 'TABLE', 'Q', 'QUEUE', 'V', 'VIEW', 'SEQUENCE') OBJECT_TYPE , C.CONSTRAINT_NAME CONST_NAME , DECODE(C.CONSTRAINT_TYPE, 0, 'FOREIGN KEY', 1, 'NOT NULL', 2, 'UNIQUE', 3, 'PRIMARY KEY', 4, 'NULL', 5, 'TIMESTAMP', 6, 'LOCAL UNIQUE', 7, 'CHECK') CONST_TYPE , COLUMN_NAME , CHECK_CONDITION -- Altibase v6.3.1 이전 버전에서는 삭제 후 사용 FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_CONSTRAINTS_ C, SYSTEM_.SYS_COLUMNS_ D, SYSTEM_.SYS_CONSTRAINT_COLUMNS_ E WHERE A.USER_ID=C.USER_ID AND B.TABLE_ID = C.TABLE_ID AND A.USER_ID = D.USER_ID AND A.USER_ID = E.USER_ID AND B.TABLE_ID = D.TABLE_ID AND B.TABLE_ID = E.TABLE_ID AND C.CONSTRAINT_ID = E.CONSTRAINT_ID AND D.COLUMN_ID = E.COLUMN_ID AND A.USER_NAME <> 'SYSTEM_' ORDER BY USER_NAME, OBJECT_NAME, CONST_TYPE;
주요 컬럼 설명
OBJECT_TYPE 오브젝트의 타입.
TABLE(T), VIEW(V), SEQUENCE(S), QUEUE(Q)
CONST_TYPE 제약조건 타입.
FOREIGN KEY(0), NOT NULL(1), UNIQUE(2),PRIMARY KEY(3), NULL(4), TIMESTAMP(5), LOCAL UNIQUE(6), CHECK(7)
CHECK_CONDITION
CHECK 제약조건을 지정할 때 정의한 무결성 규칙을 보여준다. 이 컬럼은 Altibase v6.3.1 부터 지원한다.
[CT02] PK, FK, UNIQUE 관련 제약조건 및 테이블, 인덱스 목록
Anchor | ||||
---|---|---|---|---|
|
Primary key, Foreign key, Unique 제약조건에 대한 정보를 보여준다.
Code Block title Altibase v4.3.9 이상 theme DJango language sql SELECT A.USER_NAME , B.TABLE_NAME , DECODE(C.CONSTRAINT_TYPE, 0, 'FK', 2, 'UNIQUE', 3, 'PK', 4, 'NULL') CONST_TYPE , C.CONSTRAINT_NAME CONST_NAME , DECODE(D.INDEX_NAME, C.CONSTRAINT_NAME, NULL, INDEX_NAME) INDEX_NAME , (SELECT TABLE_NAME FROM SYSTEM_.SYS_TABLES_ WHERE TABLE_ID = C.REFERENCED_TABLE_ID) R_TABLE , (SELECT INDEX_NAME FROM SYSTEM_.SYS_INDICES_ WHERE INDEX_ID = C.REFERENCED_INDEX_ID) R_INDEX FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_CONSTRAINTS_ C LEFT OUTER JOIN SYSTEM_.SYS_INDICES_ D ON C.INDEX_ID = D.INDEX_ID WHERE C.TABLE_ID = B.TABLE_ID AND A.USER_NAME <> 'SYSTEM_' AND C.USER_ID = A.USER_ID AND C.CONSTRAINT_TYPE IN (3, 0, 2, 6) --PK, FK, UNIQUE, LOCAL UNIQUE ORDER BY TABLE_NAME, CONST_TYPE ;
주요 컬럼 설명
R_TABLE 제약조건이 FK의 경우 참조대상 테이블의 이름. R_INDEX 제약조건이 FK의 경우 참조대상 인덱스의 이름.
[CT03] 복합 인덱스 컬럼 구성 목록
Anchor | ||||
---|---|---|---|---|
|
복한 인덱스 구성 정보를 보여준다.
Code Block theme DJango language sql SELECT D.USER_NAME , C.TABLE_NAME , B.INDEX_NAME , E.COLUMN_NAME , A.INDEX_COL_ORDER COL_ORDER , DECODE(A.SORT_ORDER, 'A', 'ASC', 'D', 'DESC') SORT FROM SYSTEM_.SYS_INDEX_COLUMNS_ A, SYSTEM_.SYS_INDICES_ B, SYSTEM_.SYS_TABLES_ C, SYSTEM_.SYS_USERS_ D, SYSTEM_.SYS_COLUMNS_ E WHERE D.USER_NAME <> 'SYSTEM_' AND C.TABLE_TYPE = 'T' AND A.INDEX_ID = B.INDEX_ID AND A.TABLE_ID = C.TABLE_ID AND A.USER_ID = D.USER_ID AND A.COLUMN_ID = E.COLUMN_ID ORDER BY USER_NAME, TABLE_NAME, INDEX_NAME, COL_ORDER ;
주요 컬럼 설명
COL_ORDER 인덱스 컬럼의 구성 순서로 0부터 시작한다. SORT 인덱스 컬럼의 정렬 형태. / ASC(A), DESC(D)
[CT04] 인덱스 정보 요약
Anchor | ||||
---|---|---|---|---|
|
모든 인덱스 정보를 보여준다.
Code Block theme DJango language sql SELECT A.USER_NAME , C.INDEX_NAME , C.INDEX_ID , B.TABLE_NAME , NVL(D.NAME, 'SYS_TBS_MEMORY') TBS_NAME , C.IS_UNIQUE , C.COLUMN_CNT FROM SYSTEM_.SYS_USERS_ A, SYSTEM_.SYS_TABLES_ B, SYSTEM_.SYS_INDICES_ C LEFT OUTER JOIN V$TABLESPACES D ON C.TBS_ID = D.ID WHERE A.USER_NAME <> 'SYSTEM_' AND B.TABLE_TYPE = 'T' AND C.TABLE_ID = B.TABLE_ID AND C.USER_ID = A.USER_ID ORDER BY B.TABLE_NAME, C.INDEX_NAME ;
주요 컬럼 설명
TBS_NAME 인덱스가 저장된 테이블스페이스의 이름.
(A4에서도 호환이 가능하도록 테이블스페이스가 없는 인덱스는 메모리 테이블스페이스로 간주)
IS_UNIQUE 인덱스의 유니크 여부. / TRUE(T), FALSE(F) COLUMN_CNT 인덱스를 구성하는 컬럼의 개수.
이중화(Replication)
Anchor | ||||
---|---|---|---|---|
|
...
이중화 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.
[RP01] 이중화 sender 정보
Anchor | ||||
---|---|---|---|---|
|
이중화 sender 스레드에 대한 정보이다. 아래 쿼리는 Altibase v5 이상에서 사용할 수 있다.
Code Block title Altibase v5 버전 이상 theme DJango language sql SELECT REP_NAME , PEER_IP REMOTE_IP , PEER_PORT REMOTE_REP_PORT , DECODE(STATUS, 0, 'STOP', 1, 'RUN', 2, 'RETRY') AS STAUS , REPL_MODE -- Altibase v4 버전에서는 이 컬럼을 삭제한다. , DECODE(NET_ERROR_FLAG, 0, 'OK', 'ERROR') AS NETWORK , XSN FROM V$REPSENDER ;
주요 컬럼 설명
REP_NAME 이중화 객체의 이름. REMOTE_IP 이중화 대상인 원격서버의 ip 주소 REMOTE_REP_PORT 이중화 대상인 원격서버의 이중화 포트번호로 원격서버의 프로퍼티에 의해 정해진다. STAUS sender의 현재 상태로 1 이어야 정상이다. / STOP(0), RUN(1), RETRY(2) REPL_MODE sender의 현재 이중화 모드. Altibase v5 버전부터 지원하는 컬럼이다. NETWORK network 에러 여부로 0이어야 정상이다. / OK(0), ERROR(1) XSN sender가 마지막으로 송신한 SN(Serial Number/리두로그일련번호)으로 v$repgap의 REP_SN과 동일하다.
[RP02] 이중화 receiver 정보
Anchor | ||||
---|---|---|---|---|
|
이중화 receiver 스레드에 대한 정보이다. 아래 쿼리는 Altibase v5 버전 이상에서 사용할 수 있다.
Code Block title Altibase v4 버전 이상 theme DJango language sql SELECT REP_NAME , PEER_IP REMOTE_IP , PEER_PORT REMOTE_REP_PORT , APPLY_XSN FROM V$REPRECEIVER ;
주요 컬럼 설명
REMOTE_IP 이중화 주체인 원격서버의 ip 주소. REMOTE_REP_PORT 이중화 주체인 원격서버의 sender가 접속한 포트번호로 특별히 정해지지 않았기에 그때그때 다르다. APPLY_XSN receiver가 현재 반영중인 원격서버의 SN.
[RP03] 이중화갭
Anchor | ||||
---|---|---|---|---|
|
이중화 갭 정보를 확인하는 쿼리이다. 아래 쿼리는 Altibase v5.3.3 버전 이상에서 사용할 수 있다.
Code Block title Altibase v5.3.3 이상 theme DJango language sql SELECT REP_NAME , REP_SN , REP_LAST_SN , REP_GAP , READ_FILE_NO , START_FLAG -- Altibase v5.3.3 이전 버전에서는 이 컬럼을 삭제 후 사용한다. FROM V$REPGAP ;
주요 컬럼 설명
REP_SN sender가 마지막으로 송신한 SN, v$repsender의 XSN과 동일 REP_LAST_SN 지역서버의 트랜잭션에 의해 가장 최근에 로깅된 SN REP_GAP REP_LAST_SN과 REP_SN의 간격으로 비동기화 정도를 나타낸다. (즉, REP_LAST_SN - REP_SN) READ_FILE_NO sender 가 이중화를 위해 마지막으로 접근한 리두로그 파일번호로써 메모리상의 이중화 전용 리두로그 버퍼를 읽을 때는 갱신되지 않으므로 이중화갭이 없는데도 과거의 리두로그 파일번호가 나타날 수 있다.
따라서, 이 컬럼의 값은 이중화갭이 있을 때만 의미가 있는 값이다.START_FLAG 이중화의 구동상태로 일반적으로 0 이다.
NORMAL(0), QUICK(1), SYNC(2), SYNC_ONLY(3), SYNC RUN(4), SYNC END(5), RECOVERY(6), OFFLINE(7)Altibase v5.3.3 부터 지원하는 컬럼이다.
[RP04] 이중화 전체 현황
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v4 이상에서 사용할 수 있다.
Code Block title Altibase v4 이상 theme DJango language sql SELECT A.REPLICATION_NAME REP_NAME , D.HOST_IP REMOTE_IP , NVL(TO_CHAR(E.REP_GAP), '-') AS REP_GAP , A.XSN RESTART_XSN , DECODE(B.PEER_PORT, NULL, 'OFF', 'ON') AS SENDER , DECODE(C.PEER_PORT, NULL, 'OFF', 'ON') AS RECEIVER FROM SYSTEM_.SYS_REPL_HOSTS_ D , SYSTEM_.SYS_REPLICATIONS_ A LEFT OUTER JOIN V$REPSENDER B ON A.REPLICATION_NAME = B.REP_NAME LEFT OUTER JOIN V$REPRECEIVER C ON A.REPLICATION_NAME = C.REP_NAME LEFT OUTER JOIN (SELECT REP_NAME, MAX(REP_GAP) REP_GAP FROM V$REPGAP GROUP BY REP_NAME) E ON A.REPLICATION_NAME = E.REP_NAME WHERE A.REPLICATION_NAME = D.REPLICATION_NAME ORDER BY REP_NAME ;
주요 컬럼 설명
RESTART_XSN 이중화 대상인 원격서버가 반영한 SN, 이중화 재 시작 시 재전송 기점을 의미 SENDER sender의 작동 유무. RECEIVER receiver의 작동 유무.
[RP05] 이중화를 수행하지 못해 누적된 리두로그 파일 측정
Anchor | ||||
---|---|---|---|---|
|
아래 쿼리는 Altibase v5 이상 버전에서 사용할 수 있다.
Code Block theme DJango language sql SELECT CASE2((BUFFER_MIN_SN < READ_SN), 'REP BUFFER '||ROUND((BUFFER_MAX_SN-READ_SN)/(BUFFER_MAX_SN-BUFFER_MIN_SN)*100, 2)||' % LEFT ', (SELECT TO_CHAR(CUR_WRITE_LF_NO - READ_FILE_NO) FROM V$LFG, V$REPGAP) ) LOGFILE_FOR_REP FROM V$REPLOGBUFFER ;
...
주요 컬럼 설명
LOGFILE_FOR_REP sender가 이중화 전용 리두로그 버퍼를 읽는 중에는 '이중화 전용 리두로그 버퍼에서 전송해야 할 로그'를 백분율로 나타내며 sender가 직접 리두로그 파일을 읽을 때는 '이중화를 해야 할 리두로그 파일의 개수'를 나타내므로 응용에 따라 간접적으로 MB 환산이 가능하다.
이 값이 백분율로만 나타난다면 이중화 전용 리두로그 버퍼에서만 이중화가 이루어 지는 것이므로 양호한 것이라 판단할 수 있다. (매우 빠르게 전송 시 순간적으로 음수가 나올 수도 있으나 이 경우는 무시하여도 된다.)
하지만, 리두로그 파일 개수로 빈번히 모니터링 될 때에는 프로퍼티 REPLICATION_LOG_BUFFER_SIZE 에 의해 정의되는 이중화 전용 리두로그 버퍼의 크기를 기본값인 30M 이상으로 늘리거나 sender를 위해 미리 메모리에 캐시(cache)할 리두로그 파일의 개수를 의미하는 프로퍼티 REPLICATION_PREFETCH_LOGFILE_COUNT을 늘려야 한다.
[RP06] 이중화 대상 테이블 목록
Anchor | ||||
---|---|---|---|---|
|
이중화 객체에 등록된 테이블을 확인할 수 있다.
Code Block title Altibase v4 이상 theme DJango language sql SELECT REPLICATION_NAME REP_NAME , LOCAL_USER_NAME||'.'||LOCAL_TABLE_NAME LOCAL_TBL , REMOTE_USER_NAME||'.'||REMOTE_TABLE_NAME REMOTE_TBL FROM SYSTEM_.SYS_REPL_ITEMS_ ORDER BY 1, 2 ;
...