Created with Raphaël 2.1.0
    Loading...
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 28 Next »

 

 

개요 


본 문서는 Altibase 모니터링을 위해 기본적으로 습득해야 할 사항과 그에 따른 일반적인 모니터링 쿼리 예시를 제시하는 문서로 아래와 같이 크게 3개의 섹션으로 구성되어 있다.

  • Altibase 모니터링 개요
  • Altibase 메타테이블(meta table) 및 성능 뷰(performance view) 개요
  • 모니터링 요소 와 그에 대응하는 모니터링 쿼리

 

본 문서는 예시로 제시되는 모니터링 쿼리와 관련된 메타 테이블 및 성능 뷰에 관해 간략히 설명하고 있다.

컬럼에 대한 설명은 이름이 직관적이어서 별도의 설명이 필요 없다고 판단되는 경우와 이미 설명한 컬럼이 중복해서 나오는 경우는 생략하였다.

따라서, 메타 테이블 및 성능 뷰에 대해 보다 상세한 설명과 이해를 위해서 기본적으로  General Reference 매뉴얼을 참조하는 것을 권장한다.

모니터링 쿼리 예시만 참조하려면 '3. 모니터링 요소와 모니터링 쿼리' 섹션으로 바로 이동하면 된다. 

본 문서에 포함된 ERD는 CA ERwin ® Data Modeler을 사용하여 IDEF1X 표기법으로 작성되었다. 

 

 

Icon

이 문서와 관련된 오류 및 개선사항은 기술지원포털 또는 기술지원센터로 문의주시기 바랍니다.

Icon

이 문서는 정보 제공을 목적으로 제공되며, 사전에 예고 없이 변경될 수 있습니다. 이 문서는 오류가 있을 수 있으며, 상업적 또는 특정 목적에 부합하는 명시적, 묵시적인 책임이 일절 없습니다.

이 문서에 포함된 Altibase 제품의 특징이나 기능의 개발, 발표 등의 시기는 Altibase 재량입니다.

Altibase는 이 문서에 대하여 관련된 특허권, 상표권, 저작권 또는 기타 지적 재산권을 보유할 수 있습니다.

 

 

Altibase 모니터링 개요


Altibase 모니터링을 위한 기본적인 사항에 대해 설명한다.

 

모니터링 분류


Altibase는 DBMS이다. DBMS 모니터링은 아래와 같이 크게 3가지로 분류할 수 있다.

본 문서는 '내부 모니터링'을 위해 필요한 모니터링 쿼리에 대해 안내한다. 

  • 내부 모니터링
    데이터 딕셔너리에 대한 쿼리를 통한 DBMS 내부에서의 모니터링을 의미한다.

  • 외부 모니터링
    OS 명령어를 통한 DBMS 외부에서의 모니터링을 의미한다.

  • trace로그 모니터링
    DBMS에 의해 기록되는 각종 trace로그에 대한 모니터링을 의미한다.

 

데이터 딕셔너리


데이터베이스에 대한 모든 정보를 요약 및 저장하여 DBMS를 효율적으로 사용할 수 있도록 하는 것으로 Altibase 데이터 딕셔너리는 두 가지로 구성되어 있다.

  • 메타테이블 (meta table)
    데이터베이스 객체를 관리하기 위해 데이터베이스 생성 시점에 자동으로 생성되는 테이블이다. 해당 테이블은  시스템 관리자인 'SYSTEM_' 사용자의 소유로 일반 사용자는 SELECT만 가능하다.
  • 성능 뷰 (performance view)
    SELECT 시점에 Altibase 내부의 상태 정보를 뷰 형태로 제공되는 것으로 Altibase 상태의 최신 정보를 얻을 수 있다. 이 역시 SELECT만 가능하며 성능 뷰의 접두어는 'v$'이다.

 

모니터링 방법


