DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

동시성 제어

DBMS 2
DB2 가이드
DB2 사용자 가이드
동시성 제어
작성자
admin
작성일
2021-02-19 14:47
조회
1053

동시성 제어

동시성과 무결성

①여러 사용자가 동시에 데이터베이스를 액세스할 때에는 다음과 같은 데이터베이스의 무결성을 위반하는 바람직하지 않은 현상이 발생될 수 있습니다

db2

②A와 B라는 사용자가 동일한 데이터를 액세스한다면, 다음과 같은 현상이 발생할 수 있습니다.

db2


분리 수준

①분리 수준은 다음과 같이 4 가지로 구분됩니다.

db2

②분리 수준의 유형별 의미는 다음과 같습니다.

db2


분리 수준 지정 방법

①분리 수준>을 지정할 때는 RR, RS, CS, UR 이라는 키워드를 이용합니다. 대소문자는 구별하 지 않습니다.

②분리 수준의 유형을 지정하는 방법은 다음과 같습니다.

db2

③다양한 환경에서 분리 수준을 UR로 설정하는 예는 다음과 같습니다.

db2


잠금의 대상

①잠금이 적용되는 데이터베이스 오브젝트는 다음과 같습니다.

db2

②잠금을 적용하는 방법은 다음과 같습니다.

db2


테이블 잠금의 유형

①테이블 잠금 유형과 잠금 유형간의 호환표은 다음과 같습니다.

db2

②테이블 잠금 유형의 특성은 다음과 같습니다.

db2


테이블 잠금 지정 방법

①데이터의 기본 잠금 수준은 행 잠금입니다. 기본 잠금 수준을 테이블 잠금으로 지정하면, SQL문 을 실행할 때 항상 테이블 잠금이 적용됩니다.

db2

②alter table 문에서 LOCKSIZE 옵션을 이용하여 지정합니다.


$ db2 "alter table 테이블명> LOCKSIZE TABLE"
$ db2 "alter table 테이블명> LOCKSIZE ROW"

db2

③lock table 문에서 LOCKSIZE 옵션을 이용하여 지정합니다.


$ db2 "lock table 테이블명> in SHARE mode"
$ db2 "lock table 테이블명> in EXCLUSIVE mode"

db2


행 잠금 유형

①행 잠금 유형과 잠금 유형간의 호환표은 다음과 같습니다.

db2

②행 잠금 유형의 특성은 다음과 같습니다.

db2


잠금 변환 현상

①테이블 잠금과 행 잠금의 단계는 다음과 같습니다. 하위 잠금이 적용된 상태에서 상위 잠금이 요 청되면, 하위 잠금 정보는 상위 잠금 정보로 갱신됩니다.

db2

②SELECT문의 조건문에서 고유한 인덱스가 있는 컬럼을 이용하여 데이터를 조회하면, 해당 행에 대해 NS 또는 S 모드의 잠금이 적용됩니다. 동일한 행에 대해 UPDATE 문을 다시 실행하면, X 잠금이 적용되고, LOCKLIST에 저장된 해당 행에 대한 NS 또는 S 모드의 잠금 정보는 X 모드 의 잠금으로 갱신됩니다.

db2


잠금 상승 현상

①update db cfg 명령어로 데이터베이스 구성 변수인 LOCKLIST 구성 변수를 이용하여 잠 금 정보를 저장하는 메모리 영역의 크기를 조절합니다. 크기>는 4K 페이지 단위로 지정합니다.


$ db2 update db cfg for 데이터베이스명> using LOCKLIST 크기>

②잠금 정보는 데이터베이스별로 공유 메모리에 있는 LOCKLIST 영역에 저장됩니다. 잠금 정보의 양이 LOCKLIST의 크기를 초과하게 되면, 가장 많은 행 잠금을 가진 테이블을 식별하여 그 테 이블에 대한 행 잠금을 모두 취소하고 테이블 잠금을 적용합니다.

db2

③MAXLOCKS 구성 변수는 LOCKLIST 구성 변수가 지정한 크기에서 한 응용프로그램이 사용 할 수 있는 최대 비율을 지정합니다. 비율>은 백분율로 표시합니다.


$ db2 update db cfg for 데이터베이스명> using MAXLOCKS 비율>

④한 응용프로그램에 대한 잠금 정보의 양이 MAXLOCKS의 비율을 초과하게 되면, 해당 응용프 로그램에서 가장 많은 행 잠금을 가진 테이블을 식별하여 그 테이블에 대한 행 잠금을 모두 취소 하고, 테이블 잠금을 적용합니다.

db2


잠금 대기 현상

①update db cfg 명령어로 LOCKTIMEOUT 데이터베이스 구성 변수를 설정합니다. 잠금 대기 시간>은 1초 단위로 표시합니다.


$ db2 update db cfg for 데이터베이스명> using LOCKTIMEOUT 잠금 대기 시간>

②LOCKTIMEOUT 데이터베이스 구성 변수의 기본값은 -1로서 무한대로 대기하는 것을 의미합 니다. 값을 0 으로 설정하면, SQL문 요청 시점에서 잠금을 획득하지 못하면 즉시 중단되게 합니 다. 일반적인 OLTP 환경에서는 잠금 대기 시간을 30초 이내로 설정하도록 합니다. 잠금 대기 시간 이내에 필요한 잠금을 획득하면, 응용프로그램은 작업을 계속할 수 있습니다.

db2

③LOCKTIMEOUT 구성 변수의 값을 초과할 때까지 필요한 잠금을 획득하지 못하면, 응용프로 그램은 중단되어 SQL0911N, SQLSTATE 40001과 이유 코드 68 이 반환됩니다.

db2


교착 상태

①update db cfg 명령어로 DLCHKTIME 데이터베이스 구성 변수를 설정합니다. 점검 간 격>은 밀리초(1000분의 1초) 단위로 표시합니다.


$ db2 update db cfg for 데이터베이스명> using DLCHKTIME 점검 간격>

②DLCHKTIME 구성 변수의 기본값은 10000 ms로 10초 간격으로 교착 상태가 점검됩니다.

db2

③교착 상태가 감지되면, 희생자(victim)로 선정된 한 쪽의 응용프로그램은 강제로 종료되고, SQL0911N, SQLSTATE 40001과 이유 코드 2가 반환됩니다.

db2