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.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으로 나누면 실행당 평균을 얻을 수 있습니다. 이는 논리적 읽기가 아니라 행 수입니다. |
db.query.comment_tags / .nr_service_guid | 동일함 query_sample |
db.query.text.normalized.hash | 동일함 query_sample |
db.server.query_plan
명령문에 대한 실행 계획으로, 계획이 top_query/query_sample의 자체 통계와 독립적으로 필터링, 라우팅 또는 삭제될 수 있도록 자체 이벤트로 보고됩니다. db.server.top_query 또는 db.server.query_sample 중 하나 이상도 활성화되어야 합니다. 활성화되면 mysql.query_plan는 더 이상 db.server.top_query/db.server.query_sample 레코드에 포함되지 않습니다. EXPLAIN 메커니즘에 대해서는 실행 계획 수집을 참조하십시오.
| 기인하다 | 설명 |
|---|---|
db.system.name | mysql |
db.namespace | 쿼리의 기본 데이터베이스/스키마입니다. 쿼리 샘플에서는 스레드의 현재 데이터베이스(processlist_db)이며, 상위 쿼리에서는 다이제스트의 SCHEMA_NAME입니다. 기본 데이터베이스가 선택되지 않은 경우 비어 있습니다. |
mysql.query_plan.hash | 설계상 mysql.events_statements_summary_by_digest.digest (쿼리 다이제스트)과 동일한 값으로 설정됩니다 |
mysql.query_plan.source | 플랜이 보고된 이벤트(db.server.top_query 또는 db.server.query_sample)로, 소스 이벤트별로 플랜을 라우팅하거나 삭제할 수 있습니다. |
mysql.query_plan | 사용 가능한 경우 명령문에 대한 쿼리 계획입니다. |
실행 계획 수집
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)와(과) 함께 사용하십시오.