현업에서 일반적으로 사용하는 모니터링 방법은 아래와 같다.

  • 쉘 스크립트 작성
  • 응용프로그램 작성
  • 유틸리티 활용

 

 

Altibase 메타테이블 및 성능 뷰


Altibase 내부 모니터링을 위해서는 Altibase 데이터 딕셔너리인 메타테이블과 성능 뷰에 대한 이해가 우선적으로 필요하다.

본 문서에서는 사용자의 이해와 쿼리 편의를 고려하여 메타테이블과 성능 뷰의 관계를 ERD(Entity-Relationship Diagram)를 사용하여 표현하였다.

이에 앞서 숙지해야 할 사항에 대해 설명한다.

 

ERD 표기에 관하여


사용자의 이해와 쿼리 편의를 고려하여 기반 테이블이 존재하지 않는 성능 뷰 특성을 무시, 아래와 같이 성능 뷰를 테이블로 표현하여 조인 시 참고할 주요 키를 FK 형태로 표현하였다.

이러한 표기로 인한 혼동을 피하기 위해 메타테이블은 배경을 노란색으로 성능 뷰는 흰색으로 표시하였다.

또한, 위 ERD에서 메타테이블의 ID 컬럼과 성능 뷰의 META_ID 컬럼처럼 동일한 속성의 컬럼이 메타테이블 및 성능 뷰에 따라 서로 다른 이름일 수 있는데, 이런 경우는 컬럼에 동일한 색상을 주어 같은 속성임을 나타냈다.

 

유의사항


Altibase 메타테이블과 성능 뷰는 아래와 같은 특성이 있음을 유의해야 한다.

  1. 동일한 속성의 컬럼이 메타테이블 및 성능뷰에 따라 서로 다른 이름일 수 있다.
  2. Altibase 버전에 따라 메타테이블 및 성능 뷰의 컬럼이름이 변경되거나 삭제될 수 있다.
  3. 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$memgc는 메모리DB GC에 대한 성능 뷰로 다른 메타테이블 및 성능 뷰와 직접적인 관계는 없으나 v$transaction의 특정 컬럼과 함께 활용된다.

유의사항으로는 v$statement의 컬럼 중 쿼리수행과 관련된 통계정보는 TIMED_STATISTICS 프로퍼티가 활성화(1)되어야만 갱신되므로 해당 프로퍼티의 활성화 여부를 반드시 확인하여야 한다는 것이다.
TIMED_STATISTICS 기본값은 비활성화(0)이다.

참고로 이중화를 수행으로 인한 트랜잭션도 v$transaction, v$lock, v$lock_wait를 활용하나 세션번호, 쿼리번호가 없는 이중화 트랜잭션 특성상 이중화 섹션에서 별도로 언급하는 것으로 한다.

 

주요 메타테이블


  • SYS_USERS_
    데이터베이스 사용자의 정보가 저장된 메타테이블로 사용자이름(USER_NAME)과 같은 정보를 확인할 수 있어 가장 기본적으로 활용된다.

 

  • SYS_TABLES_
    테이블(큐테이블 포함)뿐만 아니라 시퀀스, 뷰의 정보도 함께 저장한 메타테이블로 해당 객체 이름(TABLE_NAME)과 같은 정보를 확인할 수 있어 SYS_USERS_와 함께 기본적으로 활용된다.

 

