최근 MySQL 8.4로 마이그레이션했는데 잘 동작한다.
1. RDS 파라미터 그룹 설정
RDS 파라미터 그룹에 다음과 같은 설정을 추가해야한다.
- performance-schema : 1
- MySQL 성능 스키마 활성화 작업 : MySQL 서버 내부에서 실행되는 작업에 대한 상세 메트릭
- max-digest-length : 4096
- 정규화된 명령문 다이제스트 계산을 위해 세션당 사용 가능한 바이트 수, 기본값으로 설정할 경우 1024자 미만의 쿼리 수집 불가
- performance-schema-max-digest-length : 4096(max_digest-length에 맞춤)
- performance-schema-max-sql-text-length : 4096(max-digest-length에 맞춤)
digest 관련 옵션의 키워드는 MySQL ‘Performance Schema Statement Digest’이다. 실행 쿼리들을 그룹화(비슷한 형태의 쿼리를 그룹화)하여 통계를 제공하기 위해 사용하는 것으로 보인다. 위 설정은 ‘비슷한 형태 = digest’의 길이와 연관이 있다.
아래 쿼리를 실행해서 설정이 제대로 됐는지 확인하고, 적용이 안됐다면 DB를 재시작한다.
SELECT * FROM performance_schema.global_variables;
2. MySQL 작업
datadog 스키마와 사용자를 추가하고, 권한을 설정한다.
CREATE USER datadog@'%' IDENTIFIED by '<UNIQUEPASSWORD>';
ALTER USER datadog@'%' WITH MAX_USER_CONNECTIONS 5;
GRANT REPLICATION CLIENT ON *.* TO datadog@'%';
GRANT PROCESS ON *.* TO datadog@'%';
GRANT SELECT ON performance_schema.* TO datadog@'%';
CREATE SCHEMA IF NOT EXISTS datadog;
GRANT EXECUTE ON datadog.* to datadog@'%';
GRANT CREATE TEMPORARY TABLES ON datadog.* TO datadog@'%';
- datadog 사용자에게 프로세스, 리플리케이션, performance_schema 조회 권한을 부여한다.
- datadog 스키마를 생성하고, datadog 스키마 내 프로시저 실행 권한 및 임시 테이블 생성 권한을 부여한다.
datadog에서 실행 계획을 수집할 수 있도록 프로시저를 생성한다.
DELIMITER $$
CREATE PROCEDURE datadog.explain_statement(IN query TEXT)
SQL SECURITY DEFINER
BEGIN
SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
PREPARE stmt FROM @explain;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
DELIMITER $$
CREATE PROCEDURE <YOUR_SCHEMA>.explain_statement(IN query TEXT)
SQL SECURITY DEFINER
BEGIN
SET @explain := CONCAT('EXPLAIN FORMAT=json ', query);
PREPARE stmt FROM @explain;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE <YOUR_SCHEMA>.explain_statement TO datadog@'%';
RDS를 사용하는 경우에는 성능 스키마 컨슈머 설정이 어렵기 때문에, 아래와 같이 프로시저를 만들어서 런타임에 에이전트가 컨슈머를 활성화할 수 있는 권한을 제공한다.
DELIMITER $$
CREATE PROCEDURE datadog.enable_events_statements_consumers()
SQL SECURITY DEFINER
BEGIN
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name LIKE 'events_statements_%';
UPDATE performance_schema.setup_consumers SET enabled='YES' WHERE name = 'events_waits_current';
END $$
DELIMITER ;
GRANT EXECUTE ON PROCEDURE datadog.enable_events_statements_consumers TO datadog@'%';
3. 에이전트 설정
우분투 기준 /etc/datadog-agent/conf.d/mysql.d/ 경로에 conf.yaml 파일을 생성하고 다음과 같이 작성한다. (에이전트 설치 필요 -> 데이터독 사이트 참고)
init_config:
instances:
- dbm: true
host: '<AWS_INSTANCE_ENDPOINT>'
port: 3306
username: datadog
password: '<YOUR_CHOSEN_PASSWORD>'
aws:
instance_endpoint: '<AWS_INSTANCE_ENDPOINT>'
에이전트를 재시작하고, 연동이 잘되는지 확인한다.
sudo service datadog-agent restart