Mysql & Maria/admin

mysql 모니터링 관련

dbavayne 2024. 10. 24. 22:55

- 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