본문으로 건너뛰기

MySQL/MariaDB 모니터링

이제 모든 필요한 문서를 확인했으므로 종합적인 답변을 작성하겠습니다.

exemONE MySQL 및 MariaDB 모니터링 상세 가이드


1. 지원 버전

참고 문서: MySQL/MariaDB 모니터링 지원 버전

DB 유형지원 버전
MySQL5.7 이상
MariaDB10 이상

Cloud 환경 MySQL/MariaDB 지원 현황

참고 문서: DB Agent 지원 환경

Cloud 환경MySQLMariaDB
AWS✅ 지원✅ 지원
Azure✅ 지원✅ 지원
OCI⚠️ Cloud 지원, exemONE 미지원❌ 미지원
NCP✅ 지원❌ 미지원
GCP✅ 지원❌ 미지원
SCP✅ 지원✅ 지원

하위 버전 모니터링 제한 사항

MySQL/MariaDB 5.6 모니터링 제한

참고 문서: MySQL/MariaDB 5.6 모니터링 스펙

Thread, SQL 등 주요 지표 모니터링이 불가합니다:

  • Instance Detail: Active Session, SQL List, Meta Lock Info, Metric - Active Threads 모니터링 불가
  • Session Detail: 모니터링 불가
  • Multi View: DB Session Type, Session Temp Usage, Session Tab 모니터링 불가
  • Single View: SQL & Query Error, Active Count, Session Tab 모니터링 불가
  • PA > Trend Analysis: Threads, Meta Lock Tree, Long Active Thread 모니터링 불가
  • PA > Search Session: 모니터링 불가

MySQL/MariaDB 5.5 모니터링 제한

참고 문서: MySQL/MariaDB 5.5 모니터링 스펙

5.6 버전 대비 추가로 SQL Detail, Top N Analysis, Search SQL 등도 모니터링 불가합니다.


2. 필수 권한

참고 문서: MySQL/MariaDB 모니터링 권한

2-1. 기본 모니터링 권한

모니터링 계정(예: exemone)에 다음 권한을 부여합니다:

GRANT PROCESS ON *.* TO exemone;
GRANT SELECT ON performance_schema.* TO exemone@'{db-agent 설치 서버 IP}';
GRANT SHOW DATABASES ON *.* TO exemone@'{db-agent 설치 서버 IP}';
GRANT SELECT ON dbname.* TO exemone@'{db-agent 설치 서버 IP}'; -- 또는 GRANT SELECT ON *.*
GRANT REPLICATION CLIENT ON *.* TO exemone@'{db-agent 설치 서버 IP}';
GRANT REPLICATION SLAVE ON *.* TO exemone@'{db-agent 설치 서버 IP}';
GRANT SUPER ON *.* TO exemone@'{db-agent 설치 서버 IP}';
GRANT SELECT ON information_schema.processlist TO exemone@'{db-agent 설치 서버 IP}';
GRANT SELECT ON information_schema.innodb_session_temp_tablespaces TO exemone@'{db-agent 설치 서버 IP}';
GRANT SELECT ON information_schema.tables TO exemone@'{db-agent 설치 서버 IP}';
GRANT SELECT ON information_schema.innodb_tablespaces TO exemone@'{db-agent 설치 서버 IP}';
GRANT SELECT ON information_schema.files TO exemone@'{db-agent 설치 서버 IP}';

-- MySQL/MariaDB 10.5.2 이상 (Top Sort/Transaction)
GRANT SELECT ON sys.statements_with_sorting TO exemone@'{db-agent 설치 서버 IP}';
GRANT SELECT ON performance_schema.events_statements_summary_by_digest TO exemone@'{db-agent 설치 서버 IP}';
GRANT EXECUTE ON FUNCTION sys.format_statement TO exemone@'{db-agent 설치 서버 IP}';
GRANT EXECUTE ON FUNCTION sys.format_pico_time TO exemone@'{db-agent 설치 서버 IP}';

-- MySQL 8 이상 / MariaDB 10.0.15 ~ 10.5.1
GRANT SELECT ON information_schema.innodb_trx TO exemone@'{db-agent 설치 서버 IP}';

2-2. Session Kill 권한