주요 성능 뷰


  • v$session
    현재 접속되어 있는 사용자의 세션 정보를 나타내는 성능 뷰이다.
  • v$statement, v$sqltext, v$plantext
    v$statement는 세션과 관련된 쿼리의 정보 및 쿼리 레벨의 통계정보를 나타내는 성능 뷰로 쿼리의 수행시간 및 수행빈도 측정이 가능하다. 세션 별로 가장 마지막에 direct 수행(execution)한 하나의 쿼리와 prepare 된 다수의 쿼리에 한하여서만 유지되는 뷰로 관련 세션을 종료되면 사라지게 된다. 이 뷰를 통하여 쿼리의 텍스트도 최대 16K까지 확인할 수 있다.
    쿼리의 텍스트가 16K를 초과하는 경우는 쿼리 텍스트 전체를 나타내는 성능 뷰인 v$sqltext를 활용하며 쿼리에 대응하는 실행계획을 확인하려 할 때는 v$plantext를 활용한다.
    앞서 언급했듯 v$statement의 컬럼 중 쿼리 수행과 관련된 통계정보는 TIMED_STATISTICS 프로퍼티가 활성화(1)되어야만 제공되므로 해당 프로퍼티의 활성화 여부를 반드시 확인하여야 한다. TIMED_STATISTICS 기본값은 비활성화(0)이다.
  • v$service_thread
    서비스쓰레드의 상태를 나타내는 성능 뷰로 v$session, v$statement와 조인하여 관련 세션과 쿼리를 확인할 수 있다. 뷰 자체만으로도 의미가 있어 단독으로 모니터링 하기도 한다.
  • v$transaction, v$memgc
    v$transaction은 현재 수행되는 모든 트랜잭션의 정보를 나타내는 성능 뷰로 Lock 관련 모니터링 시 기본적으로 사용된다. 또한, 메모리 DB GC의 정보를 나타내는 성능 뷰인 v$memgc를 통하여 세션, 구문과 연계된 MVCC 상태를 확인할 수도 있다.
  • v$lock, v$lock_wait
    v$lock은 트랜잭션 수행 중 발생한 lock에 대한 모든 정보를 나타내는 성능 뷰로 lock의 선후관계를 나타내는 v$lock_wait과 함께 활용한다.
  • v$lock_statement
    현재 Lock을 획득한 트랜잭션에서 가장 마지막에 수행된 구문을 나타내는 성능 뷰로 Lock 발생시 관련 세션 및 구문에 대한 신속한 확인을 위해 주로 활용된다.

 

테이블스페이스, 테이블, 컬럼, 인덱스, 제약조건 관련 주요 메타테이블 및 성능 뷰


Altibase Hybrid DBMS 특성상 테이블스페이스, 테이블에 대한 정보를 메모리 또는 디스크에 따라 별도(TBS, TABLE 박스 참조)로 확인이 가능하게끔 되어있으며 세그먼트의 경우는 v$segment와 관계(보라색)된 각각의 성능 뷰를 통해 상세한 자원 사용 현황을 확인할 수 있다.

하지만, 인덱스의 경우 현재로써 메모리 인덱스 크기 측정을 위한 메타테이블이나 성능 뷰가 제공되지 않는 관계로 테이블 전체 레코드 수에 하나의 레코드에 대한 메모리 인덱스 크기인 16byte를 곱하는 것으로 대체하여야 한다.
디스크 인덱스는 v$index를 참조, 해당 세그먼트를 통하여 실시간 크기 측정이 가능하다.


테이블스페이스, 테이블, 컬럼, 인덱스, 제약조건 관련 조인쿼리 시 참고할 주요 키 컬럼만 표기한 메타테이블 및 성능 뷰의 관계는 아래와 같다.

특이사항으로는 주요 메타테이블인 SYS_TABLE_과 다른 메타테이블 간의 조인 시는 조인컬럼으로 TABLE_ID를 사용하고 성능뷰와의 조인 시는 대체 키인 TABLE_OID 컬럼(파란색)을 사용한다는 것이다.

참고로 표기는 되지 않았지만 SYS_USERS_, SYS_TABLES_을 제외한 모든 메타테이블은 쿼리 편의를 고려하여 USER_ID와 TABLE_ID 컬럼이 모두 존재한다. 성능 뷰 v$segment와 v$index 역시 테이블별 합산을 고려하여 TABLE_OID 컬럼이 존재한다.

 

