사용자 도구

사이트 도구


database:mysql:user_lock

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
다음 판 양쪽 다음 판
database:mysql:user_lock [2019/04/03 16:17]
kwon37xi
database:mysql:user_lock [2019/04/17 12:48]
kwon37xi
줄 1: 줄 1:
 ====== MySQL User Lock ====== ====== MySQL User Lock ======
-  * MySQL에서 ''GET_LOCK''과 ''RELEASE_LOCK'' 으로 global lock을 구현할 수 있다.+  * MySQL에서 ''GET_LOCK''과 ''RELEASE_LOCK'' 으로 분산 락(distributed lock)을 구현할 수 있다.
   * [[https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html|MySQL Lock Functions]]   * [[https://dev.mysql.com/doc/refman/5.7/en/locking-functions.html|MySQL Lock Functions]]
   * [[http://gywn.net/2013/12/mysql-user-level-lock/|MySQL의 User Level Lock를 활용한다면?]] user level lock의 활용에 대해 잘 설명한 글   * [[http://gywn.net/2013/12/mysql-user-level-lock/|MySQL의 User Level Lock를 활용한다면?]] user level lock의 활용에 대해 잘 설명한 글
-  * 동일 커넥션에서 GET_LOCK을 여러번하면 여러번 락이 잡힌다. 따라서 release를 그 횟수만큼 동일 커넥션에서 반복해서 해주지 않으면 lock이 풀리지 않게 된다.+  * 동일 커넥션에서 GET_LOCK을 여러번하면 여러번 락이 잡힌다. 따라서 RELEASE_LOCK을 그 횟수만큼 동일 커넥션에서 반복해서 해주지 않으면 lock이 풀리지 않게 된다.
     * 위 문제에 따라 **Java에서 Connection Pool 사용시 항상 동일 Lock 문자열에 대한 GET_LOCK과 RELEASE_LOCK 이 동일 커넥션에서 동일 횟수만큼 이뤄짐을 보장해줘야 한다.**     * 위 문제에 따라 **Java에서 Connection Pool 사용시 항상 동일 Lock 문자열에 대한 GET_LOCK과 RELEASE_LOCK 이 동일 커넥션에서 동일 횟수만큼 이뤄짐을 보장해줘야 한다.**
     * 이 문제를 해결하려면 [[:springframework|Spring Framework]]의 트랜잭션에 의존하지 말고, **별도의 DataSource를 생성하여 직접 Lock 용 커넥션과 트랜잭션을 컨트롤**하는 것이 좋다.     * 이 문제를 해결하려면 [[:springframework|Spring Framework]]의 트랜잭션에 의존하지 말고, **별도의 DataSource를 생성하여 직접 Lock 용 커넥션과 트랜잭션을 컨트롤**하는 것이 좋다.
database/mysql/user_lock.txt · 마지막으로 수정됨: 2023/05/05 22:03 저자 kwon37xi