ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Mysql] mysql lock세션 확인방법,rowlock 확인방법
    카테고리 없음 2021. 6. 7. 15:39

    Mysql 운영중에 row lock 발생하는 경우가 있는데

     

    lock 점유하고 있는 세션 확인방법은 아래와 같다



    1) row lock



    select

    a.trx_mysql_thread_id as waiting_thread_id,

    a.trx_query as waiting_query,

    c.trx_mysql_thread_id as holding_thread_id,

    c.trx_query as holding_query,

    timestampdiff(second, a.trx_wait_started, now()) as locking_time

    from information_schema.innodb_trx as a

    join information_schema.innodb_lock_waits b on (a.trx_id = b.requesting_trx_id)

    join information_schema.innodb_trx as c on (c.trx_id = b.blocking_trx_id)\G

     

    [결과 예]

    *************************** 1. row ***************************

    waiting_thread_id: 16

    waiting_query: update t1 set id=1 where id=30

    holding_thread_id: 18

    holding_query: NULL

    locking_time: 3

    ***************************************************************

    >> 결과는 1건

    16번 쓰레드가 18번 쓰레드로 인해서

     

    row lock 획득 대기 상태

     

    16번의 쿼리는 update

     

    재 3초간 대기



    이미 18번 쓰레드는 쿼리가 수행

     

    commit전이기 때문에 

     

    수행된 쿼리가 출력되지 않는다

     

    2. 어떠한 쿼리인지 확인하는 방법

     

    SELECT PCU.THREAD_ID, PCU.EVENT_ID, PCU.SQL_TEXT, PCU.ROWS_AFFECTED

    FROM PERFORMANCE_SCHEMA.THREADS TH,

    PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_CURRENT PCU

    WHERE TH.THREAD_ID=PCU.THREAD_ID

    AND TH.PROCESSLIST_ID=18;


    [결과 예]


    +-----------+----------+---------------------------------+---------------+

    | THREAD_ID | EVENT_ID | SQL_TEXT | ROWS_AFFECTED |

    +-----------+----------+---------------------------------+---------------+

    | 62 | 14 | update t1 set id=20 where id=30 | 1 |

    +-----------+----------+---------------------------------+---------------+

     

     




    ※두번째 쿼리는 해당하는 스레드의 가장 마지막 쿼리를 출력

     

    따라서 이미 row lock이 풀린 상태

     

    트랜잭션 내에서 실제 lock 쿼리

     

    (여기서는 update 쿼리)가 지나가고

     

    다음 쿼리가 수행중인 경우 예상과는

     

    다른 쿼리가 출력될 경우도 있다

    댓글

Designed by Tistory.