■ Setup Tables
setup_actors : 새로운 포그라운드 스레드(foreground threads : 접속 클라이언트 혹은 서버)에 대한 모니터링을 초기화하는 방법
setup_consumers : 이벤트 정보를 보내고 저장할 수 있는 대상
setup_instruments : 이벤트를 수집 할 수있는 계측된 개체의 클래스
setup_objects : 모니터링해야하는 개체
setup_timers : 현재 이벤트 타이머
■ Instance Tables
▶︎ cond_instances 테이블 : 조건 동기화 개체 인스턴스
cond_instances 테이블은 서버가 실행되는 동안 성능 스키마에 표시되는 모든 조건을 나열합니다. 조건은 특정 이벤트가 발생했음을 알리기 위해 코드에서 사용되는 동기화 메커니즘으로,
이 조건을 기다리는 스레드가 작업을 재개 할 수 있습니다.
스레드가 어떤 일이 발생하기를 기다리고있을 때 조건 이름은 스레드가 무엇을 기다리고 있는지를 나타내지만 어떤 다른 스레드가 조건을 발생시키는 지 즉시 알 수있는 방법은 없습니다.
계측기(setup_instruments 테이블)에서 설정한 계측기와 관련이 있습니다.
계측기는 wait/synch/cond/* 로 시작합니다.
• Tuncate Table 허용 여부
truncate Table문은 안됩니다.
▶︎ file_instances 테이블 : 파일 인스턴스
파일 I/O 계측을 실행할 때 성능 스키마에 표시되는 모든 파일을 나열합니다. 디스크의 파일이 열리지 않은 경우 file_instances에 없습니다.
디스크에서 파일이 삭제되면 file_instances 테이블에서도 제거됩니다.
파일이 현재 열린 핸들 수입니다. 파일을 오픈 후 닫았다면 1 번 열렸지만 OPEN_COUNT는 0입니다. 즉 현재 과거에 열린 핸들수가 아니라 현재 열린 핸들수 입니다.
현재 서버에서 열린 파일을 모두 나열하려면 WHERE OPEN_COUNT> 0을 사용합니다.
계측기(setup_instruments 테이블)에서 설정한 계측기와 관련이 있습니다.
계측기는 wait/io/file/* 로 시작합니다.
• Tuncate Table 허용 여부
truncate Table문은 안됩니다.
▶︎ mutex_instances 테이블 : 뮤텍스 동기화 객체 인스턴스
mutex_instances 테이블은 서버가 실행되는 동안 성능 스키마에 표시되는 모든 뮤텍스를 나열합니다. 뮤텍스는 주어진 시간에 하나의 스레드 만 일부 공통 리소스에 액세스 할 수 있도록하기 위해 코드에서 사용되는 동기화 메커니즘입니다. 리소스는 뮤텍스에 의해 "보호"된다고합니다.
서버에서 실행되는 두 개의 스레드 (예 : 동시에 쿼리를 실행하는 두 개의 사용자 세션)가 동일한 리소스 (파일, 버퍼 또는 일부 데이터)에 액세스해야하는 경우이 두 스레드는 서로 경쟁합니다. 뮤텍스에 대한 잠금을 획득하기위한 첫 번째 쿼리는 첫 번째가 완료 될 때까지 다른 쿼리가 대기하고 뮤텍스를 잠금 해제하도록합니다.
뮤텍스를 유지하는 동안 수행되는 작업은 "중요 섹션"에 있다고 말하며 여러 쿼리가이 중요 섹션을 직렬화 된 방식 (한 번에 하나씩)으로 실행하므로 잠재적인 병목 현상이 발생합니다.
스레드에 현재 뮤텍스가 잠겨있는 경우 LOCKED_BY_THREAD_ID컬럼의 값은 잠금 스레드의 THREAD_ID이고, 그렇지 않으면 NULL입니다.
코드에 계측 된 모든 뮤텍스에 대해 성능 스키마는 다음 정보를 제공합니다.
+ setup_instruments 테이블은 접두사 wait / synch / mutex /와 함께 계측 지점의 이름을 나열합니다.
+ 일부 코드에서 뮤텍스를 생성하면 mutex_instances 테이블에 행이 추가됩니다. OBJECT_INSTANCE_BEGIN 열은 뮤텍스를 고유하게 식별하는 속성입니다.
+ 스레드가 뮤텍스를 잠그려고 할 때 events_waits_current 테이블은 해당 스레드에 대한 행을 표시하여 뮤텍스(EVENT_NAME 컬럼)에서 대기하고 있음을 나타내며 대기중인 뮤텍스 (OBJECT_INSTANCE_BEGIN 열)를 나타냅니다.
+ 스레드가 뮤텍스 잠금에 성공하면 :
- events_waits_current는 뮤텍스에 대한 대기가 완료되었음을 나타냅니다 (TIMER_END 및 TIMER_WAIT 열).
- 완료된 대기 이벤트가 events_waits_history 및 events_waits_history_long 테이블에 추가됩니다.
- mutex_instances는 뮤텍스가 이제 스레드 (THREAD_ID 열에서)가 소유하고 있음을 보여줍니다.
+ 스레드가 뮤텍스를 잠금 해제하면 mutex_instances는 뮤텍스에 이제 소유자가 없음을 표시합니다 (THREAD_ID 열은 NULL 임).
+ mutex 객체가 소멸되면 해당 행이 mutex_instances에서 제거됩니다.
다음 테이블 모두에 대해 쿼리를 수행함으로써 모니터링 애플리케이션 또는 DBA는 뮤텍스와 관련된 스레드 간의 병목 현상 또는 교착 상태를 감지 할 수 있습니다.
+ events_waits_current, 스레드가 대기중인 뮤텍스 확인
+ mutex_instances, 현재 뮤텍스를 소유하고있는 다른 스레드 확인
계측기(setup_instruments 테이블)에서 설정한 계측기와 관련이 있습니다.
계측기는 wait/synch/mutex/* 로 시작합니다.
• Tuncate Table 허용 여부
truncate Table문은 안됩니다.
▶︎ rwlock_instances 테이블 : 동기화 객체 인스턴스 잠금
rwlock_instance 테이블에는 서버가 실행되는 동안 성능 스키마에 표시되는 모든 rwlock(읽기 쓰기 잠금) 인스턴스가 나열됩니다. rwlock은 특정 시간에 특정 규칙에 따라 해당 스레드가 일부 공통 리소스에 액세스할 수 있도록 하기 위해 코드에 사용되는 동기화 메커니즘입니다. 리소스는 rwlock에 의해 "보호"된다고 합니다. 액세스는 공유되거나(많은 스레드가 동시에 읽기 잠금을 가질 수 있음), 배타적(한 번에 하나의 스레드만 쓰기 잠금을 가질 수 있음) 공유된 전용(다른 스레드에 의해 일관되지 않은 읽기를 허용하면서 스레드가 쓰기 잠금을 가질 수 있음)됩니다. 공유 전용 액세스는 sxlock이라고도 하며 동시성을 최적화하고 읽기-쓰기 워크로드의 확장성을 향상시킵니다.
잠금을 요청하는 스레드 수와 요청된 잠금의 특성에 따라 액세스는 공유 모드, 독점 모드, 공유 독점 모드에서 부여되거나 전혀 부여되지 않고 다른 스레드가 먼저 완료 될 때까지 기다립니다.
다음 테이블 모두에 대해 쿼리를 수행하면 모니터링 응용 프로그램이나 DBA가 잠금과 관련된 스레드 간의 병목 현상이나 교착 상태를 감지 할 수 있습니다.
+ events_waits_current, 스레드가 대기중인 rwlock 확인
+ rwlock_instances, 현재 rwlock을 소유하고있는 다른 스레드 확인
하지만 제한 사항이 있습니다. rwlock_instances는 쓰기 잠금을 유지하는 스레드를 식별하는 데만 사용할 수 있지만 읽기 잠금을 유지하는 스레드는 식별할 수 없습니다.
+ 주요 컬럼 :
- WRITE_LOCKED_BY_THREAD_ID
스레드에 현재 배타적 (쓰기) 모드에서 잠긴 rwlock이있는 경우 WRITE_LOCKED_BY_THREAD_ID는 잠금 스레드의 THREAD_ID이고, 그렇지 않으면 NULL입니다.
- READ_LOCKED_BY_COUNT
스레드가 현재 공유 (읽기) 모드에서 잠긴 rwlock을 가지고있는 경우 READ_LOCKED_BY_COUNT는 1 씩 증가합니다. 이것은 카운터 일 뿐이므로 읽기 잠금을 보유한 스레드를 찾는 데 직접 사용할 수는 없지만이를 확인하는 데 사용할 수 있습니다. rwlock에 읽기 경합이 있으며 현재 활성화 된 리더 수를 확인하십시오.
계측기(setup_instruments 테이블)에서 설정한 계측기와 관련이 있습니다.
wait/synch/rwlock/*, wait/synch/sxlock/* 로 시작합니다.
• Tuncate Table 허용 여부
truncate Table문은 안됩니다.
▶︎ socket_instances 테이블 : 활성 연결 인스턴스
socket_instances 테이블은 MySQL 서버에서 활성된 연결의 실시간 스냅샷을 제공합니다. 테이블에는 TCP/IP 또는 Unix소켓 파일 연결당 하나의 행이 있습니다.
이 표에서 사용할 수있는 정보는 서버에 대한 활성 연결의 실시간 스냅샷을 제공합니다.
(소켓 작업 및 전송 및 수신 된 바이트 수와 같은 네트워크 활동을 포함한 추가 정보는 소켓 요약 테이블에서 사용할 수 있습니다.)
IP : PORT 열 조합 값은 연결을 식별합니다. 이 조합 값은 events_waits_xxx 테이블의 OBJECT_NAME 열에서 사용되어 소켓 이벤트가 발생하는 연결을 식별합니다.
- Unix 도메인 리스너 소켓 (server_unix_socket)의 경우 포트는 0이고 IP는 ''입니다.
- Unix 도메인 리스너 (client_connection)를 통한 클라이언트 연결의 경우 포트는 0이고 IP는 ''입니다.
- TCP / IP 서버 리스너 소켓 (server_tcpip_socket)의 경우 포트는 항상 마스터 포트 (예 : 3306)이고 IP는 항상 0.0.0.0입니다.
- TCP / IP 리스너 (client_connection)를 통한 클라이언트 연결의 경우 포트는 서버가 할당하는 것이지만 0이 아닙니다. IP는 원래 호스트의 IP입니다 (로컬 호스트의 경우 127.0.0.1 또는 :: 1).
mysql> SELECT * FROM performance_schema.socket_instances\G
*************************** 1. row ***************************
EVENT_NAME: wait/io/socket/sql/server_unix_socket
OBJECT_INSTANCE_BEGIN: 4316619408
THREAD_ID: 1
SOCKET_ID: 16
IP:
PORT: 0
STATE: ACTIVE
*************************** 2. row ***************************
EVENT_NAME: wait/io/socket/sql/client_connection
OBJECT_INSTANCE_BEGIN: 4316644608
THREAD_ID: 21
SOCKET_ID: 39
IP: 127.0.0.1
PORT: 55233
STATE: ACTIVE
*************************** 3. row ***************************
EVENT_NAME: wait/io/socket/sql/server_tcpip_socket
OBJECT_INSTANCE_BEGIN: 4316699040
THREAD_ID: 1
SOCKET_ID: 14
IP: 0.0.0.0
PORT: 50603
STATE: ACTIVE
서버에는 지원하는 각 네트워크 프로토콜에 대한 수신 소켓이 있습니다. TCP / IP 또는 Unix 소켓 파일 연결을위한 청취 소켓과 관련된 계측기는 각각 socket_type 값이 server_tcpip_socket 또는 server_unix_socket입니다.
청취 소켓이 연결을 감지하면 서버는 별도의 스레드에서 관리하는 새 소켓으로 연결을 전송합니다. 새 연결 스레드의 계측기에는 client_connection의 socket_type 값이 있습니다.
연결이 종료되면 해당하는 socket_instances의 행이 삭제됩니다.
+ 주요 컬럼 :
- THREAD_ID
서버에서 할당 한 내부 스레드 식별자입니다. 각 소켓은 단일 스레드에 의해 관리되므로 각 소켓은 서버 프로세스에 매핑 될 수있는 스레드에 매핑 될 수 있습니다.
- SOCKET_ID
소켓에 할당 된 내부 파일 핸들입니다.
- IP
클라이언트 IP 주소입니다. 값은 IPv4 또는 IPv6 주소이거나 Unix 소켓 파일 연결을 나타 내기 위해 공백 일 수 있습니다.
- PORT
0 ~ 65535 범위의 TCP / IP 포트 번호입니다.
- STATUS
소켓 상태, IDLE 또는 ACTIVE입니다. 활성 소켓의 대기 시간은 해당 소켓 기기를 사용하여 추적됩니다. 유휴 소켓의 대기 시간은 유휴 계측기를 사용하여 추적됩니다.
소켓은 클라이언트의 요청을 기다리는 경우 유휴 상태입니다. 소켓이 유휴 상태가되면 소켓을 추적하는 socket_instances의 이벤트 행이 ACTIVE 상태에서 IDLE 상태로 전환됩니다.
EVENT_NAME 값은 wait/io/socket/*으로 유지되지만 계측기 타이밍은 일시 중지됩니다. 대신 EVENT_NAME 값이 유휴 상태인 이벤트가 events_waits_current 테이블에 생성됩니다.
다음 요청이 수신되면 유휴 이벤트가 종료되고 소켓 인스턴스가 IDLE에서 ACTIVE로 전환되며 소켓 계측기의 타이밍이 다시 시작됩니다.
계측기(setup_instruments 테이블)에서 설정한 계측기와 관련이 있습니다.
wait/io/socket/sql/socket_type/* 으로 시작합니다.
• Tuncate Table 허용 여부
truncate Table문은 안됩니다.
▣ 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] Performance Schema 모니터링 테이블 - Stage Event 테이블 (0) | 2021.01.24 |
---|---|
[MySQL] Performance Schema 모니터링 테이블 - Wait Event 및 Lock 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 상태 모니터링 (0) | 2021.01.24 |
[MySQL] Performance Schema 소개 및 사용방법 (0) | 2021.01.24 |
[MySQL][Backup n Recovery] mysqlpump (0) | 2021.01.23 |