간단한 글을 쓰는 것은 지양하려고 했는데, 다른 블로그 글 중에 잘 안맞는 것들이 있어서 조금 끄적거려본다.
알기로 5.6 버전과 8.0 버전은 시스템 쿼리의 형태가 조금 다른것으로 안다. (password 컬럼이 사라졌다거나..)
이 글은 8.0 기준으로 작성함을 알려드린다.
Transaction Lock 확인
확인 자체는 아래 명령을 통해 진행하면 된다.
SELECT * from information_schema.INNODB_TRX
다만 일을 하다보면 이 트랜잭션을 죽여도 되는가 혹은 이 트랜잭션이 어디서 발생했는가를 알아야 하는 경우가 존재한다.
SHOW ENGINE INNODB STATUS;
이때 이 명령을 통해 락이 어느시점에 어떤데이터에서 발생했는지를 보다 자세히 알 수 있게 해준다.
무턱대고 트랜잭션을 죽일게 아니라 보고 죽여야 하지 않겠는가.
Transaction Lock 해결
확인했다면
빨간색을 주목하자. 저 부분이 문제가 되는 DB내의 process다. 우리는 저걸 죽여야 한다.
맨 앞에있는 trx_id는 process가 아닌 트랜잭션 Id이기 때문에 다른 블로그들에 소개된 kill 명령으로는 저거 안죽는다.
kill {trx_mysql_thread_id} ; 를 쿼리로 날려보자.
락되어있는 데이터가 풀렸을거다.
별개의 얘기로 현재 돌아가는 Process를 확인하려면
SHOW processlist ;
혹은
SELECT * from information_schema.PROCESSLIST;
사용해보자. 지금 물려있는 Process들을 확인가능하다.
'개발 이슈,해결법' 카테고리의 다른 글
BE 와 FE 는 어떻게 협업해야 할까. (0) | 2023.05.01 |
---|---|
[JAXB] XSD to java Code (xsd , java object변환) (0) | 2023.02.09 |
회고 (2022 하반기) (1) | 2022.11.24 |
[CDISC] CDISC Library api 사용법 (0) | 2022.07.06 |
[sphinx] 스핑크스를 사용해 django 문서화 (3) | 2022.06.16 |