- mysql 관련해서 핵심 모니터링 지표를 제시한다
- 보통 쿼리 응답시간이나 cpu 또는 메모리 관련된 지표들을 확인해 볼 수 있다.
-- CPU 사용률이 높은 쿼리 확인
SELECT DIGEST_TEXT, COUNT_STAR,
SUM_TIMER_WAIT/1000000000 as exec_time_ms,
SUM_CPU_TIME/1000000000 as cpu_time_ms
FROM performance_schema.events_statements_summary_by_digest
WHERE SUM_CPU_TIME > 0
ORDER BY SUM_CPU_TIME DESC
LIMIT 10;
-- 메모리 사용량 확인
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_%';
-- 쿼리 응답시간 확인
SELECT digest_text, count_star, avg_timer_wait/1000000000 as avg_latency_ms
FROM performance_schema.events_statements_summary_by_digest
ORDER BY avg_timer_wait DESC
LIMIT 10;
-- 일반적 기준
-- 양호: < 100ms
-- 주의: 100-500ms
-- 경고: > 500ms
performance_schema.events_statements_summary_by_digest 정보
SCHEMA_NAME | 쿼리가 실행된 데이터베이스 스키마의 이름입니다. |
DIGEST | SQL 문의 패턴을 나타내는 해시 값입니다. 동일한 패턴의 SQL 문의 집계를 위해 사용됩니다. |
DIGEST_TEXT | 쿼리의 일반화된 형태입니다. 값이나 상수가 제거된 쿼리의 패턴을 보여줍니다. |
COUNT_STAR | 이 쿼리 패턴이 몇 번 실행되었는지에 대한 횟수를 나타냅니다. |
SUM_TIMER_WAIT | 이 패턴의 총 실행 시간을 나노초 단위로 나타냅니다. |
MIN_TIMER_WAIT | 이 패턴의 최소 실행 시간입니다. |
AVG_TIMER_WAIT | 이 패턴의 평균 실행 시간입니다. |
MAX_TIMER_WAIT | 이 패턴의 최대 실행 시간입니다. |
SUM_LOCK_TIME | 쿼리 실행 중 잠금 대기 시간의 총합입니다. |
SUM_ERRORS | 이 패턴의 쿼리에서 발생한 총 오류 수입니다. |
SUM_WARNINGS | 이 패턴의 쿼리에서 발생한 총 경고 수입니다. |
SUM_ROWS_AFFECTED | 이 패턴의 쿼리에서 영향을 받은 행 수의 총합입니다. |
SUM_ROWS_SENT | 이 패턴의 쿼리에서 반환된 행 수의 총합입니다. |
SUM_ROWS_EXAMINED | 이 패턴의 쿼리에서 조회된 행 수의 총합입니다. |
SUM_CREATED_TMP_DISK_TABLES | 쿼리 실행 중 디스크 기반 임시 테이블이 생성된 횟수입니다. |
SUM_CREATED_TMP_TABLES | 쿼리 실행 중 생성된 임시 테이블 수입니다. |
SUM_SELECT_FULL_JOIN | 쿼리 실행 중 full join이 발생한 횟수입니다. |
SUM_SELECT_FULL_RANGE_JOIN | 쿼리 실행 중 full range join이 발생한 횟수입니다. |
SUM_SELECT_RANGE | 쿼리 실행 중 range 스캔이 발생한 횟수입니다. |
SUM_SELECT_RANGE_CHECK | 쿼리 실행 중 range check가 발생한 횟수입니다. |
SUM_SELECT_SCAN | 쿼리 실행 중 테이블 스캔이 발생한 횟수입니다. |
SUM_SORT_MERGE_PASSES | 쿼리 실행 중 정렬 작업을 위한 병합 단계 횟수입니다. |
SUM_SORT_RANGE | 쿼리 실행 중 range에 의해 정렬이 발생한 횟수입니다. |
SUM_SORT_ROWS | 정렬된 총 행 수입니다. |
SUM_SORT_SCAN | 스캔을 통해 정렬이 발생한 횟수입니다. |
SUM_NO_INDEX_USED | 인덱스를 사용하지 않은 쿼리 실행 횟수입니다. |
SUM_NO_GOOD_INDEX_USED | 적절한 인덱스를 사용하지 않은 쿼리 실행 횟수입니다. |
FIRST_SEEN | 이 패턴의 쿼리가 처음으로 관측된 시각입니다. |
LAST_SEEN | 이 패턴의 쿼리가 마지막으로 관측된 시각입니다. |
나노초 계산식
1초 = 1,000,000,000 나노초
# Given milliseconds
milliseconds = 1785037
# Convert milliseconds to hours, minutes, seconds
seconds = milliseconds / 1000
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
remaining_seconds = seconds % 60
hours, minutes, remaining_seconds
-- 시간대별 쿼리 처리량
SELECT
HOUR(event_time) as hour,
COUNT(*) as query_count,
AVG(timer_wait)/1000000000 as avg_latency_ms
FROM performance_schema.events_statements_history
GROUP BY HOUR(event_time)
ORDER BY hour;
-- 실시간 성능 모니터링 뷰
CREATE VIEW v_performance_monitor AS
SELECT
NOW() as check_time,
(SELECT COUNT(*) FROM information_schema.processlist) as connections,
(SELECT COUNT(*) FROM information_schema.processlist WHERE state = 'Locked') as locked_processes,
(SELECT ROUND(SUM(data_length + index_length)/1024/1024,1)
FROM information_schema.tables) as total_db_size_mb,
(SELECT COUNT(*) FROM performance_schema.events_statements_current
WHERE timer_wait > 1000000000) as slow_queries;
-- 주기적으로 체크
SELECT * FROM v_performance_monitor;
-- 주간 성능 리포트 예시
SELECT
DATE(event_time) as date,
COUNT(*) as query_count,
AVG(timer_wait)/1000000000 as avg_latency_ms,
MAX(timer_wait)/1000000000 as max_latency_ms
FROM performance_schema.events_statements_history
GROUP BY DATE(event_time);
'Mysql & Maria > admin' 카테고리의 다른 글
percona toolkit (pt-table-checksum) (1) | 2024.11.19 |
---|---|
mysql 5.7 replication 구성 (0) | 2024.11.19 |
percona toolkit 설치 (0) | 2024.09.14 |
centos 7, mysql 5.7 설치 (1) | 2024.09.14 |
Optimizer_switch- Rowid 필터링 최적화 (0) | 2024.09.11 |