주요 메타데이블


  • SYS_COLUMNS_
    모든 테이블의 컬럼 정보가 저장된 메타테이블로 컬럼 이름(COLUMN_NAME)은 물론 데이터 타입(DATA_TYPE), 컬럼 순서(COLUMN_ORDER)와 같은 상세한 정보를 확인할 수 있다.
  • SYS_CONSTRAINTS_
    테이블의 제약조건 정보를 저장한 메타테이블로 제약조건유형(CONSTRAINT_TYPE)을 확인할 수 있으며 PK, FK, UK와 같은 인덱스 생성을 해야 하는 제약조건의 경우 관련 인덱스 번호(INDEX_ID)를 확인할 수 있다. 또한, FK의 경우 참조테이블(REFERENCED_TABLE_ID)도 확인할 수 있다.
  • SYS_CONSTRAINT_COLUMNS
    제약조건의 대상이 되는 컬럼의 컬럼 번호(COLUMN_ID)를 확인할 수 있는 메타테이블로 관련 제약조건번호(CONSTRAINT_ID)와 함께 대응되어 있다.
  • SYS_INDICES_
    모든 인덱스 정보가 저장된 메타테이블로 인덱스 이름(INDEX_NAME)은 물론 테이블스페이스번호(TBS_ID), 인덱스유형(INDEX_TYPE), 구성컬럼개수(COLUMN_CNT)와 같은 상세한 정보를 확인할 수 있다.

 

주요 성능 뷰


  • v$tablespaces
    모든 테이블스페이스 정보를 나타내는 성능 뷰로 테이블스페이스 관련 모니터링 시 기본적으로 활용된다.
  • v$mem_tablespaces
    메모리 테이블스페이스에 대해서만 상세한 정보를 나타내는 성능 뷰로 메모리 DB 운영을 위해 실제로 사용하는 물리적 메모리 크기를 구할 수 있다.
  • v$datafiles
    디스크 테이블스페이스를 구성하는 데이터 파일의 상세정보를 나타내는 성능 뷰로 물리적인 데이터 파일의 경로, 상태 및 크기를 확인 수 있다.
  • v$segment
    디스크 테이블의 세그먼트 정보를 나타내는 성능 뷰로 디스크 테이블, 디스크 인덱스, 언두 테이블스페이스, 임시 테이블스페이스와 같은 디스크 DB 관련 객체의 정확한 크기를 구할 수 있다.
  • v$memtbl_info
    메모리 테이블에 대해서만 상세한 정보를 나타내는 성능 뷰로 메모리 테이블 별 순수 데이터의 크기 및 합계를 구할 수 있다.
  • v$disktbl_info
    디스크 테이블에 대해서만 상세한 정보를 나타내는 성능 뷰로 해당 세그먼트(SEG_PID)를 알 수 있어 디스크 테이블 별 순수 데이터의 크기 및 합계를 구할 수 있다.
  • v$index
    모든 인덱스에 대한 간략한 정보를 나타내는 성능 뷰로 디스크 인덱스의 경우 해당 세그먼트(INDEX_SEG_PID)를 알 수 있어 디스크 인덱스의 크기를 구할 수 있다.

 

통계정보 관련 주요 성능 뷰


성능뷰를 통하여 DBMS 레벨, 세션 레벨, 쿼리 레벨에서의 대기이벤트(wait event)와 연산(operation)에 대한 통계정보, DBMS 레벨의 디스크 테이블스페이스 데이터 파일 I/O, 메모리 사용량 버퍼 풀 통계정보와 같은 다양한 통계정보를 확인할 수 있다.

