Database/MySQL

    MySQL Named Lock 사용법 with Spring Boot

    목차 1. MySQL Named Lock 2. 사용법 - Named Lock Functions 2.1. GET_LOCK(lock_name, timeout) - 락 획득 시도 2.2. RELEASE_LOCK(lock_name) - lock_name으로 락 해제 시도 2.3. IS_FREE_LOCK(lock_name) - 락 획득 가능(사용 가능) 여부확인 2.4. IS_USED_LOCK(lock_name) - 락 사용중인지 여부 2.5. 네임드 락 중첩과 해제 2.5.1 네임드락이 관리되는 테이블 - performance_schema의 metadata_locks Table 2.6. 네임드락(Named Lock의) 단점 3. Spring에서의 구현 3.1. JdbcTemplate으로 구현 3.2. Entit..

    MySQL 실행계획(explain) 정리

    MySQL 실행계획 정리 쿼리 튜닝 검토 전, 실행계획(explain)을 보고 실행할 SQL이 DB에서 어떻게 처리될지 파악할 수 있습니다. MySQL 튜닝에서 가장 중요한 것은 쿼리와 스키마 설계인데, 스키마 설계는 한번 진행되면 그 테이블을 사용하는 모든 쿼리에 영향을 주기 때문에 좀처럼 변경하기 힘들지만 쿼리는 해당 쿼리만 수정하면 되므로 상대적으로 변경하기 쉽습니다. Slow Query를 없애고 어플리케이션의 성능을 향상 시키고 싶다면 우선적으로 쿼리의 튜닝을 검토해봐야 합니다. 이때 쿼리 튜닝 검토 전, 실행계획(explain)을 보고 실행할 SQL이 DB에서 어떻게 처리될지 파악할 수 있습니다. EXPLAIN 명령을 사용하면 MySQL 엔진이 쿼리를 어떻게 처리하는지에 대한 정보를 제공하는 쿼..

    MySQL 실행계획(explain) rows, filtered가 제대로 안나오고 1이거나 100.00일때 해결방법

    MySQL에서 쿼리 튜닝에 대해 공부하다가, 쿼리와 실행계획을 확인할 때 rows와 filtered값이 제대로 확인되지 않았습니다. rows는 항상 1 filtered는 항상 100.00 때문에 간단하게 발생한 상황과 정확한 값이 나오도록 해결한 방법에 대해 정리합니다. 상황 30만건의 데이터가 있는 사원 테이블이 존재합니다. mysql> describe 사원; +--------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------+------+-----+---------+-------+ | 사원번호 | int | NO ..

    MySQL 낙관적 락과 데드락(dead lock) With JPA Hibernate

    프로젝트에서 모임 가입 기능을 구현하면서, 동시성 문제와 데드락까지 경험한 내용 그리고 어떻게 해결하였는지 고민과정과 해결방법을 정리하려고 합니다. 프로젝트 버전 SpringBoot 2.7.8 MySQL 8.028 Spring Data Jpa Hibernate 5.6.14 모임 가입 기능? 저희 프로젝트에는 모임과 모임에 가입할 수 있는 기능이 있습니다. 모임 가입에 대한 비즈니스 요구사항은 다음과 같습니다. 모임이 존재하고, 모임에는 인원제한이 있습니다. 인원제한이 다 찬 모임에 참여하려는 경우, 참여가 불가능 합니다. 모임에 여러명이 동시에 요청해도, 요청한 순서대로 모임에 가입되어야 합니다. 모임과 모임 구성원은 1:N 관계이며, 모임 제한 인원은 모임 테이블에 존재합니다. 동시성 문제가 발생할 것..