문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
database:mysql:user_lock [2019/03/30 20:06] kwon37xi [MySQL User Lock] |
database:mysql:user_lock [2023/05/05 22:03] (현재) kwon37xi |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ====== MySQL User Lock ====== | ====== MySQL User Lock ====== | ||
| - | * MySQL에서 '' | + | * MySQL에서 '' |
| + | * 원래는 [[nosql: | ||
| * [[https:// | * [[https:// | ||
| * [[http:// | * [[http:// | ||
| + | * 동일 커넥션에서 GET_LOCK을 여러번하면 여러번 락이 잡힌다. 따라서 RELEASE_LOCK을 그 횟수만큼 동일 커넥션에서 반복해서 해주지 않으면 lock이 풀리지 않게 된다. | ||
| + | * 위 문제에 따라 **Java에서 Connection Pool 사용시 항상 동일 Lock 문자열에 대한 GET_LOCK과 RELEASE_LOCK 이 동일 커넥션에서 동일 횟수만큼 이뤄짐을 보장해줘야 한다.** | ||
| + | * 이 문제를 해결하려면 [[: | ||
| + | * Lock 은 트랜잭션 commit/ | ||
| + | * Performance schema의 [[https:// | ||
| * Lock 이름은 **64**글자 제한(from MySQL 5.7) | * Lock 이름은 **64**글자 제한(from MySQL 5.7) | ||
| <code sql> | <code sql> | ||
| 줄 16: | 줄 22: | ||
| * MySQL 5.6은 '' | * MySQL 5.6은 '' | ||
| - | * MySQL 5.7은 두번 이상 호출해도 앞선 락을 해지하지 않는다. - 더 좋은 행동임. 5.6 -> 5.7 업그레이드하는게 아니면 굳이 신경 안써도 됨. | + | * MySQL 5.7은 두번 이상 호출해도 앞선 락을 해지하지 않는다. |
| * [[http:// | * [[http:// | ||
| + | * 5.7 부터 하나의 세션에서 연속으로 동일 Lock 이름으로 Lock을 잡으면 그 횟수만큼 중복으로 Lock이 잡힌다. | ||
| + | <code sql> | ||
| + | select get_lock(' | ||
| + | select is_free_lock(' | ||
| + | select get_lock(' | ||
| + | select is_free_lock(' | ||
| - | ===== 참조 ===== | + | -- release 시작 |
| - | * [[http:// | + | select release_lock(' |
| + | select is_free_lock(' | ||
| + | select release_lock(' | ||
| + | select is_free_lock(' | ||
| + | -- 이미 모든 Lock 해지 상태 | ||
| + | select release_lock(' | ||
| + | </ | ||
| + | ===== 참조 ===== | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||