레벨에 따라 통계정보를 생성하는 기준은 차이가 있다.

  • DBMS 레벨의 통계정보
    Altibase 구동 이후부터 정보를 누적하며 Altibase가 셧다운 되면 초기화된다. 따라서, 특정 기간의 값을 알기 위해서는 (현재의 값 - 측정 시작 시점의 값)을 모든 칼럼 값에 대해 계산해야 한다.

  •  세션 레벨 통계정보
    관련 세션이 접속되어 있는 동안 유지된다. 

  • 쿼리 레벨의 통계정보
    세션 별로 가장 마지막에 direct 수행(execution)한 하나의 쿼리와 prepare 된 다수의 쿼리에 한하여서만 유지되며 관련 세션이 종료되면 이 역시 사라지게 된다. 쿼리 레벨의 통계정보는 쿼리섹션에서 이미 언급한 v$statement을 통하여 제공되는 것으로 본 섹션에서는 생략한다.

유의할 사항으로는 통계정보는 TIMED_STATISTICS 프로퍼티가 활성화(1)되어야만 가능하므로 해당 프로퍼티의 활성화 여부를 반드시 확인하여야 한다는 것이다. TIMED_STATISTICS 기본값은 비활성화(0)이다.

TIMED_STATISTICS 프로퍼티는 Altibase v5 부터 제공한다. 이 프로퍼티의 활성화 여부는 아래 문장으로 확인할 수 있다.

SELECT NAME, VALUE1 FROM V$PROPERTY WHERE NAME = 'TIMED_STATISTICS';

 

통계정보 관련 성능 뷰는 대부분 뷰 자체만으로도 모니터링이 가능하므로 조인이 불필요하나 대기이벤트, 연산, 디스크 테이블스페이스의 데이터 파일 I/O에 대한 통계정보의 경우 특정 세션 또는 특정 데이터 파일에 연관을 지어확인할 필요가 있다. 관련 정보를 얻기 위해 조인쿼리 시 참고할 주요 키 컬럼만 표기한 메타테이블 및 성능 뷰의 관계는 아래와 같다.

 

대기이벤트 관련 성능 뷰


대기이벤트란 '세션' 또는 'Altibase 쓰레드'들의 일련의 대기 작업을 의미한다. 예를 들면, 서비스쓰레드라는 쓰레드가 디스크 버퍼에 적재된 페이지에 접근하기 위해 페이지의 래치 획득을 기다리는 작업, 로그 기록을 위해 로그 버퍼의 래치 획득을 기다리는 작업등이 있다.

참고로 Altibase는 대기이벤트를 그룹화하기 위해 상위 개념인 대기이벤트 클래스(wait event class)를 사용하여 8가지로 분류하고 있다.

  • v$system_wait_class
    '세션' 또는 'Altibase 쓰레드'의 대기이벤트에 대한 통계정보를 '대기이벤트 클래스' 별로 나타낸다. Altibase 구동 이후부터 누적되는 통계정보로 종료 시 초기화된다.

  • v$system_event
    '세션' 또는 'Altibase 쓰레드'의 대기이벤트에 대한 통계정보를 '대기이벤트' 별로 나타낸다. Altibase 구동 이후부터 누적되는 통계정보로 종료 시 초기화된다.

  • v$session_event
    '세션'의 대기이벤트에 대한서만 통계정보를 나타낸다. 세션이 종료되면 관련 통계정보는 사라진다.
  • v$session_wait
    '세션' 중 조회 시점에 '활성화된 세션'의 대기이벤트에 대해서만 통계정보를 나타낸다. 세션이 유휴상태(idle)가 되거나 종료되면 관련 통계정보는 사라진다.

 

연산 관련 성능 뷰


연산이란 '세션'또는 'Altibase 쓰레드'가 수행하는 각종 연산 작업을 의미한다. 예를 들면, 특정 세션의 쿼리 수행, 서비스쓰레드의 리두로그 쓰기 등이 있다.

  • v$sysstat
    '세션'또는 'Altibase 쓰레드'의 연산에 대한 통계정보를 '연산' 별로 나타낸다. Altibase 구동 이후부터 누적되는 통계정보로 종료 시 초기화된다.

  • v$sesstat
    '세션'의 연산에 대해서만 통계정보를 나타낸다. 세션이 종료되면 관련 통계정보는 사라진다.

 

