22.7 Performance Schema Statement Digests
MySQL 5.6.5 현재 성능 스키마는 문 다이제스트 정보를 유지합니다. 다이제스트는 SQL 문을 표준화 형식으로 변환하고 결과의 해시 값을 계산합니다. 정규화하여 유사한 문이 그룹화되어 요약 된 서버가 실행중인 명령문의 종류와 그 발생 빈도에 대한 정보가 공개됩니다. 이 섹션에서는 어떻게 문 정상화가 이루어 어떻게 도움이 될 수 있는지에 대해 설명합니다.
문 다이제스트는 이러한 성능 스키마 구성 요소가 포함됩니다.
setup_consumers
테이블의statement_digest
소비자는 성능 스키마가 요약 정보를 유지할지 여부를 제어합니다.문 이벤트 테이블 (
events_statements_current
,events_statements_history
및events_statements_history_long
)에는 다이제스트 MD5 값과 해당 정규화 된 문 텍스트 문자열을 포함하는DIGEST
및DIGEST_TEXT
열 수 있습니다.events_statements_summary_by_digest
테이블은 집계 된 문 다이제스트 정보를 제공합니다.
문 정규화하여 문 텍스트는 일반 문 구조를 유지하면서 구조에 필요하지 않은 정보를 삭제하는 더 표준화 된 문자열 표현으로 변환됩니다. 데이터베이스 또는 테이블 이름 등의 객체 식별자는 유지됩니다. 값과 댓글은 삭제되고 공백이 조정됩니다. 성능 스키마는 이름, 암호, 날짜 등의 정보를 유지하지 않습니다.
이러한 진술을 고려하십시오.
SELECT * FROM orders WHERE customer_id=10 AND quantity>20 SELECT * FROM orders WHERE customer_id = 20 AND quantity > 100
이 문을 정상화하기 위해 성능 스키마는 데이터 값을 ?
로 대체하고 공백을 조정합니다. 중 하나도 같은 정규화 형식이되기 때문에 "같은"로 간주됩니다.
SELECT * FROM orders WHERE customer_id = ? AND quantity > ?
정규화 된 문은 저장되는 정보는 적지 만 계속 원래의 문을 대표하고 있습니다. 다양한 비교 값을 가지는 기타 유사한 문은 같은 정규화 형식입니다.
여기에서이 문을 고려하십시오.
SELECT * FROM customers WHERE customer_id = 1000 SELECT * FROM orders WHERE customer_id = 1000
이 경우 문은 "같은"은 없습니다. 객체 식별자가 다르기 때문에 문은 다른 정규화 형식입니다.
SELECT * FROM customers WHERE customer_id = ? SELECT * FROM orders WHERE customer_id = ?
정규화 된 문은 고정 길이입니다. DIGEST_TEXT
값의 최대 길이는 1024 바이트입니다. 이 최대를 변경하는 옵션은 없습니다. 정규화에 의해이 길이를 초과 문이 생성 된 경우, 텍스트는 "..."로 끝납니다. "..."뒤의 부분 만 다른 긴 문은 동일한 것으로 간주됩니다. 이러한 진술을 고려하십시오.
SELECT * FROM mytable WHERE cola = 10 AND colb = 20 SELECT * FROM mytable WHERE cola = 10 AND colc = 20
AND
직후 컷오프가 발생하면 모두 문이 정규화 형식입니다.
SELECT * FROM mytable WHERE cola = ? AND ...
이 경우 두 번째 컬럼 이름의 차이가 없어져 두 문장이 동일한 것으로 간주됩니다.
정규화 된 각 문에 대해 성능 스키마는 해시 다이제스트 값을 계산하고 그 값과 문을 문 이벤트 테이블 ( events_statements_current
, events_statements_history
및 events_statements_history_long
)의 DIGEST
및 DIGEST_TEXT
컬럼에 저장합니다. 또한 동일한 SCHEMA_NAME
및 DIGEST
값을 가진 문 정보가 events_statements_summary_by_digest
요약 테이블에 집계됩니다. 성능 스키마는 MD5 해시 값을 사용합니다. 그들은 계산이 빠르고 경쟁을 최소화하는 바람직한 통계적 분포를 가지는 것입니다.
events_statements_summary_by_digest
요약 테이블은 고정 크기이기 때문에 그것이 가득 차면 테이블의 기존 값과 일치하지 않는 SCHEMA_NAME
및 DIGEST
값이있는 문은 SCHEMA_NAME
및 DIGEST
가 NULL
로 설정 된 특별한 행으로 그룹화 된 합니다. 그러면 모든 문이 계산됩니다. 그러나 특별한 행이 실행되는 명령문의 큰 비중을 차지하는 경우 요약 테이블의 크기를 늘리는 것이 바람직 수 있습니다. 이렇게하려면 서버를 시작할 때, performance_schema_digests_size
시스템 변수를 큰 값으로 설정합니다. performance_schema_digests_size
값이 지정되어 있지 않은 경우, 서버는 시작할 때 사용하는 값을 추정합니다. (MySQL 5.6.9 이전에서는 SCHEMA_NAME
컬럼 값이없이 특별한 행 DIGEST
는 NULL
로 설정됩니다.)
문 다이제스트 요약 테이블은 서버에서 실행되는 명령문의 프로필을 제공합니다. 그것은 응용 프로그램이 실행중인 명령문의 종류와 빈도를 나타냅니다. 응용 프로그램 개발자는이 정보를 테이블에있는 다른 정보와 결합하여 사용하여 응용 프로그램의 성능 특성을 평가 할 수 있습니다. 예를 들어, 대기 시간 잠금 시간 또는 인덱스의 사용을 나타내는 테이블 컬럼은 불충분 한 쿼리 유형을 강조 표시 할 수 있습니다. 그러면 개발자가주의가 필요한 응용 프로그램의 부분을 파악할 수 있습니다.