Open Source RDBMS - Seamless, Scalable, Stable and Free

한국어 | Login |Register

Versions available for this page: CUBRID 8.2.1 |  CUBRID 8.3.0 |  CUBRID 8.3.1 |  CUBRID 8.4.0 |  CUBRID 8.4.1 |  CUBRID 8.4.3 |  CUBRID 9.0.0 | 



잠금(Lock) 상태 확인

설명

cubrid lockdb는 대상 데이터베이스에 대하여 현재 트랜잭션에서 사용되고 있는 잠금 정보를 확인하는 유틸리티이다.

구문

cubrid lockdb options database_name
options : [{-o|--output-file=} file ]

  • cubrid : CUBRID 서비스 및 데이터베이스 관리를 위한 통합 유틸리티이다.
  • lockdb : 대상 데이터베이스에 대하여 현재 트랜잭션에서 사용되고 있는 잠금 정보를 확인하는 명령이다.
  • options : -o 옵션을 지원한다.
  • database_name : 현재 트랜잭션의 잠금 정보를 확인하는 데이터베이스 이름이다.
옵션

잠금 정보를 화면에 출력

옵션없이 testdb 데이터베이스의 잠금 정보를 화면에 출력하는 구문이다.

cubrid lockdb testdb

잠금 정보를 지정한 파일에 출력(-o)

-o 옵션을 이용하여 testdb 데이터베이스의 잠금 정보를 output.txt로 출력하는 구문이다.

cubrid lockdb -o output.txt testdb

출력 내용

cubrid lockdb의 출력 내용은 논리적으로 3개의 섹션으로 나뉘어져 있다.

•   서버에 대한 잠금 설정

•   현재 데이터베이스에 접속한 클라이언트들

•   객체 잠금 테이블의 내용

서버에 대한 잠금 설정

cubrid lockdb 출력 내용의 첫 번째 섹션은 데이터베이스 서버에 대한 잠금 설정이다.

*** Lock Table Dump ***

 Lock Escalation at = 100000, Run Deadlock interval = 0

위에서 잠금 에스컬레이션 레벨은 100000레코드로, 교착 상태 탐지 간격은 0초로 설정되어 있다.

(관련 시스템 파라미터인 lock_escalationdeadlock_detection_interval에 대한 설명은 동시성/잠금 파라미터를 참고한다.)

현재 데이터베이스에 접속한 클라이언트들

cubrid lockdb 출력 내용의 두 번째 섹션은 데이터베이스에 연결된 모든 클라이언트의 정보를 포함한다. 이 정보에는 각각의 클라이언트에 대한 트랜잭션 인덱스, 프로그램 이름, 사용자 ID, 호스트 이름, 프로세스 ID, 고립 수준, 그리고 잠금 타임아웃 설정이 포함된다.

Transaction (index 1, csql, dba@cubriddb|12854)

Isolation READ COMMITTED CLASSES AND READ UNCOMMITTED INSTANCES

Timeout_period -1

위에서 트랜잭션 인덱스는 1이고, 프로그램 이름은 csql, 사용자 이름은 dba, 호스트 이름은 cubriddb, 클라이언트 프로세스 식별자는 12854, 고립 수준은 READ COMMITTED CLASSES AND READ UNCOMMITTED INSTANCES, 그리고 잠금 타임아웃은 무제한이다.

트랜잭션 인덱스가 0인 클라이언트는 내부적인 시스템 트랜잭션이다. 이것은 데이터베이스의 체크포인트 수행과 같이 특정한 시간에 잠금을 획득할 수 있지만 대부분의 경우 이 트랜잭션은 어떤 잠금도 획득하지 않을 것이다.

cubrid lockdb 유틸리티는 잠금 정보를 가져오기 위해 데이터베이스에 접속하기 때문에 cubrid lockdb 자체가 하나의 클라이언트 이고 따라서 클라이언트의 하나로 출력된다.

객체 잠금 테이블

