본문 바로가기
공부/Mysql

mysql 트랜잭션 잠금 확인 쿼리.

by 띵커베르 2023. 2. 5.
728x90
  • InnoDB 스토리지 엔진 잠금
    • InnoDB 스토리지 엔진은 mysql 에서 제공되는 잠금과는 별개로 스토리지 엔진 내부에서 레코드 깁ㄴ의 잠금 방식을 탑재 함
    • 이원화된 잠금 방식 때문에 MyISAM 보다는 훨씬 뛰어난 동시성 처리를 제공할 수 있다.
      • 이원화된 잠금
        • 데이터베이스 트랜잭션이 복수의 레코드에 적용되는 잠금을 말한다.
        • 이로인해 데이터베이스의 일관성을 보장하고, 복수의 사용자가 동시에 동일한 레코드에 접근하려 할 때 충돌을 방지 함.
    • 하지만 이원화된 잠금 처리 탓에 InnoDb 스토리지 엔진에서 사용되는 잠금에 대한 정보는 mysql 명령을 이용해 접근하기 까다롭다.
    • 하지만 최근 버전에서는 InnoDb의 트랜잭션과 잠금, 그리고 잠금 대기 중인 트랜잭션의 목록을 조회할 수 있는 방법이 도입됐다.
      • 아래 코드가 안된다면 권한 또는 버전?차이 인거 같다..
select *
from information_schema.innodb_locks;

SELECT *
FROM information_schema.innodb_lock_waits;
SELECT trx.trx_id,
       trx.trx_state,
       lock_waits.requesting_trx_id,
       lock_waits.blocking_trx_id,
       locks.lock_table,
       locks.lock_index,
       locks.lock_mode
FROM information_schema.innodb_trx trx
         JOIN information_schema.innodb_locks locks ON trx.trx_id = locks.lock_trx_id
         JOIN information_schema.innodb_lock_waits lock_waits ON locks.lock_id = lock_waits.blocking_lock_id;

#==========================================

select * from performance_schema.data_locks;

select r.trx_id              waiting_trx_id,
       r.trx_mysql_thread_id waiting_thread,
       r.trx_query           waiting_query,
       b.trx_id              blocking_trx_id,
       b.trx_mysql_thread_id blocking_thread,
       b.trx_query           blocking_query
from performance_schema.data_lock_waits w
         inner join information_schema.INNODB_TRX b
                    on b.trx_id = w.BLOCKING_ENGINE_TRANSACTION_ID
         inner join information_schema.INNODB_TRX r
                    on r.trx_id = w.REQUESTING_ENGINE_TRANSACTION_ID
;
728x90

댓글