데이터 파일 I/O


  • v$filestat
    디스크 테이블스페이스의 데이터 파일별 I/O 통계정보를 나타낸다.

 

기타 주요 성능 뷰


그 외 주요 통계정보를 제공하는 성능 뷰는 아래와 같다. 성능 뷰 자체가 의미 있는 통계정보를 제공하므로 다른 성능 뷰와 조인할 필요가 없다.

  • v$memstat
    Altibase가 현재 사용하는 메모리의 사용량을 모듈별로 나타내는 성능 뷰로 Altibase 프로세스의 메모리 사용량이 비정상적일 때 주요 참고 지표가 된다.
    모듈의 최고 메모리 사용량을 의미하는 MAX_TOTAL_SIZE 컬럼은 Altibase 구동 시점부터 유지하는 것으로 Altibase 셧다운 시 초기화된다.
  • v$buffpool_stat
    쿼리 수행 시 디스크에서 페이지를 읽지 않고 버퍼 풀의 기존 페이지를 재사용한 비율을 의미하는 'hit ratio'와 같은 버퍼 풀 관련 통계정보를 실시간으로 나타낸다.
  • 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$repgap
    최신 리두로그 일련번호와 sender가 전송한 리두로그 일련번호의 간격(gap)을 나타내는 성능뷰로 이중화 대상 서버 간 동기화 정도를 의미하므로 이중화 모니터링 시 필수적으로 활용된다. sender에 의해 측정되므로 sender가 구동되어 있지 않으면 이 역시 조회되지 않는다.
  • v$repreceiver
    이중화 수신 스레드인 receiver의 상태를 나타내는 성능 뷰로 receiver가 구동되어 있지 않으면 조회되지 않는다.
  • v$repsender_transtbl
    sender가 수행 중인 이중화 트랜잭션에 대한 정보를 나타내는 성능 뷰로 해당 트랜잭션과 대응되는 상대편 서버의 트랜잭션을 알 수 있다. 이 역시 sender가 구동되어 있지 않으면 조회되지 않는다.
  • v$repreceiver_transtbl
    receiver가 수행 중인 이중화 트랜잭션에 대한 정보를 나타내는 성능 뷰로 해당 트랜잭션과 대응되는 상대편 서버의 트랜잭션을 알 수 있다. 이중화 트랜잭션의 Lock으로 인해 로컬 트랜잭션이 대기하는 현상이 발생할 때 주요 참고지표가 된다. 이 역시 receiver가 구동되어 있지 않으면 조회되지 않는다.

 

사용자의 테이블스페이스 접근 권한 여부, 시스템/객체 권한, PSM, 뷰 관련 주요 메타테이블 및 성능 뷰


실시간 모니터링이 필요하진 않으나 운영업무 중 자주 확인되는 요소로 '사용자의 테이블스페이스 접근 가능 여부', '시스템/객체 권한', '스키마객체'를 들 수 있다. 스키마 객체의 경우는 PSM(프로시져/펑션/타입세트), 뷰가 대표적이다.

관련 정보를 얻기 위해 조인쿼리 시 참고할 주요 키 컬럼만 표기한 메타테이블 및 성능 뷰의 관계는 아래와 같다.

참고로 SYS_GRANT_OBJECT_에서 객체번호인 OBJ_ID 컬럼(녹색)에 대응하는 다른 객체의 컬럼 이름은 객체에 따라 서로 달라지므로 주의가 필요하다. 여기서는 TABLE_ID(붉은색), VIEW_ID(붉은색), PROC_OID(보라색) 컬럼을 예로 들 수 있다.

또한, 대부분의 데이터베이스 객체는 그에 대응하는 별도의 메타테이블을 가지나 뷰의 경우는 테이블과 함께 관리되므로 뷰의 이름과 같은 구체적인 정보는 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) 


