비동기처리를 쓰는 서버에서 1개의 connection을 공유해서 쓴다고 했을때 그냥 모르고 쓰다보면 일단 2가지 문제가 생길 수 있는데..

문제1. select 요청

2개 의 커서를 쓴다고 해보자.

이때 1번 커서가 select를 해놓고 fetchall을 안한 상태에서 

2번 커서가 select를 요청하면 unread query가 있다고 exception이 발생한다. (insert 는 가능)

그리고 select의 결과는 connection에 있기 때문에 1번 커서가 select하고 2번 커서에서 fetchall을 해도 결과가 전달 된다.


문제 2. transaction

mysql transaction을 걸어놓고 비동기에 빠져 있다면,

다른 핸들러가 새로운 transaction을 시작할 수 있다. 이렇게 되면 exception 발생!

따라서 connection pool을 만들어 놓고 쓰는 것이 아닌이상 transaction을 걸고 비동기로 들어가면 안된다!


'mysql' 카테고리의 다른 글

Making scheduler for expiry  (0) 2018.01.19
블로그 이미지

시간을 거스르는자

ytkang86@gmail.com

,