티스토리 뷰
MariaDB의 `SHOW ENGINE INNODB STATUS` 명령은 InnoDB 스토리지 엔진의 내부 상태를 상세하게 보여준다. 이 출력은 여러 섹션으로 구성되며, 각 섹션은 InnoDB의 성능, 트랜잭션, 잠금, 메모리 사용량 등을 진단하는 데 사용된다.
---
0. HEADER
- Timestamp: 상태 정보가 생성된 시간.
- Monitor name: `InnoDB Monitor`로 고정된 값.
- 주의 사항: 일부 숫자는 누적값이므로 시간 경과에 따른 변화를 관찰해야 한다.
---
1. BACKGROUND THREAD (백그라운드 스레드)
- Main thread: InnoDB의 메인 스레드로, 버퍼 풀의 더티 페이지(Dirty Page)를 디스크에 플러시하거나 체크포인트 생성.
- `srv_master_thread loops`: 메인 스레드가 실행된 횟수.
- `background log/flush thread activity`: 로그 및 플러시 작업 상태.
- `pending` 작업: 대기 중인 I/O 작업 수.
---
2. SEMAPHORES (세마포어)
- OS WAIT ARRAY INFO: 스레드 대기 정보.
- `OS WAIT ARRAY: reserved slots`: 예약된 대기 슬롯 수.
- `Mutex spin/wait`: 뮤텍스 경합 시 스핀 대기 횟수.
- `RW-shared spins`, `RW-excl spins`: 읽기/쓰기 잠금 경합 정보.
- High contention 경고: 세마포어 경합이 심한 경우 성능 저하 원인
---
3. LATEST DETECTED DEADLOCK (최근 발생한 데드락)
- 데드락이 발생한 트랜잭션과 관련된 상세 정보:
- `* (1) TRANSACTION`: 첫 번째 트랜잭션의 ID, 실행 중인 쿼리, 대기 중인 잠금.
- `* (2) TRANSACTION`: 두 번째 트랜잭션 정보.
- `* WE ROLL BACK TRANSACTION (1/2)`: 어떤 트랜잭션이 롤백되었는지 표시..
---
4. TRANSACTIONS (트랜잭션)
- 활성 트랜잭션 목록:
- `Trx id counter`: 다음 트랜잭션 ID.
- `Purge done for trx's n:o <...>`: 완료된 트랜잭션 중 정리(Purge)된 것.
- `History list length`: 정리되지 않은 트랜잭션 수 (과도하면 성능 문제 가능성).
- 트랜잭션 상태:
- `ACTIVE`: 실행 중인 트랜잭션.
- `LOCK WAIT`: 잠금 대기 중인 트랜잭션.
---
5. FILE I/O (파일 입출력)
- I/O 스레드 상태:
- `Pending normal aio reads/writes`: 대기 중인 비동기 읽기/쓰기 작업 수.
- `ibuf aio reads`: Insert Buffer 관련 읽기 작업.
- `log i/o's`: 로그 파일 쓰기 작업.
- `sync i/o's`: 동기화된 I/O 작업.
- `Pending operations`: 대기 중인 I/O 작업 수 (높을 경우 디스크 병목 가능성).
---
6. INSERT BUFFER AND ADAPTIVE HASH INDEX (삽입 버퍼 및 어댑티브 해시 인덱스)
- Insert Buffer:
- `Ibuf: size`: Insert Buffer의 크기.
- `merged operations`: 병합된 삽입/삭제/업데이트 횟수.
- Adaptive Hash Index (AHI):
- `Hash table size`: 해시 테이블 크기.
- `Adaptive hash index cells`: 사용 중인 해시 셀 수.
---
7. LOG (로그)
- Redo Log 상태:
- `Log sequence number`: 현재까지 생성된 로그 시퀀스 번호 (LSN).
- `Log flushed up to`: 디스크에 기록된 LSN.
- `Last checkpoint at`: 마지막 체크포인트 LSN.
- 로그 버퍼 및 플러시:
- `Pending log writes/flushes`: 대기 중인 로그 쓰기/플러시 작업.
---
8. BUFFER POOL AND MEMORY (버퍼 풀 및 메모리)
- 버퍼 풀 사용량:
- `Buffer pool size`: 할당된 메모리 페이지 수.
- `Free buffers`: 사용 가능한 페이지 수.
- `Database pages`: 데이터베이스 페이지 수.
- `Dirty pages`: 아직 디스크에 쓰이지 않은 더티 페이지 수.
- 성능 지표:
- `Buffer pool hit rate`: 버퍼 풀 적중률 (99% 이상이 이상적).
---
9. ROW OPERATIONS (행 작업)
- 쿼리 처리 상태:
- `Number of rows inserted/updated/deleted/read`: 행 작업 통계.
- `Queries inside InnoDB`: InnoDB 내부에서 실행 중인 쿼리 수.
- `Main thread process no.`: 메인 스레드의 프로세스 ID. (예: `executing SQL`).
---
11. HISTORY LIST
- Purge 작업 대기 현황:
- `History list length`: 정리되지 않은 언두 로그 항목 수.
- 주의: 높은 값은 `purge thread` 병목 또는 장기 트랜잭션 존재 가능성.
---
12. FOREIGN KEY ERRORS (오류 발생 시 표시)
- 외래 키 위반 사항:
- 실패한 쿼리 및 위반된 제약 조건 상세 정보.
---
요약
- 성능 튜닝: `SEMAPHORES` (잠금 경합), `BUFFER POOL` (메모리 효율), `LOG` (I/O 병목) 분석.
- 세마포어 경합이 많다면 동시성 설정(`innodb_thread_concurrency`) 조정
- 문제 진단: `LATEST DETECTED DEADLOCK` (교착 상태), `TRANSACTIONS` (장기 실행 트랜잭션) 확인.
- 모니터링: 주기적 상태 확인으로 잠재적 이슈 사전 감지.
- FILE I/O: 섹션의 대기 작업 수가 많다면 디스크 성능 검토
'MariaDB' 카테고리의 다른 글
MariaDB FOREIGN KEY ERRORS (2) | 2025.01.31 |
---|---|
MariaDB LATEST DETECTED DEADLOCK (0) | 2025.01.30 |
MariaDB의 mysqlshow 명령어 (0) | 2025.01.20 |
AFTER_COMMIT과 AFTER_SYNC의 성능 차이를 측정하는 방법 (1) | 2025.01.16 |
mariadb 최신버전에도 semisync_master.so와 semisync_slave.so 파일이 없는 이유? (2) | 2025.01.02 |