세션의 상태를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다. 특정 세션에 관한 정보만 모니터링 하려면 WHERE절에 v$session의 'id' 컬럼을 추가하여 사용한다.

 

[SS01] 전체 세션 개수[맨 위로]

  • Altibase에 접속되어 있는 세션 수를 보여준다. 

    알티베이스 4 이상
    SELECT COUNT(*) TOTAL_SESSION_CNT FROM V$SESSION ;

[SS02] 세션 정보[맨 위로]

  • 세션의 클라이언트 정보 및 로그인 시각 등 세션 관련 정보를 볼 수 있다. 
  • 아래 쿼리는 Altibase v5 부터 사용할 수 있으나 CLIENT_APP_INFO 컬럼을 삭제하거나 주석 처리하면 Altibase v4에서도 사용할 수 있다.  

    Altibase v5 버전 이상
    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 ;
  • 주요 컬럼 설명 

    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세션에서 가장 마지막으로 수행하였거나 현재 수행 중인 쿼리. 

 

[SS03] SYSDBA 권한으로 접속 중인 세션 정보[맨 위로]

  • SYSDBA 권한으로 접속한 세션의 정보를 볼 수 있다. 
  • 아래 쿼리는 Altibase v5 부터 사용할 수 있으나 CLIENT_APP_INFO 컬럼을 삭제하거나 주석 처리하면 Altibase v4에서도 사용할 수 있다.  

  • SELECT 절에 사용된 컬럼은 [SS02] 세션 정보와 같으니 해당 쿼리의 컬럼 설명을 참고한다.

    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) 


쿼리의 상태를 확인하기 위한 각 모니터링 쿼리를 설명한다.

쿼리 수행과 관련된 상세한 시간 정보를 확인하기 위해서 기본적으로 TIMED_STATISTICS가 활성화(1)되어 있어야 한다.
특정 세션에 관한 정보만 모니터링 하려면 WHERE 절에 v$statement의 'session_id' 컬럼을 추가하여 사용한다.

 

TIMED_STATISTICS 활성화 방법

  • TIMED_STATISTICS는 Altibase v5부터 지원하는 Altibase 프로퍼티이다. 
  • TIMED_STATISTICS를 활성화하면 활성화 이후에 수행된 쿼리들의 시간 정보를 알 수 있다.  

    ALTER SYSTEM SET TIMED_STATISTICS=1;

