Skip to content
GwiyeomGo Tech Blog
About GwiyeomGo

mysql lock 발생,해제,상태 확인

MYSQL, 20242 min read

배경

개발 환경에서 update 를 시도하다가 id 를 지정하는 코드가 빠져있어서 특정 table 데이터를 update 되었다 50만건이 넘는 데이터라서 db lock 이 발생했다. lock 이 발생했을때 kill 등 방법을 알았다면 전체 데이터가 업데이트 되지 않았을텐데... 반성하며 상황을 정리하고 해결 법도 알아보려고 한다

  1. update all 코드 실행
  2. 다른 api 조회 -> 응답값 503
  3. log 에 lock 됨 확인
  4. 다른 api 돌아옴 -> 전체적으로 느려진거 같으면서.. 어떤 영향이 있는지 모르겠다.

Lock 은 뭐지?

  • 락은 데이터베이스에서 동시성을 제어하기 위해 사용되는 메커니즘

Lock 을 어떻게 처리?

  • 락을 발생시킨 쿼리를 취소시킨다 LOCK을 발생시키는 쿼리를 종료하면 해당 트랜잭션은 롤백되어 이전 상태로 되돌아간다

  • 만약 락이 너무 오랫동안 지속되거나 해결하기 어려운 경우에는 MySQL 서버를 재시작하여 모든 락을 해제

lock 된 프로세스 취소 시키지?

  • mysql 프로세스 리스트 보고

SHOW FULL PROCESSLIST;

  • 프로세스 죽이기

kil 2771444

2771444 는 프로세스 id

mysql 프로세스 리스트를 어떻게 봐야헤? Command 뭐야?

Sleep :현재 MySQL 서버에 연결되어 있지만 아무 작업도 수행하고 있지 않는 세션

  • 동시에 많은 사용자가 데이터베이스에 접근하는 경우 Command = Sleep 인 경우를 제외하고 조회

SELECT * FROM information_schema.processlist WHERE command != 'Sleep';

Connection Pooling (커넥션 풀)은 뭐야?

https://sarc.io/index.php/mariadb/1154-sleep-session https://blog.naver.com/fantom80/40055830246 https://johngrib.github.io/wiki/database/processlist/

© 2024 by GwiyeomGo Tech Blog. All rights reserved.