NRDOT Collector가 수집한 포괄적인 메트릭으로 MySQL 데이터베이스 성능을 모니터링하십시오. 기본적으로 뉴렐릭은 기본 메트릭 섹션에 참조된 메트릭을 수집합니다. 추가 메트릭 섹션에 나열된 원하는 메트릭을 활성화하여 모니터링을 강화할 수 있습니다.
추가 지표
다음 메트릭은 기본적으로 비활성화되어 있지만 MySQL 성능 및 상태에 대한 더 깊은 인사이트를 얻기 위해 활성화할 수 있습니다. 이러한 메트릭은 기능별로 구성되어 있으며 대부분 직접적인 MySQL 연결이 필요합니다.
로그 이벤트
db.server.query_sample
현재 실행 중인 데이터베이스 문에 대한 실시간 가시성입니다 — 전체 실행 로그가 아니라 스크랩할 때마다 생성되는 특정 시점의 스냅샷입니다. 기본적으로 비활성화되어 있습니다.
| 기인하다 | 설명 |
|---|---|
db.system.name | mysql |
mysql.threads.thread_id | 명령문을 실행하는 스레드의 고유 식별자입니다. |
mysql.session.id | PROCESSLIST_ID — 다음을 통해 볼 수 있는 연결 ID SHOW PROCESSLIST |
user.name | 포그라운드 스레드 사용자, 백그라운드 스레드의 경우 비어 있습니다. |
db.namespace | 스레드의 현재 데이터베이스(processlist_db) |
mysql.threads.processlist_command | 명령 유형, 유휴 상태인 경우 Sleep 입니다. |
mysql.threads.processlist_state | 스레드의 현재 작업/상태 |
db.query.text | SQL 문 텍스트 |
mysql.events_statements_current.digest | SHA-256 명령문 다이제스트 |
mysql.events_statements_current.timer_start | 명령문 시작을 표시하는 단조 피코초 카운터 ― 스크랩 주기 전반에 걸쳐 안정적인 실행별 키 |
mysql.events_statements_current.timer_wait | 경과된 실행 시간(초)입니다. |
mysql.events_waits_current.timer_wait | 경과된 대기 시간(초 단위)입니다(events_waits_current 소비자가 필요합니다). |
mysql.wait_event_type | 대기 이벤트 이름(io, lock, synch)에서 파생된 최상위 대기 분류 또는 실제로 대기하지 않는 경우 CPU/User sleep/other 입니다. mysql.wait_event과(와) 쌍을 이룹니다. |
mysql.wait_event | 상세 대기 내역 ― 카테고리 세그먼트가 제거된 대기 이벤트 이름(예: table/sql/handler, mutex/innodb/checkpoint_state) 또는 실제로 대기하지 않는 경우 CPU/User sleep/other 입니다. mysql.wait_event_type와(과) 페어링됩니다. |
mysql.wait_type | 대기 이벤트를 생성한 계측기의 가공되지 않은 원시 이름입니다 ― 구문 분석/분류된 내역은 mysql.wait_event_type / mysql.wait_event을(를) 참조하십시오. |
mysql.session.status | waiting, running 또는 other |
mysql.query_plan / mysql.query_plan.hash | 사용 가능한 경우 쿼리 계획 및 해당 캐시 키 |
mysql.event_id | 이벤트가 시작되었을 때의 스레드+현재 이벤트 번호 |
client.address / client.port | 클라이언트 호스트/포트(포트는 MySQL 8.0.22+에서만 채워지며, 그렇지 않으면 0) |
network.peer.address / network.peer.port | 네트워크 계층 속성과 동일 |
mysql.blocking.blockers | 이 세션의 동시 InnoDB 행 잠금 차단기당 하나씩 있는 {thread_id, session_id} 튜플의 JSON 어레이입니다 — 두 개 이상 존재하는 경우 첫 번째만이 아닙니다. 차단되지 않은 경우 "[]" 이며, 해결되기 전에 연결이 끊어진 경우 차단기의 session_id은(는) null 입니다. |
mysql.blocking.blocker.count | 동시 차단기의 정수 개수입니다. 0은(는) 차단되지 않았음을 의미합니다. |
mysql.session.client_name | session_connect_attrs에서 클라이언트 드라이버가 자체 보고한 ID(예: MySQL Connector/J). 드라이버가 연결 속성을 보내지 않으면 비어 있습니다. |
db.query.comment_tags / .nr_service_guid | APM-상관관계 주석 태그 — (선택 사항) APM-데이터베이스 상관관계 설정을 참조하십시오. |
db.query.text.normalized.hash | 교차 엔진 상관관계를 위한 정규화된 SQL의 MD5 |
팁
!= 0이(가) 아닌 mysql.blocking.blocker.count > 0(으)로 차단을 필터링하십시오 — null != 0은(는) NRQL에서 TRUE을(를) 평가하므로 결과에 차단되지 않은 세션이 조용히 포함될 수 있습니다.
db.server.top_query
가장 많은 실행 시간을 소비하는 쿼리로, MySQL 자체 performance_schema.events_statements_summary_by_digest에 의해 서버 측에서 집계됩니다 ― 샘플 수가 아닌 다이제스트별 실제 실행 카운터입니다. 기본적으로 비활성화되어 있습니다.
| 기인하다 | 설명 |
|---|---|
db.system.name | mysql |
db.query.text | SQL 명령문 텍스트(난독화됨) |
db.namespace | 다이제스트의 SCHEMA_NAME |
mysql.events_statements_summary_by_digest.digest | SHA-256 명령문 다이제스트 |
mysql.events_statements_summary_by_digest.count_star | 명령문이 실행된 횟수로, 누적이 아닌 스크랩당 델타로 보고됩니다. |
mysql.events_statements_summary_by_digest.sum_timer_wait | 총 실행 시간, 델타 초 |
mysql.events_statements_summary_by_digest.sum_rows_examined / .sum_rows_sent | 델타 행 수 ― count_star (으)로 나누면 실행당 평균이 산출됩니다. 이것은 논리적 읽기가 아니라 행 수입니다. |
mysql.query_plan / mysql.query_plan.hash | 사용 가능한 경우 쿼리 계획(EXPLAIN을(를) 통해) ― 실행 계획 수집을 참조하십시오. |
db.query.comment_tags / .nr_service_guid | 동일함 query_sample |
db.query.text.normalized.hash | 동일함 query_sample |
실행 계획 수집
EXPLAIN 리터럴 SQL 명령문이 필요합니다 ― 정규화된 다이제스트 텍스트는 MySQL이 실행할 수 없는 플레이스홀더(SELECT ? FROM t WHERE id = ?)를 사용합니다.
| MySQL 버전 | 플랜 가용성 |
|---|---|
8.0.3+ | 사용 가능 — 다이제스트 요약 테이블의 query_sample_text은(는) 다음을 수행할 실제 문을 보유합니다. EXPLAIN |
5.x, 8.0.0–8.0.2 | 사용할 수 없음 ― 설명할 query_sample_text이(가) 없습니다. |
캡처된 구문이 잘린 경우(...(으)로 끝남) 모든 버전에서 EXPLAIN을(를) 건너뜁니다 — 권장 서버 파라미터를 참조하십시오.
explain_mode | 행동 |
|---|---|
inline (기본) | EXPLAIN FORMAT=json <statement>을(를) 직접 실행합니다 — SELECT전용 워크로드에 충분합니다. |
procedure | 모니터링 사용자에게 DML을 부여하지 않고도 쓰기 구문(UPDATE/DELETE/INSERT/REPLACE)을 설명할 수 있도록 SQL SECURITY DEFINER 프로시저(<schema>.explain_statement)를 통해 라우팅합니다. 프로시저가 누락된 경우 inline (으)로 대체됩니다. 스키마당 일회성 설정 단계가 필요합니다 — 쓰기 구문에 대한 쿼리 계획을 참조하십시오. |
중요
mysql.query_plan 캐싱하기 전에 단일 요소 JSON 어레이로 래핑된 원시 EXPLAIN FORMAT=json 출력이므로 뉴렐릭의 로그 수집이 이를 자동으로 평면화하고 파괴하지 않습니다. 인덱스 [0]을(를) 구문 분석하여 계획 객체를 복구하십시오.
타이머 단위
텔레메트리 유형 | 필드 | 유닛 |
|---|---|---|
로그 이벤트(
,
) |
,
,
| 초 |
메트릭(명령문 이벤트, 테이블/인덱스 I/O 대기, 테이블 잠금 대기) |
단위당: ns | 나노초 |
중요
mysql.events_waits_current.timer_wait 실제 고유한 대기/차단 기간(총 경과 시간이 아님)을 나타내는 유일한 필드입니다 — mysql.wait_event_type / mysql.wait_event (또는 원시 mysql.wait_type)과(와) 함께 사용하십시오.