MySQL Database Monitoring 고급 설정
MySQL용 Database Monitoring을 더 세밀하게 튜닝하는 방법을 설명드릴게요. 이 페이지에서는 performance_schema 테이블 유지 관리, 동일한 테이블 처리, 샘플링 비율 조정 방법을 다룹니다.
출처: 문서
본문
events_statements_summary_by_digest 잘라내기 (Truncating)
일부 워크로드는 performance_schema의 테이블에 대한 유지 관리가 필요해요. 쿼리 통계는 performance_schema.events_statements_summary_by_digest 테이블에 집계되는데, 이 테이블에는 행 수 제한이 있어요. 이 제한은 performance_schema_digests_size 시스템 변수로 지정됩니다. 테이블이 가득 차면 새 쿼리 digest는 null 스키마와 null 쿼리 digest를 가진 catch-all 행에 기록되어, 에이전트가 해당 행을 구성하는 쿼리들을 구분하지 못하게 돼요.
정확한 쿼리별 메트릭이 유실되는 것을 막으려면, 유지 관리 단계로 이 테이블을 주기적으로 잘라내서 새 쿼리를 모두 수집할 수 있게 해 주세요.
TRUNCATE performance_schema.events_statements_summary_by_digest;
잘라내기의 주기를 정하려면 아래 쿼리를 실행해서 초당 이 catch-all 행으로 보내지는 statement 수를 확인해 보세요. 값이 0보다 크면 테이블이 가득 찬 것이므로 잘라내기를 해야 해요.
SHOW STATUS LIKE 'Performance_schema_digest_lost';
동일한 테이블이 많은 경우 처리하기
테이블 정의가 이름만 빼고 동일하도록 데이터베이스를 여러 테이블로 분할하면 정규화된 쿼리가 대량으로 생성될 수 있어요.
SELECT * FROM daily_aggregates_001
SELECT * FROM daily_aggregates_002
SELECT * FROM daily_aggregates_003
이런 경우 replace_digits 옵션을 사용해 이러한 쿼리를 하나의 정규화된 쿼리로 추적하세요. 그러면 해당 쿼리들의 모든 메트릭이 하나의 쿼리로 합쳐집니다.
SELECT * FROM daily_aggregates_?
Datadog Agent의 데이터베이스 인스턴스 구성에 replace_digits 옵션을 추가하세요.
init_config:
instances:
- dbm: true
...
replace_digits: true
샘플링 비율 높이기
비교적 빈도가 낮거나 빠르게 실행되는 쿼리가 있다면 collection_interval 값을 낮춰 샘플을 더 자주 수집함으로써 샘플링 비율을 높여 보세요.
Datadog Agent의 데이터베이스 인스턴스 구성에서 collection_interval을 설정하세요. 기본값은 1입니다. 값을 더 작은 간격으로 낮춰 주세요.
instances:
- dbm: true
...
query_samples:
collection_interval: 0.1