
-----------
# 참고사항
-----------
SEMAPHORES 관련 체크 사항
로그상에 있는 SEMAPHORES 에서 어떤 쿼리 부분에 DeadLock 이 발생하는지 체크해보면 확인하는데 도움이 됨.
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 102042071
--Thread 45052924928 has waited at btr0cur.cc line 1492 for 21.00 seconds the semaphore:
SX-lock on RW-latch at 0xaba0cf0b8 created in file dict0dict.cc line 1954
a writer (thread id 45051926016) has reserved it in mode SX
number of readers 0, waiters flag 1, lock_word: 10000000
Last time write locked in file dict0stats.cc line 1968
SHOW ENGINE INNODB MUTEX;
SELECT * FROM information_schema.INNODB_MUTEXES ORDER BY os_waits DESC LIMIT 10000;
https://www.percona.com/blog/mysql-a-series-of-bad-design-decisions/
https://mariadb.com/docs/server/reference/system-tables/information-schema/information-schema-tables/information-schema-innodb-tables/information-schema-innodb_mutexes-table
병목현상이 발생하는 이유는 slave 지연 발생이 원인인데 이부분은 DDL, DCL 부분에 락이 걸리면서 slave 반영 딜레이가 걸리기도 하고 대량의 IO 발생으로 (Data 기록 , Index 기록등) 지연이 발생하기도함.
-----------
# 참고사항
-----------
innodb_fatal_semaphore_wait_threshold는 MariaDB 공식 문서에 정의된 MariaDB InnoDB 시스템 변수로, 세마포어(잠금) 대기 시간이 설정된 초(seconds)를 초과할 경우 데이터베이스가 치명적 오류(fatal error)로 간주하여 강제 종료(Crash)되도록 하는 임계값입니다.
기능: 스레드가 InnoDB 내부 잠금(latch)을 획득하기 위해 너무 오래 대기할 때(주로 I/O 병목 또는 데드락) [ERROR] [FATAL] InnoDB: innodb_fatal_semaphore_wait_threshold was exceeded 메시지를 발생시키며 DB를 멈춥니다.
기본값 및 설정: 주로 600초(10분) 정도가 기본값으로 설정되나, Tencent Cloud 문서 등에서 600초가 인용된 바 있습니다.
해결 방안: 이 에러는 결과일 뿐이며, 주로 디스크 입출력 속도 저하, 심각한 리소스 경합, 혹은 MariaDB의 특정 버그(예: 10.6.12 버전의 AWS re:Post 이슈)가 원인입니다.
주의사항: 해당 수치를 높이면 DB가 강제 종료되는 것은 막을 수 있으나, 근본적인 병목 현상은 해결되지 않으며 오히려 서비스 중단 시간이 길어질 수 있습니다.
<b>주로 대규모 트랜잭션, 잘못된 인덱스 설정, 혹은 인프라(디스크) 성능 부족 시 나타납니다.</b>
------------- ------------- ------------- ------------- -------------