SQLyog 테이블 데이터 refresh 관련

개발툴|2015. 11. 17. 16:12

[2017-09-11] 내용 업데이트


아래 해결 방안은 잘못된 것임을 이제서야 알게 됐다.

SQLyog의 버전 문제로 인한 현상이 아니라 트랜잭션 격리 설정에 의한 자연스러운 현상이다.


예를 들어 SQLyog을 실행시킨 상태에서 EMP 테이블을 조회했을 때 10건이 나온다.

이 상태에서 다른 애플리케이션(웹서비스) 에서 EMP 테이블에 insert 1건을 한다.

SQLyog 프로그램에서 EMP 테이블을 다시 조회하게 되면 10건만 나온다. 여기가 나의 오류 포인트다.

다른 애플리케이션에서 insert를 1건 하고 commit 했는데 왜 10건만 나오지? 라는 생각이 SQLyog이라는 툴의 설정 문제인 것으로 알았다.

허나 문제는 따로 있었던 것


MySQL은 트랜잭션 격리가 기본 REPEATABLE-READ로 되어 있다.

REPEATABLE-READ의 특성은 트랜잭션이 진행되는 동안 일관성 있는 데이터를 리턴한다.

즉, A라는 트랜잭션이 수행되는 동안 EMP 테이블을 조회해서 10건이 나왔다면 다른 트랜잭션에서 insert를 하더라도 10건만 출력된다. 이것이 일관성 있는 결과를 리턴한다는 의미이다. (반복 가능한 읽기)




[나의 경험 - 히스토리]

1. SQLyog 설치 후 기본 셋팅으로 잘 사용하고 있었음.
2. SQLyog은 기본적으로 autocommit TRUE로 되어 있기 때문에 테스트를 위해서 SET AUTOCOMMIT = FALSE; 옵션을 추가하였다.
3. 얼마간의 시간이 흐른 후 SQLyog을 이용해 DB에 접속. 다른 애플리케이션에서 데이터를 추가하거나 변경했을 때 SQLyog 내에서 쿼리하면 변경 이전의 결과 값이 리턴되는 것을 확인하였다.
4. SQLyog 프로그램의 설정에 문제가 있는 것으로 판단
cs


사건의 발단은 AUTOCOMMIT을 TRUE로 설정하면서 부터이다.

SQLyog에서 DB에 접속할 때 트랜잭션을 활성화 하게 됨으로써 REPEATABLE-READ로 인한 데이터 일관성이 동작했던 것이다.

꽤 오랜 시간이 지났지만 지금에와서 다시 이 문제를 바로 잡을 수 있어 다행이다.


SQLyog에서는 실시간으로 데이터가 변경되는 것을 확인해야 하니 다음과 같이 설정하도록 하자.

아래 추가 설정을 Init Command(s)에 넣어주면 된다.

SET AUTOCOMMIT = FALSE; SET @@SESSION.TX_ISOLATION = 'READ-COMMITTED'
cs



[참고]

1
2
3
4
5
6
SET @@SESSION.TX_ISOLATION = 'READ-COMMITTED'
SELECT @@SESSION.TX_ISOLATION;
SELECT @@AUTOCOMMIT;
 
SET AUTOCOMMIT = TRUE; // 1
SET AUTOCOMMIT = FALSE; // 0
cs


언제부터인가 SQLyog 프로그램을 띄운 상태에서 웹 애플리케이션에 의한 데이터 insert 작업이 완료되면 SQLyog 에서 쿼리를 날려도 새로 저장된 데이터가 출력이 되지 않는다.


SQLyog 프로그램 종료 후 재접속 하면 저장된 데이터를 조회할 수 있는데 아무래도 SQLyog 버전 업을 하면서 부터 뭔가의 설정이 바뀐 것 같다.


문제를 해결하기 위해서 설정을 뒤적이다보니 

메뉴의 Tools > Preferences 이동 한 후 Others 탭에 있는 아래 설정이 체크 해제되어 있는 것을 확인하였다.



이전버전에도 이런 설정이 있었는지는 모르겠지만 내가 사용중인 현재 버전에서는 해당 기능에 대한 체크가 기본적으로 해제되어 있더라.

결국 해당 기능을 활성화시켜 문제 해결



내가 사용중인 SQLyog 버전



댓글()