-- MySQL 8.0, MariaDB 10.5.2 이상
GRANT CONNECTION_ADMIN ON *.* TO exemone@'{db-agent 설치 서버 IP}';

-- MySQL 5.7 이하, MariaDB 10.5.2 미만
GRANT SUPER ON *.* TO exemone@'{db-agent 설치 서버 IP}';

-- AWS RDS
GRANT EXECUTE ON PROCEDURE mysql.rds_kill TO exemone@'{db-agent 설치 서버 IP}';

-- NCP
-- DDL 권한 user 계정으로 CALL sys.ncp_kill_session({세션ID}) 이용

2-3. Replication 권한

-- MySQL 8.0 이상: 추가 권한 불필요 (기본 모니터링 권한만으로 클러스터 관계 파악 가능)

-- MySQL 8.0 미만
GRANT REPLICATION CLIENT ON *.* TO exemone@'{db-agent 설치 서버 IP}';
GRANT REPLICATION SLAVE ON *.* TO exemone@'{db-agent 설치 서버 IP}';

-- MariaDB 10.4 이하
GRANT REPLICATION CLIENT ON *.* TO exemone@'{db-agent 설치 서버 IP}';

-- MariaDB 10.5 이상
GRANT SLAVE MONITOR ON *.* TO exemone@'{db-agent 설치 서버 IP}';

-- MariaDB 10.6 이상
GRANT EXECUTE ON FUNCTION sys.format_statement TO exemone@'{db-agent 설치 서버 IP}';
GRANT EXECUTE ON FUNCTION sys.format_time TO exemone@'{db-agent 설치 서버 IP}';
GRANT EXECUTE ON FUNCTION sys.format_bytes TO exemone@'{db-agent 설치 서버 IP}';
GRANT EXECUTE ON FUNCTION sys.sys_get_config TO exemone@'{db-agent 설치 서버 IP}';
GRANT SELECT ON sys.* TO exemone@'{db-agent 설치 서버 IP}';
GRANT SLAVE MONITOR ON *.* TO exemone@'{db-agent 설치 서버 IP}';
GRANT BINLOG MONITOR, REPLICATION MASTER ADMIN ON *.* TO exemone@'{db-agent 설치 서버 IP}';

참고: server_id가 0인 경우 단독 서버로 Replication 권한 설정이 불필요합니다. MySQL 8.0 미만 클러스터 환경에서는 replication client, replication slave 권한이 없으면 클러스터 관계 파악이 되지 않습니다.


3. 사전 설정

참고 문서: MySQL/MariaDB 모니터링 사전 설정

3-1. 파라미터 설정 (DB 재기동 필요)

performance_schema = ON
max_digest_length = 4096 -- SQL digest 저장 최대 길이 확대 (Default: 1024)
performance_schema_max_digest_length = 4096
performance_schema_max_sql_text_length = 4096

3-2. Slow Query 수집 설정

SET GLOBAL slow_query_log = ON;
SET GLOBAL slow_query_log_file = '{slow query 로그 파일 경로}';
SET GLOBAL long_query_time = {초};

3-3. CPU Time / Event Wait 등 수집 설정

  • MySQL 8.0.28 이상 버전부터 지원하며, MariaDB는 DB에서 미지원
  • performance_schema.setup_consumers 테이블의 events_transactions%, events_statements_%
  • performance_schema.setup_instruments 테이블의 events_waits%, wait/% 값이 'YES' 일 경우 DB에서 수집
  • DB 재기동 없이 적용 가능 (기본값: 'NO')

3-4. Plan 조회 Procedure 설정 (선택사항)

참고 문서: MySQL/MariaDB Plan 조회 Procedure 사용 가이드

DML이나 Function이 사용된 쿼리의 Plan 조회 시, exemONE 유저에 추가 권한 미부여 환경에서는 권한 문제로 Plan 조회가 불가할 수 있습니다. 이를 해결하기 위해 Plan 조회 프로시저를 생성합니다.

Step 1) Plan 조회 프로시저 생성 (관리자 권한 계정으로 접속)

DELIMITER $$

CREATE PROCEDURE <스키마명>.exem_get_explain(IN query TEXT)
SQL SECURITY DEFINER
BEGIN
SET @explain := CONCAT('EXPLAIN ', query);
PREPARE stmt FROM @explain;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$