cubrid lockdb 출력 내용의 세 번째 섹션은 객체 잠금 테이블의 내용을 포함한다. 이것은 어떤 객체에 대해서 어떤 클라이언트가 어떤 모드로 잠금을 가지고 있는지, 어떤 객체에 대해서 어떤 클라이언트가 어떤 모드로 기다리고 있는지를 보여준다. 객체 잠금 테이블 결과물의 첫 부분에는 얼마나 많은 객체가 잠금되었는지가 출력된다.

Object lock Table:

    Current number of ojbects which are locked = 2001

cubrid lockdb는 잠금을 획득한 각각의 객체에 대한 객체의 OID와 Object type, 테이블 이름을 출력한다. 추가적으로 객체에 대해서 잠금을 보유하고 있는 트랜잭션의 개수(Num holders), 잠금을 보유하고 있지만 상위 잠금으로 변환(예를 들어 U_LOCK에서 X_LOCK으로 잠금 변환)하지 못해 차단된 트랜잭션의 개수(Num blocked-holders), 객체의 잠금을 기다리는 다른 트랜잭션의 개수(Num waiters)가 출력된다. 그리고 잠금을 보유하고 있는 클라이언트 트랜잭션, 차단된 클라이언트 트랜잭션, 기다리는 클라이언트 트랜잭션의 리스트가 출력된다.

다음 예제는 Object type이 instance of class, 즉 레코드인 경우, OID( 2| 50| 1)인 객체에 대해서 트랜잭션 2가 S_LOCK을 가지고 있고, 트랜잭션 1이 U_LOCK을 획득하고 있지만 트랜잭션 2가 S_LOCK을 획득하고 있기 때문에 X_LOCK으로 변환하지 못해 차단되었음을 보여준다. 그리고 트랜잭션 3은 S_LOCK을 대기하고 있지만 트랜잭션 2가 X_LOCK을 대기하고 있기 때문에 차단되었음을 보여준다.

OID = 2| 50| 1

Object type: instance of class ( 0| 62| 5) = athlete

Num holders = 1, Num blocked-holders= 1, Num waiters = 1

LOCK HOLDERS :

    Tran_index = 2, Granted_mode = S_LOCK, Count = 1

BLOCKED LOCK HOLDERS :

    Tran_index = 1, Granted_mode = U_LOCK, Count = 3

    Blocked_mode = X_LOCK

                    Start_waiting_at = Fri May 3 14:44:31 2002

                    Wait_for _nsecs = -1

LOCK WAITERS :

    Tran_index = 3, Blocked_mode = S_LOCK

                    Start_waiting_at = Fri May 3 14:45:14 2002

                    Wait_for_nsecs = -1

Object type이 Index key of class, 즉 인덱스 키인 경우 테이블의 인덱스에 대한 잠금 정보를 출력한다.

OID = -662|   572|-32512

Object type: Index key of class ( 0|   319|  10) = athlete.

Index name: pk_athlete_code

Total mode of holders =   NX_LOCK, Total mode of waiters = NULL_LOCK.

Num holders=  1, Num blocked-holders=  0, Num waiters=  0

LOCK HOLDERS:

    Tran_index =   1, Granted_mode =  NX_LOCK, Count =   1

Granted_mode는 현재 획득한 잠금의 모드를 의미하고 Blocked_mode는 차된된 잠금의 모드를 의미한다. Starting_waiting_at은 잠금을 요청한 시간을 의미하고 Wait_for_nsecs는 잠금을 기다리는 시간을 의미한다. Wait_for_nsecs의 값은 lock_timeout_in_secs 시스템 파라미터에 의해 설정된다.

Object type이 Class, 즉 테이블인 경우 Nsubgranules가 출력되는데 이것은 해당 테이블 내의 특정 트랜잭션이 획득하고 있는 레코드 잠금과 키 잠금을 합한 개수이다.

OID = 0| 62| 5

Object type: Class = athlete

Num holders = 2, Num blocked-holders= 0, Num waiters= 0

LOCK HOLDERS:

Tran_index = 3, Granted_mode = IS_LOCK, Count = 2, Nsubgranules = 0

Tran_index = 1, Granted_mode = IX_LOCK, Count = 3, Nsubgranules = 1

Tran_index = 2, Granted_mode = IS_LOCK, Count = 2, Nsubgranules = 1