민서네집

[MySQL] Transaction Isolation Level 변경시키기. 본문

Database/MySQL

[MySQL] Transaction Isolation Level 변경시키기.

브라이언7 2013. 6. 27. 14:22

[참고] http://gywn.net/2012/05/mysql-transaction-isolation-level/


웹어플리케이션에서 MySQL DB를 사용하는데, 트랜잭션을 사용하기 위해서 


my.ini 파일에서


[mysqld]


autocommit=0


이렇게 설정했다. 그리고 웹어플리케이션을 실행시키고, DB 접속하는 프로그램(나는  HeidiSQL을 사용한다.)을 띄워서 조회를 해봤는데, 웹어플리케이션에서 변경한 사항이 조회되지 않았다.


이것은 MySQL의 Default Transaction Isolation Level 이 REPEATABLE-READ 로 되어 있어서 발생하는 현상이다.

현재 트랜잭션이 커밋되지 않은 상태에서는 다른 트랜잭션과 관계없이 반복적인 읽기 시에 동일한 결과를 보장하는 ISOLATION LEVEL 이다.

이런 경우 COMMIT; 명령을 한번 수행하고 , 조회를 해보면 웹어플리케이션에서 변경한 내용을 조회할 수 있다.

아니면 DB 접속 프로그램에서 AUTOCOMMIT = TRUE; 명령을 준 상태에서 조회해도 된다.


DB 접속 프로그램에서 웹어플리케이션의 변경 내용을 바로 조회할 수 있으려면 MySQL의 TRANSACTION ISOLATION LEVEL 을 READ-COMMITTED 이나 READ-UNCOMMITTED 상태로 바꿔야 한다.


DB 접속 프로그램에서

set autocommit = FALSE;
set tx_isolation = 'READ-COMMITTED';

COMMIT; (반드시 한번 COMMIT 해줘야지 반영된다.)

위와 같이 하면, 웹어플리케이션의 변경 내용을 바로바로 조회할 수 있다.




my.ini 파일에서 

( Windows 7 OS 에서는 C:\ProgramData\MySQL\MySQL Server 5.6\my.ini )


[mysqld]


autocommit=0


transaction-isolation = READ-COMMITTED


이렇게 해주고, MySQL DB를 재시작 하고, DB 접속 프로그램에서


SELECT @@tx_isolation; 명령을 주면

READ-COMMITTED 
라고 결과가 나온다.



Oracle DB 에서는 Default Transaction Isolation Level 이 뭘로 되어 있을까?


READ COMMITTED . The READ COMMITTED isolation level states that a transaction may read only data that has been committed in the database. There are no dirty reads (reads of uncommitted data). There may be nonrepeatable reads (that is, rereads of the same row may return a different answer in the same transaction) and phantom reads (that is, newly inserted and committed rows become visible to a query that weren't visible earlier in the trans-action).READ COMMITTED is perhaps the most commonly used isolation level in database applications everywhere, and it's the default mode for Oracle Database. It's rare to see a different isolation level used in Oracle databases.


[원문] http://www.oracle.com/technetwork/issue-archive/2005/05-nov/o65asktom-082389.html



Comments