DELIMITER ;

Plan 수집이 필요한 모든 스키마에서 생성 필요

Step 2) 프로시저 실행 권한 부여

GRANT EXECUTE ON PROCEDURE <스키마명>.exem_get_explain TO exemone@'%';

Step 3) use_plan_procedure 옵션 활성화

  • common._use_querytrue인 경우: Setting > Database > Edit Instance > Custom Configuration에서 use_plan_procedure 값을 true로 변경

  • common._use_queryfalse인 경우: Database Metric Collection Setting > Metric Setting에서 plan_procedure 토글 ON으로 변경

참고: MySQL 8.0.2x 이상 버전에서 SELECT 문은 EXPLAIN ANALYZE 구문이 적용되며, 오래 걸릴 경우 KILL QUERY로 중단 가능합니다.


4. 주요 모니터링 항목

4-1. Instance Detail Slide (실시간 모니터링)

참고 문서: Instance Detail Slide - MySQL

(1) Information

  • Agent 정보: Instance Name, Status, Agent Version, Instance Group Name, DB Version, Boot Time, Uptime
  • Machine 정보: Host Name, Host IP, OS, Kernel Version

(2) Metric (Instance 성능 지표)

지표설명
Active Threads현재 실행 중인 Thread 수
Connection Usagemax connection 기준 대비 현재 연결된 Connection 비율
Lock Waiting ThreadsLock 대기 Thread 수
Queries DeltaDB 기동 후 수행된 전체 SQL 수의 변화량
Innodb Buffer Pool Read RequestsBuffer Pool에서 읽은 블록 수
Innodb Buffer Pool ReadsDisk에서 읽은 블록 수
Redo Log UsageRedo usage 비율
Open TablesDB 상 열린 테이블 수
Create Temp Disk Ratio임시 테이블이 물리적 disk에 생성된 비율
Tps초당 트랜잭션 수
Buffer Pool Hit Ratio총 메모리에서 InnoDB Buffer Pool이 차지하는 비율
(OS) Cpu UsageCPU 사용률
(OS) Memory Used메모리 사용률

(3) Active Session

실행 중인 Active Session 목록을 실시간으로 확인합니다. Multi Kill 기능으로 다수 세션 동시 종료가 가능합니다.

수집 항목: Thread ID, Process ID, User, Host, DB, Digest, SQL Text, Elapsed Time, Query Start Time, Command, State, PID, Program Name, Statement Latency, Progress, Lock Latency, Rows Examined, Rows Sent, Rows Affected, Tmp Tables, Tmp Disk Tables, Full Scan, Last Statement Latency, Current Memory, Last Wait, Last Wait Latency, Source, Trx Latency, Trx State, Trx Autocommit

(4) Process List

Sleep 세션을 포함한 전체 세션 목록을 조회할 수 있으며, Multi Kill 기능도 지원합니다.

(5) SQL List

최근 수집된 SQL 목록을 확인하며, DB/Digest/SQL Text 검색 및 합계/평균 토글 기능을 제공합니다.

수집 항목: DB, Digest, SQL Text, Total Latency, Rows Examined, Rows Sent, Rows Sorted, Tmp Tables, Tmp Disk Tables, Sort Merge Passes, Error Count, Max Latency, First Seen, Executions, Ratio(%)

(6) Lock Info

Lock 상태의 Session 목록과 Holder 정보를 확인합니다. Multi Kill로 Lock Session 종료가 가능합니다.

(7) Meta Lock Info

Meta Lock 상태의 Session 목록을 확인합니다. Lock Wait Time, Lock Status, Blocking Engine Transaction ID 등 상세 정보를 제공합니다.

(8) Alert / (9) Parameter / (10) Host Process List

Alert 발생 현황, DB 파라미터 조회, 호스트 프로세스 목록(PID, Process Name, CPU, Memory 등) 모니터링을 제공합니다.


4-2. Multi View (다중 인스턴스 모니터링)

참고 문서: Multi View - MySQL

다수의 MySQL 서버를 동시에 모니터링하며 다음 영역을 제공합니다:

