월: 2017 1월

P_S Statement Digest

https://dev.mysql.com/doc/mysql-perfschema-excerpt/5.6/en/statement-summary-tables.html
https://dev.mysql.com/doc/refman/5.6/en/performance-schema-statement-digests.html

기본 구문 이벤트 테이블: events_statements_current, events_statements_history, events_statements_history_long
구문 집계 테이블: events_statements_summary_by_digest

DIGEST_TEXT: 노말라이즈된 구문 요약digest
DIGEST: MD5 해시값

statement_digest P_S 의 consumer가 켜져있으면(setup_consumers 참고), 구문이 끝날때 events_statements_summary_by_digest 집계가 발생
– 막 끝난 구문에 대한 digest 값이 events_statements_summary_by_digest row 에 이미 존재한다면 통계가 그 row 에 집계
– 만약 막 끝난 구문에 대한 digest 값이 있는 row 가 없다면, 그리고 테이블이 full 이 아니라면, 그 구문에 대한 row 가 새로 생성
– 만약 막 끝난 구문에 대한 digest 값이 있는 row 가 없고 테이블이 full 이라면, DIGEST=NULL row 하나에 포함되어 집계

P_S 테이블의 최대 사이즈 때문에 DIGEST=NULL row 가 존재할 수 있음
존재하는 row 와 매칭되지 않는 digest 들은 이 row 에 동일하게 취급되어 카운트됨
COUNT_STAR (집계된 이벤트 숫자) 값이 전체 digest COUNT_STAR 대비 50% 를 넘으면, digest 집계 테이블 정보가 모든 이벤트를 대표한다고 볼 수 없음, 5% 까지 대표한다고 봄

events_statements_summary_by_digest 테이블은 고정된 사이즈를 가짐
사이즈를 늘릴려면 performance_schema_digests_size 시스템변수 값을 조정, 지정하지 않는다면 서버가 알아서 기동시 지정 기본값 -1 (자동)

performance_schema_max_digest_length 시스템 변수는 digest 를 구하기 위한 최대 버퍼 사이즈를 결정
구문 키워드나 리터럴값의 내부 인코딩 때문에 사용 가능한 이 버퍼 사이즈보다 실제 더 길게 digest 가 표기될 수 있음
어플리케이션이 끝부분만 다른 매우 긴 구문을 생성한다면 이 값을 상향하여 집게시 구문을 분리하고 그렇지 않다면 하나의 집계 row에 포함시킬 수 있음
performance_schema_max_digest_length 은 세션별로 메모리가 할당되므로 동시다발적인 많은 센션이 로드를 준다면 높은값은 주의!

https://dev.mysql.com/doc/refman/5.6/en/performance-schema-status-variables.html
– Performance_schema_digest_lost: events_statements_summary_by_digest 테이블에 digest 가 기록되지 못환 횟수, performance_schema_digests_size 가 너무 작아서 발생할 수 있음
– Performance_schema_accounts_lost: accounts 테이블이 full 이라 기록되지 못한 횟수, performance_schema_accounts_size 조정
– Performance_schema_hosts_lost: hosts 테이블이 full 이라 기록되지 못한 횟수, performance_schema_hosts_size 조정

summary 테이블 TRUNCATE 수행 시,
– events_statements_summary_by_digest 는 row 들을 삭제
– account, host, user 로 집계하지않는 다른 summary 테이블들은 row 들을 삭제하는 대신에 summary 컬럼을 0으로 세팅
– account, host, user 로 집계하는 다른 summary 테이블들은 커넥션 이력이 없는 account, host, user 관련 row들을 삭제하고 나머지 존재하는 row 들의 summary 컬럼들을 0으로 세팅
– account, host, user, thread 로 집계되는 각각의 statement summary 테이블들은 연관된 커넥션 테이블(accounts, hosts, users)이나 events_statements_summary_global_by_event_name 의 truncatation 으로 암시적으로 truncate 됨

Advertisements