2장._트랜잭션과_Lock

조회 수 4606 추천 수 0 2012.03.16 15:25:48
AskZZang *.33.233.130


02 트랜잭션과 Lock

 

01  트랜잭션 동시성 제어

02  트랜잭션 수준 읽기 일관성

03  비관적 vs. 낙관적 동시성 제어

04  동시성 구현 사례

05 오라클 Lock

 

 

읽기 일관성 구현 방법

-      DB2, SQL Server, Sybase : Lock을 통해 읽기 일관성을 구현

-      오라클 : Undo 데이터를 이용해 읽기 일관성을 구현

 

오라클은 데이터를 읽을 때 Lock을 사용하지 않다 보니 확실히 동시성 측면에서는 다른 DBMS보다 우월하다고 평가할 수 있다.

 

오라클은 10g부터 Wait Event를 아래와 같이 분류해 놓았다.

 

SQL> select

wait_class, count(*)

from v$event_name

group by wait_class

order by 1;

 

WAIT_CLASS                                                       COUNT(*) 

---------------------------------------------------------------- ---------

Administrative                                                          46

Application                                                             12

Cluster                                                                 48

Commit                                                                   1

Concurrency                                                             25

Configuration                                                           23

Idle                                                                    63

Network                                                                 27

Other                                                                  601

Scheduler                                                                2

System I/O                                                              24

User I/O                                                                17

 

12 rows selected.

 

주목할 것은 오라클에서 발생하는 Lock 경합의 대부분을 차지하는 enq: TM - contention 이벤트와

enq: TX – row lock contention 이벤트가 Concurrency가 아닌 Application으로 분류돼 있다는 사실이다.

 

 

SQL> select event#,

       name,

       wait_class

from   v$event_name

where  name in (

               'enq: TM - contention',

               'enq: TX - row lock contention'

               );

 

EVENT#    NAME                                 WAIT_CLASS                                                      

--------- ----------------------------------- --------------------------------------------------

      178 enq: TM - contention                 Application                                                    

      186 enq: TX - row lock contention        Application                                                    

 

2 rows selected.

 

 

테이블 Lock과 로우 Lock 관련 이벤트를 프로그램 오류와 같이 분류한 것인 이들 문제가 DBA 이슈가 아니라 개발자 이슈임을 분명히 밝히고 있는 것이다.

 

Lock에 대한 근본적인 해법은 애플리케이션 로직에서 찾아야 한다.