MONITORING LOCK CONTENTION - Table Lock, DDL Lock
MANUAL TABLE LOCK MODES (SYNTAX)
SQL> LOCK TABLE table_name IN mode_name MODE;
*SQL>LOCK TABLE employee IN exculsive MODE;
MODE : SHARE (S) LOCK
이 모드는 다른 TRANSACTION에게 오직 SELECT . . . FOR UPDATE 만 허용합니다. 당연히 테이블을 변환시키는 일련의 어떠한 행동도 막아버립니다.
MODE : SHARE ROW EXCLUSIVE (SRX) LOCK
DML 명령이나 수동으로 SHARE LOCK 을 획득하는 어떠한 행위도 막아버리는 높은 수준의 테이블 락 입니다. 맹목적으로 데이터의 무결성 참조를 위해 사용합니다.
MODE : EXCLUSIVE (X) LOCK
테이블에 대한 쿼리만 허용합니다. 어떠한 타입의 DML이나 수동 LOCK을 제한합니다.
TRANSACTION 1 TRANSACTION 2 LOCK TABLE department IN EXCLUSIVE MODE: Table(s) Locked; SELECT * FROM department FOR UPDATE; Transaction 2 wait.
DDL LOCK
EXCLUSIVE DDL LOCK은 DROP TABLE, ALTER TABLE 문에 필요합니다.
CREATE, ALTER, DROP 같은 DDL 문은 적용할 오브젝트에 대해 반드시 EXCLUSIVE LOCK 이 필요합니다. 어떠한 레벨의 락이 걸려있다면 ALTER TABLE 구문은 실행되지 않습니다.
|
TRANSACTION 1 |
TRANSACTION 2 |
|
UPDATE employee SET salary = salary*1.1 3120 rows updated. |
ALTER TABLE employee DISABLE PRIMARY KEY; ORA-00054 : Resource busy and acquire with NOWAIT specified |
SHARE DDL LOCK 은 CREATE PROCEDURE, AUDIT 문에 필요합니다.
GRANT, CREATE PACKAGE는 Shared DDL Lock을 필요로 합니다. 이러한 종류의 락은 비슷한 DDL 구문을 제한하지 않습니다. 허나 참조하고 있는 오브젝트를 Altering 하거나 Dropping 하는 행위는 제한합니다.
fin.
REF) Oracle9i Performance Tuning - Volume I
댓글 없음:
댓글 쓰기