트랜잭션을 통한 lcok 증상으로 간헐적인 DB 지연이 발생하여 1초마다 innodb lock 을 확인할 수 있는 스크립트를 작성하여 원인 파악을 했다.

 

show full processlist, show engine innodb status 결과도 같이 확인하면 좋다.

#!/bin/bash

# 출력 파일 정의
OUTPUT_FILE1="/path/INNODB_TRX.log"
OUTPUT_FILE2="/path/INNODB_LOCKS.log"
OUTPUT_FILE3="/path/INNODB_LOCKS_WAITS.log"

# 로그 파일이 있으면 삭제(필요시 사용) 
#if [ -f "$OUTPUT_FILE" ]; then
#    rm "$OUTPUT_FILE"
#fi

# 무한 루프 시작
while true; do
    # 현재 날짜 및 시간
    echo "Timestamp: $(date)" >> "$OUTPUT_FILE1"
    echo "Timestamp: $(date)" >> "$OUTPUT_FILE2"
    echo "Timestamp: $(date)" >> "$OUTPUT_FILE3"

    # InnoDB 트랜잭션 상태 쿼리 실행
    mysql -u user -p'password' -e "SELECT * FROM information_schema.INNODB_TRX;" >> "$OUTPUT_FILE1"
    echo "" >> "$OUTPUT_FILE1"

    # InnoDB 잠금 상태 쿼리 실행
    mysql -u user -p'password' -e "SELECT * FROM information_schema.INNODB_LOCKS;" >> "$OUTPUT_FILE2"
    echo "" >> "$OUTPUT_FILE2"

    # InnoDB 잠금 대기 상태 쿼리 실행
    mysql -u user -p'password' -e "SELECT * FROM information_schema.INNODB_LOCK_WAITS;" >> "$OUTPUT_FILE3"
    echo "" >> "$OUTPUT_FILE3"

    # 1초 대기
    sleep 1
done

 

 

+ Recent posts