[ST01] 전체 쿼리 개수[맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.  

    SELECT COUNT(*) AS TOTAL_STMT_CNT FROM V$STATEMENT ;

[ST02] 쿼리 정보[맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.  

    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_TIMEprepare(parse, validation, optimization)를 수행하는데 소요된 시간으로 단위는 초다. 쿼리가 수행될 때마다 갱신된다. TIMED_STATISTICS를 활성화해야 볼 수 있다. Altibase v4에서는 TIMED_STATISTICS를 제공하지 않으므로 이 값은 무의미하다.
    FETCH_TIMEprepare 완료 후 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] 현재 수행 중인 쿼리 개수[맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.  

    SELECT COUNT(*) AS ACTIVE_STMT_CNT
      FROM V$STATEMENT
     WHERE EXECUTE_FLAG = 1 ;

[ST04] 현재 수행 중인 쿼리 정보[맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.  
  • 컬럼 설명은 [ST02] 의 '주요 컬럼 설명' 부분을 참고하자. 

    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] 장시간으로 수행 쿼리 정보 [맨 위로]

  • 600초 이상 수행 중인 쿼리 정보를 보여준다.  
  • Altibase v4 이상 버전에서 사용할 수 있다.  
  • 컬럼 설명은 [ST02] 의 '주요 컬럼 설명' 부분을 참고하자. 

    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트랜잭션의 마지막 쿼리 정보 [맨 위로]

  • 3600초 이상, 장시간 수행 중인 트랜잭션의 마지막 쿼리 정보를 보여준다. 

  • Altibase v4 이상 버전에서 사용할 수 있다. 단 SELECT 절에서 SS.CLIENT_APP_INFO 컬럼은 주석 처리하거나 삭제해야 한다. SS.CLIENT_APP_INFO 는 Altibase v5 부터 제공하는 컬럼이다. 

    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] 풀 스캔 쿼리 정보[맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.  단, SELECT 절에서 SS.CLIENT_APP_INFO 컬럼은 주석처리하거나 삭제해야 한다. SS.CLIENT_APP_INFO 는 Altibase v5 버전부터 제공하는 컬럼이다. 

  • 컬럼에 대한 설명은 [ST02] 의 '주요 컬럼 설명' 부분을 참고하자. 

    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] 풀 스캔 쿼리 수행 횟수 통계 [맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.  

    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] 세션 별 쿼리 목록[맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.   

    SELECT SESSION_ID
         , ID STMT_ID
         , TX_ID
         , SUBSTR(QUERY, 1, 100) QUERY
      FROM V$STATEMENT
     ORDER BY 1, 2 ;

[ST10] 세션 당 statement 생성 수 [맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있는 쿼리이다. 

    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) 


서비스 쓰레드와 관련된 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.

  

[SV01] 서비스 쓰레드 상태    [맨 위로]

  • Altibase v5 이상

    SELECT RUN_MODE
         , STATE
         , COUNT(*) CNT
      FROM V$SERVICE_THREAD
     GROUP BY RUN_MODE, STATE ;
  • Altibase v4

    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] 서비스 쓰레드 경합 확인    [맨 위로]

  • Altibase v4 이상에서 사용할 수 있는 쿼리이다.

    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_COUNTStatement를 처리하기 위해 서비스 쓰레드에 처리를 요청한 횟수
    PERmiss_count/try_count*100

트랜잭션 및 Lock(Transaction & Lock) 


트랜잭션 및 Lock 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.

 

[TL01] Transaction 및 lock 정보 [맨 위로]

  • Altibase v5 이상 버전에서 사용할 수 있다.  

    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_IDlock 획득 대기를 유발한 트랜잭션의 아이디로 없는 경우는 공백이다.
    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_NAMElock 획득 대상 테이블로 '사용자이름.테이블이름' 형식으로 나타낸다.
    CURRENT_QUERY트랜잭션에서 가장 마지막으로 수행하였거나 현재 수행 중인 쿼리. 이중화 트랜잭션의 경우 상대편 서버의 ip 주소와 트랜잭션 아이디를 나타낸다.
    DDL트랜잭션의 DDL 여부. / DDL(0) non-DDL(1)
    LOGFILE#트랜잭션과 관련된 리두로그 파일 번호. SELECT만 수행하는 트랜잭션은 '-' 이다.

리두 로그파일(Redo Logfile) 


Redo Logfile 정보를 확인하기 위한 각 모니터링 요소에 대응하는 쿼리는 아래와 같다.

 

[LO01] 리두로그 파일 정보[맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.  

    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 대기 누적횟수[맨 위로]

  • Altibase v4 이상 버전에서 사용할 수 있다.  

    SELECT LF_PREPARE_WAIT_COUNT FROM V$LFG ;
  • 주요 컬럼 설명

    LF_PREPARE_WAIT_COUNT현재 리두로그 파일에서 새로운 리두로그 파일로 스위칭하려 할 때, 다음 리두로그 파일이 아직 생성되지 않아 서비스 스레드가 기다린 횟수를 나타낸다. 이 값이 크다면 PREPARE_LOG_FILE_COUNT 프로퍼티의 값을 더 큰 값으로 변경 후 적용(재구동)하여 충분한 개수의 리두로그 파일을 미리 만들어지도록 한다. Altibase 구동 시점부터 누적 및 합산되는 형태로 Altibase 셧다운 시 초기화된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • No labels