영역설명
OverviewCPU, Memory, 주요 성능 지표 종합 확인
DB Session TypeActive/Long/Lock Session 실시간 Count
RankSort Merge Passes, Global Temp Usage, Session Temp Usage, Queries[Delta], Redo Usage, Connection Usage 등 6가지 주요 지표 순위
Alert인스턴스별 Alert Level/Type별 표시
Slow QuerySQL 수행시간 Scatter 차트
Real Time Monitor (Trend Chart)4개 주요 성능 지표 Chart (지표 변경 가능)
Session TabThread, Lock Tree, Meta Lock Tree, Session Detail 탭 제공

4-3. Single View (단일 인스턴스 심층 모니터링)

참고 문서: Single View - MySQL

영역주요 기능
Statistics & EventTop Diff Statistics(Sum) for 10 min, Top Event for 10 min
SQL & Query ErrorTop SQL Order By Total Latency/Max Latency/Tmp Disk Tables/Sort Merge Passes, Top SQL Order By Error Count/Warn Count
Scan TypeTable Full Scan, Index 사용 효율 분석
Overview (Connection View)벌집 뷰를 통한 Thread 사용 패턴 시각화 (Long: 노란색, Lock: 빨간색)
CoreAlert, Sorting, Replication, Redo Log File Size 관리
Admin ReferenceTemp Usage (Global/Session), Open Tables, Parameter 변경사항, Top Tablespace Size, Alert Logs

4-4. Session Detail Slide

참고 문서: Session Detail Slide - MySQL

Thread ID 클릭 시 열리며 다음을 제공합니다:

  • Session Information: PID, Thread ID, Host, User, DB
  • Active Session History: 시간별 Elapsed Time, State, Digest, Command, Lock Latency, Rows 정보 이력
  • SQL Performance Details: Full Text, Plan 정보
  • Kill Session: 실행 중인 Session 강제 종료 기능

4-5. SQL Detail Slide

참고 문서: SQL Detail Slide - MySQL

Digest 클릭 시 열리며 다음 탭을 제공합니다:

  • Full Text: SQL 전체 텍스트 (포맷팅, 복사 기능)
  • Trend: Time, I/O, Executions 추이 차트
  • History: 시간별 Executions, Latency, Lock Latency, Rows Examined/Sent/Sorted, Sort Merge Passes, Tmp Tables/Disk Tables
  • Plan: 실행 계획 (SELECT ID, Query Plan)
  • Sampling SQL Text: 바인드 변수가 포함된 실제 SQL 텍스트

4-6. Performance Analysis (성능 분석)

참고 문서: Trend Analysis - MySQL, Top-N Analysis - MySQL

  • Trend Analysis: 날짜별/시간별 성능 추이 분석 (Threads, Meta Lock Tree, Top SQL, Long Active Thread, User Connection Info)
  • Top-N Analysis: 특정 기간 Top SQL 조회 (Group By: SQL/Schema, Order By: Total Latency/Executions 등)
  • Search SQL: SQL 검색 및 상세 분석
  • Search Session: Session 검색 및 분석
  • Parameter History: 파라미터 변경 이력 추적
  • Object Size: DB Size, Object Size 분석

5. 추가 주의사항

  1. performance_schema = ON 설정은 DB 재기동이 필요하므로, 운영 환경에서는 유지보수 시간에 적용하세요.
  2. CPU Time/Event Wait 수집은 MySQL 8.0.28 이상에서만 지원되며, MariaDB에서는 미지원입니다.
  3. Session Temp Tablespace 모니터링은 MySQL 8.0.13 버전부터 지원됩니다. MariaDB는 Global Temp Tablespace만 모니터링 가능하며, MariaDB 10.3 이상에서는 Temp Tablespace 모니터링을 지원하지 않습니다.
  4. Replication 모니터링 시 버전별로 필요 권한이 다르므로, 사용 중인 DB 버전에 맞는 권한을 정확히 부여하세요.
  5. AWS RDS 환경에서 Session Kill 시 mysql.rds_kill 프로시저에 대한 EXECUTE 권한이 별도로 필요합니다.
  6. Plan 조회 Procedure를 사용하면 DML 및 Function SQL의 Plan 조회 시 권한 문제를 해결할 수 있습니다. Plan 수집이 필요한 모든 스키마에서 프로시저를 생성해야 합니다.