■ Summary(요약) 테이블
▶︎ objects_summary_global_by_type 테이블
성능 스키마는 개체 대기 이벤트를 집계하기 위해 objects_summary_global_by_type 테이블을 유지합니다.
예제 개체 대기 이벤트 요약 정보 :
mysql> SELECT * FROM performance_schema.objects_summary_global_by_type\G
...
*************************** 3. row ***************************
OBJECT_TYPE: TABLE
OBJECT_SCHEMA: test
OBJECT_NAME: t
COUNT_STAR: 3
SUM_TIMER_WAIT: 263126976
MIN_TIMER_WAIT: 1522272
AVG_TIMER_WAIT: 87708678
MAX_TIMER_WAIT: 258428280
...
*************************** 10. row ***************************
OBJECT_TYPE: TABLE
OBJECT_SCHEMA: mysql
OBJECT_NAME: user
COUNT_STAR: 14
SUM_TIMER_WAIT: 365567592
MIN_TIMER_WAIT: 1141704
AVG_TIMER_WAIT: 26111769
MAX_TIMER_WAIT: 334783032
...
objects_summary_global_by_type 테이블에는 테이블이 이벤트를 집계하는 방법을 나타내는 OBJECT_TYPE, OBJECT_SCHEMA 및 OBJECT_NAME 그룹화 열이 있습니다. 각 행은 주어진 객체에 대한 이벤트를 요약합니다.
objects_summary_global_by_type에는 events_waits_summary_by_xxx 테이블과 동일한 요약 컬럼이 있습니다.
• Tuncate Table 허용 여부.
TRUNCATE TABLE은 오브젝트 요약 테이블에 허용됩니다. 행을 제거하지 않고 요약 열을 0으로 재설정합니다.
▶︎ File I/O Summary(요약) 테이블
성능 스키마는 I/O 작업에 대한 정보를 집계하는 파일I/O 요약 테이블을 유지합니다.
mysql> SELECT * FROM performance_schema.file_summary_by_event_name\G
...
*************************** 2. row ***************************
EVENT_NAME: wait/io/file/sql/binlog
COUNT_STAR: 31
SUM_TIMER_WAIT: 8243784888
MIN_TIMER_WAIT: 0
AVG_TIMER_WAIT: 265928484
MAX_TIMER_WAIT: 6490658832
...
mysql> SELECT * FROM performance_schema.file_summary_by_instance\G
...
*************************** 2. row ***************************
FILE_NAME: /var/mysql/share/english/errmsg.sys
EVENT_NAME: wait/io/file/sql/ERRMSG
EVENT_NAME: wait/io/file/sql/ERRMSG
OBJECT_INSTANCE_BEGIN: 4686193384
COUNT_STAR: 5
SUM_TIMER_WAIT: 13990154448
MIN_TIMER_WAIT: 26349624
AVG_TIMER_WAIT: 2798030607
MAX_TIMER_WAIT: 8150662536
...
각 파일 I / O 요약 테이블에는 테이블이 이벤트를 집계하는 방법을 나타내는 하나 이상의 그룹화 컬럼이 있습니다. 이벤트 이름은 setup_instruments 테이블의 이벤트 장비 이름을 참조합니다.
- file_summary_by_event_name에는 EVENT_NAME 컬럼이 있습니다. 각 행은 주어진 이벤트 이름에 대한 이벤트를 요약합니다.
- file_summary_by_instance에는 FILE_NAME, EVENT_NAME 및 OBJECT_INSTANCE_BEGIN 컬럼이 있습니다. 각 행은 주어진 파일 및 이벤트 이름에 대한 이벤트를 요약합니다.
각 파일 I/O 요약 테이블에는 집계된 값을 포함하는 다음 요약 컬럼이 있습니다. 일부 컬럼은 더 일반적이며 더 세분화된 컬럼 값의 합계와 동일한 값을 갖습니다.
이러한 방식으로 하위 수준 컬럼을 합산하는 사용자 정의보기(user-defined views) 없이도 상위 수준의 집계를 직접 사용할 수 있습니다.
• 주요 컬럼
- COUNT_STAR, SUM_TIMER_WAIT, MIN_TIMER_WAIT, AVG_TIMER_WAIT, MAX_TIMER_WAIT
이러한 컬럼은 모든 I/O 작업을 집계합니다.
- COUNT_READ, SUM_TIMER_READ, MIN_TIMER_READ, AVG_TIMER_READ, MAX_TIMER_READ, SUM_NUMBER_OF_BYTES_READ
이러한 컬럼은 FGETS, FGETC, FREAD 및 READ를 포함한 모든 읽기 작업을 집계합니다.
- COUNT_WRITE, SUM_TIMER_WRITE, MIN_TIMER_WRITE, AVG_TIMER_WRITE, MAX_TIMER_WRITE, SUM_NUMBER_OF_BYTES_WRITE
이러한 컬럼은 FPUTS, FPUTC, FPRINTF, VFPRINTF, FWRITE 및 PWRITE를 포함한 모든 쓰기 작업을 집계합니다.
- COUNT_MISC, SUM_TIMER_MISC, MIN_TIMER_MISC, AVG_TIMER_MISC, MAX_TIMER_MISC
이러한 컬럼은 CREATE, DELETE, OPEN, CLOSE, STREAM_OPEN, STREAM_CLOSE, SEEK, TELL, FLUSH, STAT, FSTAT, CHSIZE, RENAME 및 SYNC를 포함한 다른 모든 I/O 작업을 집계합니다. 이러한 작업에는 바이트 수가 없습니다.
• Tuncate Table 허용 여부.
TRUNCATE TABLE은 파일 I / O 요약 테이블에 허용됩니다. 행을 제거하지 않고 요약 열을 0으로 재설정합니다.
MySQL 서버는 파일에서 읽은 정보를 캐싱하여 I/O 작업을 방지하기 위해 여러 기술을 사용하므로 I/O 이벤트를 발생시킬 것으로 예상되는 명령문이 그렇게하지 않을 수 있습니다.
캐시를 플러시하거나 서버를 다시 시작하여 상태를 재설정하여 I/O가 발생하는지 확인할 수 있습니다.
▶︎ table_io_waits_summary_by_table 테이블
table_io_waits_summary_by_table 테이블은 wait/io/table/sql/handler 계측기에서 생성 된대로 모든 테이블 I/O 대기 이벤트를 집계합니다. 그룹화는 테이블 기준입니다.
table_io_waits_summary_by_table 테이블에는 테이블이 이벤트를 집계하는 방법을 나타내는 OBJECT_TYPE, OBJECT_SCHEMA 및 OBJECT_NAME과 같은 그룹화 컬럼이 있습니다.
이러한 컬럼은 events_waits_current 테이블에서와 동일한 의미를 갖습니다. 행이 적용되는 테이블을 식별합니다.
table_io_waits_summary_by_table에는 집계된 값을 포함하는 다음 요약 컬럼이 있습니다. 컬럼 설명에 표시된대로 일부 컬럼은 더 일반적이며 더 세분화된 컬럼값의 합계와 동일한 값을 갖습니다.
예를 들어 모든 쓰기를 집계하는 컬럼에는 삽입, 업데이트 및 삭제를 집계하는 해당 컬럼의 합계가 포함됩니다. 이러한 방식으로 하위 수준 열을 합산하는 사용자 정의보기 없이도 상위 수준의 집계를 직접 사용할 수 있습니다.
• 주요 컬럼
- COUNT_STAR, SUM_TIMER_WAIT, MIN_TIMER_WAIT, AVG_TIMER_WAIT, MAX_TIMER_WAIT
이러한 컬럼은 모든 I/O 작업을 집계합니다. 해당하는 xxx_READ 및 xxx_WRITE 컬럼의 합계와 동일합니다.
- COUNT_READ, SUM_TIMER_READ, MIN_TIMER_READ, AVG_TIMER_READ, MAX_TIMER_READ
이러한 컬럼은 모든 읽기 작업을 집계합니다. 해당 xxx_FETCH 열의 합계와 동일합니다.
- COUNT_WRITE, SUM_TIMER_WRITE, MIN_TIMER_WRITE, AVG_TIMER_WRITE, MAX_TIMER_WRITE
이러한 컬럼은 모든 쓰기 작업을 집계합니다. 해당하는 xxx_INSERT, xxx_UPDATE 및 xxx_DELETE컬럼의 합계와 동일합니다.
- COUNT_FETCH, SUM_TIMER_FETCH, MIN_TIMER_FETCH, AVG_TIMER_FETCH, MAX_TIMER_FETCH
이러한 컬럼은 모든 가져 오기 작업을 집계합니다.
- COUNT_INSERT, SUM_TIMER_INSERT, MIN_TIMER_INSERT, AVG_TIMER_INSERT, MAX_TIMER_INSERT
이러한 컬럼은 모든 삽입 작업을 집계합니다.
- COUNT_UPDATE, SUM_TIMER_UPDATE, MIN_TIMER_UPDATE, AVG_TIMER_UPDATE, MAX_TIMER_UPDATE
이러한 컬럼은 모든 업데이트 작업을 집계합니다.
- COUNT_DELETE, SUM_TIMER_DELETE, MIN_TIMER_DELETE, AVG_TIMER_DELETE, MAX_TIMER_DELETE
이러한 컬럼은 모든 삭제 작업을 집계합니다.
• Tuncate Table 허용 여부.
TRUNCATE TABLE은 테이블 I/O 요약 테이블에 허용됩니다. 행을 제거하지 않고 요약 열을 0으로 재설정합니다.
이 테이블을 자르면 table_io_waits_summary_by_index_usage 테이블도 잘립니다.
▶︎ table_io_waits_summary_by_index_usage 테이블
table_io_waits_summary_by_index_usage 테이블은 wait/io/table/sql/handler 계측기에서 생성된대로 모든 테이블 인덱스 I/O 대기 이벤트를 집계합니다. 그룹화는 테이블 인덱스를 기준으로합니다.
table_io_waits_summary_by_index_usage의 컬럼은 table_io_waits_summary_by_table과 거의 동일합니다. 유일한 차이점은 테이블 I/O 대기 이벤트가 기록될 때 사용된 인덱스의 이름에 해당하는 추가 그룹 열인 INDEX_NAME입니다.
- PRIMARY 값은 테이블 I / O가 기본 인덱스를 사용했음을 나타냅니다.
- NULL 값은 테이블 I / O가 인덱스를 사용하지 않았 음을 의미합니다.
- 삽입은 INDEX_NAME = NULL에 대해 계산됩니다.
• Tuncate Table 허용 여부.
TRUNCATE TABLE은 테이블 I / O 요약 테이블에 허용됩니다. 행을 제거하지 않고 요약 열을 0으로 재설정합니다. 이 테이블은 table_io_waits_summary_by_table 테이블이 잘려서 잘립니다.
테이블의 인덱스 구조를 변경하는 DDL 작업으로 인해 인덱스별 통계가 재설정될 수 있습니다.
▶︎ table_lock_waits_summary_by_table 테이블
table_lock_waits_summary_by_table 테이블은 wait/lock/table/sql/handler 계측기에서 생성 된대로 모든 테이블 잠금 대기 이벤트를 집계합니다. 그룹화는 테이블 기준입니다.
이 테이블에는 내부 및 외부 잠금에 대한 정보가 포함되어 있습니다.
• 내부 잠금은 SQL 계층의 잠금에 해당합니다. 이것은 현재 thr_lock()에 대한 호출로 구현됩니다. 이벤트 행에서 이러한 잠금은 다음 값 중 하나가있는 OPERATION 컬럼으로 구분됩니다.
read normal
read with shared locks
read high priority
read no insert
write allow write
write concurrent insert
write delayed
write low priority
write normal
• 외부 잠금은 스토리지 엔진 계층의 잠금에 해당합니다. 이것은 현재 handler::external_lock()에 대한 호출로 구현됩니다. 이벤트 행에서 이러한 잠금은 다음값 중 하나가 있는 OPERATION컬럼으로 구분됩니다.
read external
write external
table_lock_waits_summary_by_table 테이블에는 테이블이 이벤트를 집계하는 방법을 나타내는 OBJECT_TYPE, OBJECT_SCHEMA 및 OBJECT_NAME과 같은 그룹화 컬럼이 있습니다. 이러한 컬럼은 events_waits_current 테이블에서와 동일한 의미를 갖습니다. 행이 적용되는 테이블을 식별합니다.
table_lock_waits_summary_by_table에는 집계된 값을 포함하는 다음 요약 컬럼이 있습니다. 컬럼 설명에 표시된대로 일부 컬럼은 더 일반적이며 더 세분화된 컬럼값의 합계와 동일한 값을 갖습니다. 예를 들어 모든 잠금을 집계하는 컬럼은 읽기 및 쓰기 잠금을 집계하는 해당 컬럼의 합계를 보유합니다. 이러한 방식으로 하위 수준 컬럼을 합산하는 사용자 정의보기 없이도 상위 수준의 집계를 직접 사용할 수 있습니다.
- COUNT_STAR, SUM_TIMER_WAIT, MIN_TIMER_WAIT, AVG_TIMER_WAIT, MAX_TIMER_WAIT
이러한 컬럼은 모든 잠금 작업을 집계합니다. 해당하는 xxx_READ 및 xxx_WRITE 열의 합계와 동일합니다.
- COUNT_READ, SUM_TIMER_READ, MIN_TIMER_READ, AVG_TIMER_READ, MAX_TIMER_READ
이러한 컬럼은 모든 읽기 잠금 작업을 집계합니다. 해당하는 xxx_READ_NORMAL, xxx_READ_WITH_SHARED_LOCKS, xxx_READ_HIGH_PRIORITY 및 xxx_READ_NO_INSERT 열의 합계와 동일합니다.
- COUNT_WRITE, SUM_TIMER_WRITE, MIN_TIMER_WRITE, AVG_TIMER_WRITE, MAX_TIMER_WRITE
이러한 컬럼은 모든 쓰기 잠금 작업을 집계합니다. 해당하는 xxx_WRITE_ALLOW_WRITE, xxx_WRITE_CONCURRENT_INSERT, xxx_WRITE_LOW_PRIORITY 및 xxx_WRITE_NORMAL 열의 합계와 동일합니다.
- COUNT_READ_NORMAL, SUM_TIMER_READ_NORMAL, MIN_TIMER_READ_NORMAL, AVG_TIMER_READ_NORMAL, MAX_TIMER_READ_NORMAL
이러한 컬럼은 내부 읽기 잠금을 집계합니다.
- COUNT_READ_WITH_SHARED_LOCKS, SUM_TIMER_READ_WITH_SHARED_LOCKS, MIN_TIMER_READ_WITH_SHARED_LOCKS, AVG_TIMER_READ_WITH_SHARED_LOCKS, MAX_TIMER_READ_WITH_SHARED_LOCKS
이러한 컬럼은 내부 읽기 잠금을 집계합니다.
- COUNT_READ_HIGH_PRIORITY, SUM_TIMER_READ_HIGH_PRIORITY, MIN_TIMER_READ_HIGH_PRIORITY, AVG_TIMER_READ_HIGH_PRIORITY, MAX_TIMER_READ_HIGH_PRIORITY
이러한 컬럼은 내부 읽기 잠금을 집계합니다.
- COUNT_READ_NO_INSERT, SUM_TIMER_READ_NO_INSERT, MIN_TIMER_READ_NO_INSERT, AVG_TIMER_READ_NO_INSERT, MAX_TIMER_READ_NO_INSERT
이러한 컬럼은 내부 읽기 잠금을 집계합니다.
- COUNT_READ_EXTERNAL, SUM_TIMER_READ_EXTERNAL, MIN_TIMER_READ_EXTERNAL, AVG_TIMER_READ_EXTERNAL, MAX_TIMER_READ_EXTERNAL
이러한 컬럼은 외부 읽기 잠금을 집계합니다.
- COUNT_WRITE_ALLOW_WRITE, SUM_TIMER_WRITE_ALLOW_WRITE, MIN_TIMER_WRITE_ALLOW_WRITE, AVG_TIMER_WRITE_ALLOW_WRITE, MAX_TIMER_WRITE_ALLOW_WRITE
이러한 컬럼은 내부 쓰기 잠금을 집계합니다.
- COUNT_WRITE_CONCURRENT_INSERT, SUM_TIMER_WRITE_CONCURRENT_INSERT, MIN_TIMER_WRITE_CONCURRENT_INSERT, AVG_TIMER_WRITE_CONCURRENT_INSERT, MAX_TIMER_WRITE_CONCURRENT_INSERT
이러한 컬럼은 내부 쓰기 잠금을 집계합니다.
- COUNT_WRITE_LOW_PRIORITY, SUM_TIMER_WRITE_LOW_PRIORITY, MIN_TIMER_WRITE_LOW_PRIORITY, AVG_TIMER_WRITE_LOW_PRIORITY, MAX_TIMER_WRITE_LOW_PRIORITY
이러한 컬럼은 내부 쓰기 잠금을 집계합니다.
- COUNT_WRITE_NORMAL, SUM_TIMER_WRITE_NORMAL, MIN_TIMER_WRITE_NORMAL, AVG_TIMER_WRITE_NORMAL, MAX_TIMER_WRITE_NORMAL
이러한 컬럼은 내부 쓰기 잠금을 집계합니다.
- COUNT_WRITE_EXTERNAL, SUM_TIMER_WRITE_EXTERNAL, MIN_TIMER_WRITE_EXTERNAL, AVG_TIMER_WRITE_EXTERNAL, MAX_TIMER_WRITE_EXTERNAL
이러한 컬럼은 외부 쓰기 잠금을 집계합니다.
• Tuncate Table 허용 여부.
TRUNCATE TABLE은 테이블 잠금 요약 테이블에 허용됩니다. 행을 제거하지 않고 요약 열을 0으로 재설정합니다.
▶︎ Socket Summary 테이블
다음 소켓 요약 테이블은 소켓 작업에 대한 타이머 및 바이트 수 정보를 집계합니다.
- socket_summary_by_event_name : 소켓 계측기 당 모든 소켓 I/O 작업에 대해 wait/io/socket/* 계측기에서 생성한 집계 타이머 및 바이트 수 통계입니다.
- socket_summary_by_instance : 소켓 인스턴스 당 모든 소켓 I/O 작업에 대해 wait/io/socket/* 계측기에서 생성한 집계 타이머 및 바이트 수 통계. 연결이 종료되면 해당하는 socket_summary_by_instance의 행이 삭제됩니다.
소켓 요약 테이블은 소켓이 클라이언트의 다음 요청을 기다리는 동안 유휴 이벤트에 의해 생성된 대기를 집계하지 않습니다. 유휴 이벤트 집계의 경우 대기 이벤트 요약 테이블을 사용합니다.
각 소켓 요약 테이블에는 테이블이 이벤트를 집계하는 방법을 나타내는 하나 이상의 그룹화 컬럼이 있습니다. 이벤트 이름은 setup_instruments 테이블의 이벤트 장비 이름을 참조합니다.
- socket_summary_by_event_name에는 EVENT_NAME 컬럼이 있습니다. 각 행은 주어진 이벤트 이름에 대한 이벤트를 요약합니다.
- socket_summary_by_instance에는 OBJECT_INSTANCE_BEGIN 열이 있습니다. 각 행은 주어진 개체에 대한 이벤트를 요약합니다.
각 소켓 요약 테이블에는 집계된 값을 포함하는 다음 요약 컬럼이 있습니다.
- COUNT_STAR, SUM_TIMER_WAIT, MIN_TIMER_WAIT, AVG_TIMER_WAIT, MAX_TIMER_WAIT
모든 작업을 집계합니다.
- COUNT_READ, SUM_TIMER_READ, MIN_TIMER_READ, AVG_TIMER_READ, MAX_TIMER_READ, SUM_NUMBER_OF_BYTES_READ
모든 수신 작업 (RECV, RECVFROM 및 RECVMSG)을 집계합니다.
- COUNT_WRITE, SUM_TIMER_WRITE, MIN_TIMER_WRITE, AVG_TIMER_WRITE, MAX_TIMER_WRITE, SUM_NUMBER_OF_BYTES_WRITE
모든 보내기 작업 (SEND, SENDTO 및 SENDMSG)을 집계합니다.
- COUNT_MISC, SUM_TIMER_MISC, MIN_TIMER_MISC, AVG_TIMER_MISC, MAX_TIMER_MISC
CONNECT, LISTEN, ACCEPT, CLOSE 및 SHUTDOWN과 같은 다른 모든 소켓 작업을 집계합니다. 이러한 작업에는 바이트 수가 없습니다.
socket_summary_by_instance 테이블에는 소켓의 클래스를 나타내는 EVENT_NAME 열도 있습니다.
client_connection, server_tcpip_socket, server_unix_socket.
이 컬럼을 그룹화하여 예를 들어 클라이언트 활동을 서버 수신 소켓의 활동과 분리할 수 있습니다.
TRUNCATE TABLE은 소켓 요약 테이블에 허용됩니다. events_statements_summary_by_digest를 제외하고 tt는 행을 제거하지 않고 요약 컬럼을 0으로 재설정합니다.
▶︎ Memory Summary 테이블
성능 스키마는 메모리 사용량을 계측하고 다음 요인에 따라 자세히 설명 된 메모리 사용량 통계를 집계합니다.
- 사용 된 메모리 유형 (다양한 캐시, 내부 버퍼 등)
- 메모리 작업을 간접적으로 수행하는 스레드, 계정, 사용자, 호스트
성능 스키마는 다음과 같은 메모리 사용 측면을 측정합니다.
- 사용 된 메모리 크기
- 작업 수
- 저수위 및 고수위
메모리 크기는 서버의 메모리 소비를 이해하거나 조정하는 데 도움이됩니다.
작업 수는 서버가 성능에 영향을주는 메모리 할당 자에 가하는 전반적인 압력을 이해하거나 조정하는 데 도움이됩니다. 단일 바이트를 백만 번 할당하는 것은 한 번에 백만 바이트를 할당하는 것과 같지 않습니다. 크기와 개수를 모두 추적하면 차이가 드러날 수 있습니다.
로우 워터 마크와 하이 워터 마크는 워크로드 급증, 전체 워크로드 안정성 및 가능한 메모리 누수를 감지하는 데 중요합니다.
메모리 이벤트에는 시간이 지정되지 않으므로 메모리 요약 테이블에는 시간 정보가 포함되지 않습니다.
메모리 사용량 데이터 수집에 대한 자세한 내용은 메모리 계측 동작을 참조하십시오.
메모리 이벤트 요약 정보의 예 :
mysql> SELECT *
FROM performance_schema.memory_summary_global_by_event_name
WHERE EVENT_NAME = 'memory/sql/TABLE'\G
*************************** 1. row ***************************
EVENT_NAME: memory/sql/TABLE
COUNT_ALLOC: 1381
COUNT_FREE: 924
SUM_NUMBER_OF_BYTES_ALLOC: 2059873
SUM_NUMBER_OF_BYTES_FREE: 1407432
LOW_COUNT_USED: 0
CURRENT_COUNT_USED: 457
HIGH_COUNT_USED: 461
LOW_NUMBER_OF_BYTES_USED: 0
CURRENT_NUMBER_OF_BYTES_USED: 652441
HIGH_NUMBER_OF_BYTES_USED: 669269
각 메모리 요약 테이블에는 테이블이 이벤트를 집계하는 방법을 나타내는 하나 이상의 그룹화 열이 있습니다. 이벤트 이름은 setup_instruments 테이블의 이벤트 장비 이름을 참조합니다.
- memory_summary_by_account_by_event_name에는 USER, HOST 및 EVENT_NAME 열이 있습니다. 각 행은 지정된 계정 (사용자 및 호스트 조합) 및 이벤트 이름에 대한 이벤트를 요약합니다.
- memory_summary_by_host_by_event_name에는 HOST 및 EVENT_NAME 열이 있습니다. 각 행은 지정된 호스트 및 이벤트 이름에 대한 이벤트를 요약합니다.
- memory_summary_by_thread_by_event_name에는 THREAD_ID 및 EVENT_NAME 열이 있습니다. 각 행은 주어진 스레드 및 이벤트 이름에 대한 이벤트를 요약합니다.
- memory_summary_by_user_by_event_name에는 USER 및 EVENT_NAME 열이 있습니다. 각 행은 주어진 사용자 및 이벤트 이름에 대한 이벤트를 요약합니다.
- memory_summary_global_by_event_name에는 EVENT_NAME 열이 있습니다. 각 행은 주어진 이벤트 이름에 대한 이벤트를 요약합니다.
각 메모리 요약 테이블에는 집계된 값이 포함된 다음 요약 컬럼이 있습니다.
- COUNT_ALLOC, COUNT_FREE
메모리 할당 및 메모리 프리 함수에 대한 총 호출 수입니다.
- SUM_NUMBER_OF_BYTES_ALLOC, SUM_NUMBER_OF_BYTES_FREE
할당 및 해제된 메모리 블록의 집계 된 크기입니다.
- CURRENT_COUNT_USED
아직 해제되지 않은 현재 할당된 블록의 집계 수입니다. COUNT_ALLOC − COUNT_FREE와 같은 편리한 컬럼입니다.
- CURRENT_NUMBER_OF_BYTES_USED
아직 해제되지 않은 현재 할당된 메모리 블록의 집계된 크기입니다. SUM_NUMBER_OF_BYTES_ALLOC − SUM_NUMBER_OF_BYTES_FREE와 같은 편의 컬럼입니다.
- LOW_COUNT_USED, HIGH_COUNT_USED
CURRENT_COUNT_USED 열에 해당하는 최저 및 최고 수위 표시.
- LOW_NUMBER_OF_BYTES_USED, HIGH_NUMBER_OF_BYTES_USED
CURRENT_NUMBER_OF_BYTES_USED 컬럼에 해당하는 최저 및 최고 수위 표시.
- TRUNCATE TABLE은 메모리 요약 테이블에 허용됩니다. 다음과 같은 효과가 있습니다.
일반적으로 잘림은 통계 기준을 재설정하지만 서버 상태를 변경하지는 않습니다. 즉, 메모리 테이블을 잘라도 메모리가 해제되지 않습니다.
- COUNT_ALLOC 및 COUNT_FREE는 각 카운터를 동일한 값으로 줄임으로써 새 기준으로 재설정됩니다.
마찬가지로 SUM_NUMBER_OF_BYTES_ALLOC 및 SUM_NUMBER_OF_BYTES_FREE는 새 기준으로 재설정됩니다.
- LOW_COUNT_USED 및 HIGH_COUNT_USED가 CURRENT_COUNT_USED로 재설정됩니다.
LOW_NUMBER_OF_BYTES_USED 및 HIGH_NUMBER_OF_BYTES_USED가 CURRENT_NUMBER_OF_BYTES_USED로 재설정됩니다.
또한 계정, 호스트, 사용자 또는 스레드별로 집계 된 각 메모리 요약 테이블은 종속 된 연결 테이블의 절단 또는 memory_summary_global_by_event_name의 절단에 의해 내재적으로 절단됩니다.
• 설정방법
mysql> select *
-> from performance_schema.setup_instruments
-> WHERE NAME LIKE 'memory/%';
+--------------------------------------------------------------------------------+---------+-------+
| NAME | ENABLED | TIMED |
+--------------------------------------------------------------------------------+---------+-------+
| memory/performance_schema/mutex_instances | YES | NO |
| memory/performance_schema/rwlock_instances | YES | NO |
| memory/performance_schema/cond_instances | YES | NO |
| memory/performance_schema/file_instances | YES | NO |
| memory/performance_schema/socket_instances | YES | NO |
| memory/performance_schema/metadata_locks | YES | NO |
| memory/performance_schema/file_handle | YES | NO |
| memory/performance_schema/accounts | YES | NO |
......
| memory/partition/ha_partition::engine_array | NO | NO |
| memory/partition/ha_partition::part_ids | NO | NO |
| memory/sql/tz_storage | NO | NO |
| memory/sql/servers_cache | NO | NO |
| memory/sql/udf_mem | NO | NO |
+--------------------------------------------------------------------------------+---------+-------+
다음과 같은 계측기들이 있습니다. 원하는 계측기에 ENABLED 컬럼을 YES, 타이머 정보까지 원한다면 TIMED컬럼을 YES로 변경합니다.
메모리 계측기의 경우 메모리 작업이 시간 제한되지 않기 때문에 setup_instruments의 TIMED 컬럼이 무시됩니다.
서버의 스레드가 계측된 메모리 할당을 실행하면 다음 규칙이 적용됩니다.
- 스레드가 계측되지 않았거나 메모리 계측기가 활성화되지 않은 경우 할당 된 메모리 블록이 계측되지 않습니다.
- 그렇지 않으면 (즉, 스레드와 계측기가 모두 활성화 됨) 할당 된 메모리 블록이 계측됩니다.
할당 해제의 경우 다음 규칙이 적용됩니다.
- 메모리 할당 작업이 계측 된 경우 현재 계측기 또는 스레드 활성화 상태에 관계없이 해당 사용 가능한 작업이 계측됩니다.
- 메모리 할당 작업이 계측되지 않은 경우 현재 계측기 또는 스레드 활성화 상태에 관계없이 해당 사용 가능 작업이 계측되지 않습니다.
스레드 별 통계의 경우 다음 규칙이 적용됩니다.
크기 N의 계측 된 메모리 블록이 할당되면 성능 스키마는 메모리 요약 테이블 열을 다음과 같이 업데이트합니다.
- COUNT_ALLOC : 1 증가
- CURRENT_COUNT_USED : 1 증가
- HIGH_COUNT_USED : CURRENT_COUNT_USED가 새로운 최대 값 인 경우 증가
- SUM_NUMBER_OF_BYTES_ALLOC : N 증가
- CURRENT_NUMBER_OF_BYTES_USED : N 증가
- HIGH_NUMBER_OF_BYTES_USED : CURRENT_NUMBER_OF_BYTES_USED가 새로운 최대 값 인 경우 증가
계측된 메모리 블록이 할당 해제되면 성능 스키마는 메모리 요약 테이블 열을 다음과 같이 업데이트합니다.
- COUNT_FREE : 1 증가
- CURRENT_COUNT_USED : 1 감소
- LOW_COUNT_USED : CURRENT_COUNT_USED가 새로운 최소값 인 경우 감소
- SUM_NUMBER_OF_BYTES_FREE : N 증가
- CURRENT_NUMBER_OF_BYTES_USED : N 감소
- LOW_NUMBER_OF_BYTES_USED : CURRENT_NUMBER_OF_BYTES_USED가 새로운 최소값이면 감소합니다.
상위 레벨 집계 (글로벌, 계정, 사용자, 호스트 별)의 경우 낮은 워터 마크와 높은 워터 마크에 대해 예상대로 동일한 규칙이 적용됩니다.
- LOW_COUNT_USED 및 LOW_NUMBER_OF_BYTES_USED는 더 낮은 추정치입니다. 성능 스키마에 의해보고되는 값은 런타임에 효과적으로 사용되는 메모리의 최소 개수 또는 크기보다 작거나 같아야합니다.
- HIGH_COUNT_USED 및 HIGH_NUMBER_OF_BYTES_USED가 더 높은 추정치입니다. 성능 스키마에 의해보고 된 값은 런타임에 효과적으로 사용되는 메모리의 최대 개수 또는 크기보다 크거나 같도록 보장됩니다.
memory_summary_global_by_event_name 이외의 요약 테이블에서 더 낮은 추정값의 경우 메모리 소유권이 스레드간에 전송되면 값이 음수가 될 수 있습니다.
다음은 추정 계산의 예입니다. 그러나 예상 구현은 변경될 수 있습니다.
스레드 1은 memory_summary_by_thread_by_event_name 테이블의 LOW_NUMBER_OF_BYTES_USED 및 HIGH_NUMBER_OF_BYTES_USED 컬럼에 보고 된대로 실행 중에 1MB에서 2MB 범위의 메모리를 사용합니다.
스레드 2는 마찬가지로 보고된 것처럼 실행 중에 10MB에서 12MB 범위의 메모리를 사용합니다.
이 두 스레드가 동일한 사용자 계정에 속하면 계정별 요약에서 이 계정이 11MB에서 14MB 범위의 메모리를 사용했다고 추정합니다. 즉, 상위 레벨 집계에 대한 LOW_NUMBER_OF_BYTES_USED는 각 LOW_NUMBER_OF_BYTES_USED (최악의 경우 가정)의 합계입니다.
마찬가지로 상위 레벨 집계의 HIGH_NUMBER_OF_BYTES_USED는 각 HIGH_NUMBER_OF_BYTES_USED (최악의 경우 가정)의 합계입니다.
11MB는 두 스레드가 동시에 낮은 사용량 표시에 도달 한 경우에만 발생할 수있는 더 낮은 추정치입니다.
14MB는 두 스레드가 동시에 높은 사용량 표시에 도달 한 경우에만 발생할 수있는 더 높은 추정치입니다.
이 계정의 실제 메모리 사용량은 11.5MB에서 13.5MB 사이 일 수 있습니다.
용량 계획의 경우 최악의 경우를 보고하는 것이 실제로 바람직한 동작입니다. 일반적으로 세션이 서로 관련이 없을때 발생할 수 있는 일을 보여주기 때문입니다.
▶︎ Status Variable Summary 테이블
성능 스키마는 테이블에서 상태 변수 정보를 사용할 수 있도록 합니다. 또한 여기에 설명 된 요약 테이블에서 집계 된 상태 변수 정보를 사용할 수 있습니다.
각 상태 변수 요약 테이블에는 테이블이 상태 값을 집계하는 방법을 나타내는 하나 이상의 그룹화 컬럼이 있습니다.
- status_by_account에는 계정별로 상태 변수를 요약하는 USER, HOST 및 VARIABLE_NAME 열이 있습니다.
- status_by_host에는 클라이언트가 연결된 호스트 별 상태 변수를 요약하는 HOST 및 VARIABLE_NAME 열이 있습니다.
- status_by_user에는 클라이언트 사용자 이름별로 상태 변수를 요약하는 USER 및 VARIABLE_NAME 열이 있습니다.
각 상태 변수 요약 테이블에는 집계 된 값이 포함 된 다음 요약 열이 있습니다.
- VARIABLE_VALUE
활성 및 종료 된 세션에 대한 집계 된 상태 변수 값입니다.
이 테이블에서 계정(account)의 의미는 사용자 및 호스트 값의 조합을 의미한다는 점에서 mysql 시스템 데이터베이스에있는 MySQL 부여 테이블의 의미와 유사합니다.
grant 테이블의 경우 계정의 호스트 부분이 패턴이 될 수 있는 반면 성능 스키마 테이블의 경우 호스트 값이 항상 특정 비 패턴 호스트 이름이라는 점이 다릅니다.
세션이 종료되면 계정(account) 상태가 수집됩니다. 세션 상태 카운터는 전역 상태 카운터와 해당 계정 상태 카운터에 추가됩니다.
계정 통계가 수집되지 않은 경우 호스트 및 사용자 상태가 수집되면 세션 상태가 호스트 및 사용자 상태에 추가됩니다.
performance_schema_accounts_size, performance_schema_hosts_size 및 performance_schema_users_size 시스템 변수가 각각 0으로 설정된 경우 계정, 호스트 및 사용자 통계가 수집되지 않습니다.
성능 스키마는 다음과 같이 상태 변수 요약 테이블에 대해 TRUNCATE TABLE을 지원합니다. 모든 경우에 활성 세션의 상태는 영향을받지 않습니다.
- status_by_account : 종료 된 세션에서 사용자 및 호스트 상태까지 계정 상태를 집계 한 다음 계정 상태를 재설정합니다.
- status_by_host : 종료 된 세션에서 집계 된 호스트 상태를 재설정합니다.
- status_by_user : 종료 된 세션에서 집계 된 사용자 상태를 재설정합니다.
FLUSH STATUS는 모든 활성 세션의 세션 상태를 전역 상태 변수에 추가하고 모든 활성 세션의 상태를 재설정하며 연결이 끊긴 세션에서 집계 된 계정, 호스트 및 사용자 상태 값을 재설정합니다.
▣ Performance Schema 목차.
[MySQL] Performance Schema 소개 및 사용방법
[MySQL] Performance Schema 상태 모니터링
[MySQL] Performance Schema 설정 테이블 - Setup 및 Instance 테이블
[MySQL] Performance Schema 모니터링 테이블 - Wait Event 및 Lock 테이블
[MySQL] Performance Schema 모니터링 테이블 - Stage Event 테이블
[MySQL] Performance Schema 모니터링 테이블 - Statement Event 테이블
[MySQL] Performance Schema 모니터링 테이블 - Transaction 테이블
[MySQL] Performance Schema 모니터링 테이블 - Connection 및 Connection Attribute 테이블
[MySQL] Performance Schema 모니터링 테이블 - User, 시스템, 상태 및 기타 테이블
[MySQL] Performance Schema 모니터링 테이블 - Summary(요약) 테이블
[MySQL] Performance Schema 모니터링 테이블 - Replication 테이블
'Databases > MySQL' 카테고리의 다른 글
[MySQL] InnoDB에서 Alter Table되는 진행상황을 Peformance Schema를 이용하여 모니터링 하기 (0) | 2021.01.26 |
---|---|
[MySQL] Performance Schema 모니터링 테이블 - Replication 테이블 (2) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - User, 시스템, 상태 및 기타 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Connection 및 Connection Attribute 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Transaction 테이블 (0) | 2021.01.24 |