■ User-Defined Variable 테이블
Performance Schema는 사용자 정의 변수를 노출하는 user_variables_by_thread 테이블을 제공합니다. 이들은 특정 세션 내에서 정의된 변수이며 이름 앞에 @문자를 포함합니다.
user_variables_by_thread 테이블에는 다음 컬럼이 있습니다.
- THREAD_ID
변수가 정의된 세션의 스레드 식별자입니다.
- VARIABLE_NAME
선행 @문자가 없는 변수 이름입니다.
- VARIABLE_VALUE
변수 값입니다.
user_variables_by_thread 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
■ System Variable 테이블
MySQL 서버는 구성 방법을 나타내는 많은 시스템 변수를 유지합니다. 시스템 변수 정보는 다음 성능 스키마 테이블에서 사용할 수 있습니다.
global_variables : 전역 시스템 변수. 전역 값만 원하는 응용 프로그램은이 테이블을 사용해야합니다.
session_variables : 현재 세션에 대한 시스템 변수. 자체 세션에 대한 모든 시스템 변수 값을 원하는 응용 프로그램은이 테이블을 사용해야합니다. 여기에는 해당 세션에 대한 세션 변수와 해당 세션이 없는 전역 변수의 값이 포함됩니다.
variables_by_thread : 각 활성 세션에 대한 세션 시스템 변수. 특정 세션의 세션 변수 값을 알고자 하는 애플리케이션은 이 테이블을 사용해야합니다. 스레드 ID로 식별되는 세션 변수만 포함합니다.
세션 변수 테이블 (session_variables, variables_by_thread)에는 종료 된 세션이 아닌 활성 세션에 대한 정보 만 포함됩니다.
• global_variables 및 session_variables 테이블 주요 컬럼
- VARIABLE_NAME
시스템 변수 이름.
- VARIABLE_VALUE
시스템 변수 값. global_variables의 경우 이 컬럼에는 전역 값이 포함됩니다. session_variables의 경우이 컬럼에는 현재 세션에 적용되는 변수 값이 포함됩니다.
• variables_by_thread 테이블 주요컬럼
- THREAD_ID
시스템 변수가 정의 된 세션의 스레드 식별자입니다.
- VARIABLE_NAME
시스템 변수 이름.
- VARIABLE_VALUE
THREAD_ID 컬럼로 명명 된 세션의 세션 변수 값입니다.
variables_by_thread 테이블에는 포 그라운드 스레드에 대한 시스템 변수 정보만 포함됩니다. 모든 스레드가 성능 스키마에 의해 계측되지 않는 경우 이 테이블은 일부 행을 누락할 수 있습니다.
이 경우 Performance_schema_thread_instances_lost 상태 변수는 0보다 큽니다.
TRUNCATE TABLE은 성능 스키마 시스템 변수 테이블에 지원되지 않습니다.
■ Status Variable 테이블
MySQL 서버는 작동에 대한 정보를 제공하는 많은 상태 변수를 유지합니다. 상태 변수 정보는 다음 성능 스키마 테이블에서 사용할 수 있습니다.
global_status : 전역 상태 변수. 전역 값만 원하는 응용 프로그램은이 테이블을 사용해야합니다.
session_status : 현재 세션에 대한 상태 변수. 자체 세션에 대한 모든 상태 변수 값을 원하는 응용 프로그램은이 테이블을 사용해야합니다.
여기에는 해당 세션에 대한 세션 변수와 해당 세션이없는 전역 변수의 값이 포함됩니다.
status_by_thread : 각 활성 세션에 대한 세션 상태 변수. 특정 세션의 세션 변수 값을 알고자 하는 애플리케이션은 이 테이블을 사용해야합니다. 스레드 ID로 식별되는 세션 변수만 포함합니다.
계정, 호스트 이름 및 사용자 이름별로 집계 된 상태 변수 정보를 제공하는 요약 테이블도 있습니다.
세션 변수 테이블 (session_status, status_by_thread)에는 종료된 세션이 아닌 활성 세션에 대한 정보만 포함됩니다.
성능 스키마는 스레드 테이블에서 INSTRUMENTED 값이 YES 인 스레드에 대해서만 글로벌 상태 변수에 대한 통계를 수집합니다. 세션 상태 변수에 대한 통계는 INSTRUMENTED 값에 관계없이 항상 수집됩니다.
성능 스키마는 상태 변수 테이블에서 Com_xxx 상태 변수에 대한 통계를 수집하지 않습니다. 전역 및 세션별 명령문 실행 수를 얻으려면 각각 events_statements_summary_global_by_event_name 및 events_statements_summary_by_thread_by_event_name 테이블을 사용합니다. 아래의 예를 참고합니다.
SELECT EVENT_NAME, COUNT_STAR
FROM performance_schema.events_statements_summary_global_by_event_name
WHERE EVENT_NAME LIKE 'statement/sql/%';
• global_status 및 session_status 테이블 주요 컬럼
- VARIABLE_NAME
상태 변수 이름입니다.
- VARIABLE_VALUE
상태 변수 값입니다. global_status의 경우이 컬럼에는 전역 값이 포함됩니다. session_status의 경우이 컬럼에는 현재 세션에 대한 변수 값이 포함됩니다.
• status_by_thread 테이블 주요컬럼
각 활성 스레드의 상태가 포함됩니다.
- THREAD_ID
상태 변수가 정의된 세션의 스레드 식별자입니다.
- VARIABLE_NAME
상태 변수 이름입니다.
- VARIABLE_VALUE
THREAD_ID 컬럼로 명명 된 세션의 세션 변수 값입니다.
status_by_thread 테이블에는 포 그라운드 스레드에 대한 상태 변수 정보만 포함됩니다. performance_schema_max_thread_instances 시스템 변수가 자동 크기 조정되지 않고(-1 값으로 표시됨)
계측된 스레드 개체의 최대 허용 개수가 백그라운드 스레드 개수보다 크지 않으면 테이블이 비어 있습니다.
성능 스키마는 다음과 같이 상태 변수 테이블에 대해 TRUNCATE TABLE을 지원합니다.
- global_status : 스레드, 계정, 호스트 및 사용자 상태를 재설정합니다. 서버가 절대 재설정하지 않는 변수를 제외한 전역 상태 변수를 재설정합니다.
- session_status : 지원되지 않습니다.
- status_by_thread : 모든 스레드의 상태를 글로벌 상태 및 계정 상태로 집계 한 다음 스레드 상태를 재설정합니다. 계정 통계가 수집되지 않은 경우 호스트 및 사용자 상태가 수집되면 세션 상태가 호스트 및 사용자 상태에 추가됩니다.
performance_schema_accounts_size, performance_schema_hosts_size 및 performance_schema_users_size 시스템 변수가 각각 0으로 설정된 경우 계정, 호스트 및 사용자 통계가 수집되지 않습니다.
FLUSH STATUS는 모든 활성 세션의 세션 상태를 전역 상태 변수에 추가하고 모든 활성 세션의 상태를 재설정하며 연결이 끊긴 세션에서 집계된 계정, 호스트 및 사용자 상태 값을 재설정합니다.
■ Miscellaneous(기타) 테이블
▶︎ host_cache 테이블
MySQL 서버는 클라이언트 호스트 이름과 IP 주소 정보를 포함하는 메모리 내 호스트 캐시를 유지하며 DNS (Domain Name System) 조회를 방지하는 데 사용됩니다. host_cache 테이블은이 캐시의 내용을 노출합니다.
host_cache_size 시스템 변수는 호스트 캐시의 크기와 host_cache 테이블의 크기를 제어합니다.
host_cache 테이블은 호스트 캐시의 내용을 노출하기 때문에 SELECT 문을 사용하여 검사할 수 있습니다. 연결 문제의 원인을 진단하는데 도움이 될 수 있습니다. 성능 스키마가 활성화되어 있거나이 테이블이 비어 있어야합니다.
• 주요 컬럼
- IP
서버에 연결된 클라이언트의 IP 주소로 문자열로 표시됩니다.
- HOST
해당 클라이언트 IP에 대해 확인 된 DNS 호스트 이름 또는 이름을 알 수 없는 경우 NULL입니다.
- HOST_VALIDATED
클라이언트 IP에 대해 IP-to-host name-to-IP DNS 확인이 성공적으로 수행되었는지 여부. HOST_VALIDATED가 YES이면 HOST 컬럼이 IP에 해당하는 호스트 이름으로 사용되므로 DNS에 대한 추가 호출을 피할 수 있습니다.
HOST_VALIDATED가 NO인 동안 DNS 확인은 결국 유효한 결과 또는 영구 오류로 완료될 때까지 각 연결 시도에 대해 시도됩니다. 이 정보를 사용하면 서버가 일시적인 DNS 오류 동안 잘못된 호스트 이름을 캐싱하거나 누락되어 클라이언트에 영구적으로 부정적인 영향을 미치는 것을 방지할 수 있습니다.
- SUM_CONNECT_ERRORS
차단으로 간주되는 연결 오류 수(max_connect_errors 시스템 변수에 대해 평가됨). 프로토콜 핸드 셰이크 오류만 계산되며 유효성 검사를 통과한 호스트에 대해서만 계산됩니다(HOST_VALIDATED = YES).
주어진 호스트에 대한 SUM_CONNECT_ERRORS가 max_connect_errors 값에 도달하면 해당 호스트의 새 연결이 차단됩니다. 호스트가 차단되지 않은 상태에서 호스트에서 여러 연결 시도가 동시에 발생할 수 있으므로 SUM_CONNECT_ERRORS 값은 max_connect_errors 값을 초과할 수 있습니다. 이들 중 일부 또는 전부가 실패할 수 있으며, SUM_CONNECT_ERRORS가 독립적으로 증가하여 max_connect_errors 값을 초과할 수 있습니다.
지정된 호스트의 max_connect_errors는 200이고 SUM_CONNECT_ERRors는 199이라고 가정합니다. 클라이언트 10개가 해당 호스트에서 동시에 연결을 시도하면 SUM_CONNECT_ERRORS가 200에 도달하지 않았기 때문에 클라이언트 중 하나도 차단되지 않습니다. 클라이언트 중 5개에 대해 차단 오류가 발생하면 각 클라이언트에 대해 SUM_CONNECT_ERRORS가 하나씩 증가하여 SUM_CONNECT_ERRORS 값이 204입니다. 다른 5개 클라이언트는 연결 시도를 시작할 때 SUM_CONNECT_ERRORS 값이 200에 도달하지 않았기 때문에 차단되지 않고 성공합니다. SUM_CONNECT_ERRors가 200에 도달한 후 시작되는 호스트의 새 연결이 차단됩니다.
- COUNT_HOST_BLOCKED_ERRORS
SUM_CONNECT_ERRORS가 max_connect_errors 시스템 변수의 값을 초과하여 차단 된 연결 수입니다.
- COUNT_NAMEINFO_TRANSIENT_ERRORS
IP 대 호스트 이름 DNS 확인 중 일시적인 오류 수입니다.
- COUNT_NAMEINFO_PERMANENT_ERRORS
IP-to-호스트네임 DNS 확인중 영구 오류 수입니다.
- COUNT_FORMAT_ERRORS
호스트 이름 형식 오류 수입니다. MySQL은 이름의 초기 구성 요소 중 하나 이상이 완전히 숫자인 호스트 이름 (예 : 1.2.example.com)에 대해 mysql.user 시스템 테이블의 호스트 컬럼값 일치를 수행하지 않습니다.
대신 클라이언트 IP 주소가 사용됩니다.
- COUNT_ADDRINFO_TRANSIENT_ERRORS
호스트 이름에서 IP 역방향 DNS 확인 중 일시적인 오류 수입니다.
- COUNT_ADDRINFO_PERMANENT_ERRORS
호스트이름-to-IP 역방향 DNS 확인중 영구적인 오류 수입니다.
- COUNT_FCRDNS_ERRORS
정방향으로 확인된 역방향 DNS 오류 수입니다. 이러한 오류는 IP-to-host name-to-IP DNS 확인이 클라이언트 시작 IP주소와 일치하지 않는 IP주소를 생성할 때 발생합니다.
- COUNT_HOST_ACL_ERRORS
클라이언트 호스트에서 연결할 수 있는 사용자가 없기 때문에 발생하는 오류 수입니다. 이러한 경우 서버는 ER_HOST_NOT_PRIVILEGED를 반환하고 사용자 이름이나 암호를 묻지도 않습니다.
- COUNT_NO_AUTH_PLUGIN_ERRORS
사용할 수 없는 인증 플러그인 요청으로 인한 오류 수입니다. 예를 들어 플러그인이 로드되지 않았거나로드 시도가 실패한 경우 플러그인을 사용할 수 없습니다.
- COUNT_AUTH_PLUGIN_ERRORS
인증 플러그인에서 보고한 오류 수입니다.
인증 플러그인은 다른 오류 코드를 보고하여 실패의 근본 원인을 나타낼 수 있습니다. 오류 유형에 따라 COUNT_AUTHENTICATION_ERRORS, COUNT_AUTH_PLUGIN_ERRORS, COUNT_HANDSHAKE_ERRORS컬럼 중 하나가 증가합니다.
새 반환 코드는 기존 플러그인 API에 대한 선택적 확장입니다. 알 수 없거나 예상치 못한 플러그인 오류는 COUNT_AUTH_PLUGIN_ERRORS 컬럼에 계산됩니다.
- COUNT_HANDSHAKE_ERRORS
유선 프로토콜 수준에서 감지된 오류 수입니다.
- COUNT_PROXY_USER_ERRORS 개
프록시 사용자 A가 존재하지 않는 다른 사용자 B에게 프록시될 때 감지된 오류 수 입니다.
- COUNT_PROXY_USER_ACL_ERRORS
프록시 사용자 A가 존재하지만 A에게 PROXY 권한이 없는 다른 사용자 B에게 프록시될 때 감지된 오류 수 입니다.
- COUNT_AUTHENTICATION_ERRORS
인증 실패로 인한 오류 수입니다.
- COUNT_SSL_ERRORS
SSL 문제로 인한 오류 수입니다.
- COUNT_MAX_USER_CONNECTIONS_ERRORS
사용자별 연결 할당량 초과로 인해 발생한 오류 수입니다.
- COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS
시간당 사용자별 연결 할당량을 초과하여 발생한 오류 수입니다.
- COUNT_DEFAULT_DATABASE_ERRORS
기본 데이터베이스와 관련된 오류 수입니다. 예를 들어 데이터베이스가 존재하지 않거나 사용자에게 액세스 권한이 없습니다.
- COUNT_INIT_CONNECT_ERRORS 개
init_connect 시스템 변수값의 명령문 실행 실패로 인해 발생한 오류수입니다.
- COUNT_LOCAL_ERRORS
네트워크, 인증 또는 권한 부여와 관련이 없는 서버 구현에 국한된 오류 수입니다. 예를 들어 메모리 부족 상태가이 범주에 속합니다.
- COUNT_UNKNOWN_ERRORS
이 테이블의 다른 컬럼에서 설명하지 않은 기타 알수 없는 오류의 수입니다. 이 컬럼은 새로운 오류 조건을 보고해야 하고 host_cache 테이블의 이전 버전과의 호환성 및 구조를 유지해야 하는경우 향후 사용을 위해 예약되어 있습니다.
- FIRST_SEEN
IP 컬럼의 클라이언트에서 본 첫번째 연결 시도의 타임 스탬프입니다.
- LAST_SEEN
IP 컬럼의 클라이언트에서 본 가장 최근 연결 시도의 타임 스탬프입니다.
- FIRST_ERROR_SEEN
IP 컬럼의 클라이언트에서 본 첫 번째 오류의 타임 스탬프입니다.
- LAST_ERROR_SEEN
IP 컬럼의 클라이언트에서 본 가장 최근 오류의 타임 스탬프입니다.
• Tuncate Table 허용 여부.
TRUNCATE TABLE은 host_cache 테이블에 허용됩니다. 테이블에 대한 DROP 권한이 필요합니다. 테이블을 자르면 호스트 캐시가 플러시되며 호스트 캐시 플러시에 설명 된 효과가 있습니다.
▶︎ performance_timers 테이블
performance_timers 테이블은 사용 가능한 이벤트 타이머를 보여줍니다.
mysql> SELECT * FROM performance_schema.performance_timers;
+-------------+-----------------+------------------+----------------+
| TIMER_NAME | TIMER_FREQUENCY | TIMER_RESOLUTION | TIMER_OVERHEAD |
+-------------+-----------------+------------------+----------------+
| CYCLE | 2389029850 | 1 | 72 |
| NANOSECOND | 1000000000 | 1 | 112 |
| MICROSECOND | 1000000 | 1 | 136 |
| MILLISECOND | 1036 | 1 | 168 |
| TICK | 105 | 1 | 2416 |
+-------------+-----------------+------------------+----------------+
지정된 타이머 이름과 연결된 값이 NULL이면 해당 타이머가 플랫폼에서 지원되지 않습니다. NULL을 포함하지 않는 행은 setup_timers에서 사용할 수있는 타이머를 나타냅니다.
performance_timers 테이블에는 다음 컬럼이 있습니다.
- TIMER_NAME
setup_timers 테이블을 구성 할 때 타이머를 참조하는 이름입니다.
- TIMER_FREQUENCY
초당 타이머 단위 수 입니다. 주기 타이머의 경우 주파수는 일반적으로 CPU속도와 관련이 있습니다. 예를 들어 2.4GHz 프로세서가 있는 시스템에서 CYCLE은 2400000000에 가까울 수 있습니다.
- TIMER_RESOLUTION
타이머 값이 증가하는 타이머 단위 수를 나타냅니다. 타이머의 분해능이 10이면 값이 매번 10씩 증가합니다.
- TIMER_OVERHEAD
주어진 타이머로 하나의 타이밍을 얻기위한 최소 오버 헤드 사이클 수 입니다. 성능 스키마는 초기화 중에 타이머를 20번 호출하고 가장 작은 값을 선택하여이 값을 결정합니다.
계측이 각 이벤트의 시작과 끝에서 타이머를 호출하기 때문에 총 오버 헤드는 실제로 이 양의 두배입니다. 타이머 코드는 시간이 지정된 이벤트에 대해서만 호출되므로이 오버 헤드는 시간이 지정되지 않은 이벤트에 적용되지 않습니다.
• Tuncate Table 허용 여부.
performance_timers 테이블에는 TRUNCATE TABLE이 허용되지 않습니다.
▶︎ threads 테이블
threads 테이블에는 각 서버 스레드에 대한 행이 있습니다. 각 행에는 스레드에 대한 정보가 포함되어 있으며 모니터링 및 기록 이벤트 로깅이 활성화되었는지 여부를 나타냅니다.
mysql> SELECT * FROM performance_schema.threads\G
*************************** 1. row ***************************
THREAD_ID: 1
NAME: thread/sql/main
TYPE: BACKGROUND
PROCESSLIST_ID: NULL
PROCESSLIST_USER: NULL
PROCESSLIST_HOST: NULL
PROCESSLIST_DB: NULL
PROCESSLIST_COMMAND: NULL
PROCESSLIST_TIME: 80284
PROCESSLIST_STATE: NULL
PROCESSLIST_INFO: NULL
PARENT_THREAD_ID: NULL
ROLE: NULL
INSTRUMENTED: YES
HISTORY: YES
CONNECTION_TYPE: NULL
THREAD_OS_ID: 489803
...
*************************** 4. row ***************************
THREAD_ID: 51
NAME: thread/sql/one_connection
TYPE: FOREGROUND
PROCESSLIST_ID: 34
PROCESSLIST_USER: isabella
PROCESSLIST_HOST: localhost
PROCESSLIST_DB: performance_schema
PROCESSLIST_COMMAND: Query
PROCESSLIST_TIME: 0
PROCESSLIST_STATE: Sending data
PROCESSLIST_INFO: SELECT * FROM performance_schema.threads
PARENT_THREAD_ID: 1
ROLE: NULL
INSTRUMENTED: YES
HISTORY: YES
CONNECTION_TYPE: SSL/TLS
THREAD_OS_ID: 755399
...
성능 스키마가 초기화되면 존재하는 스레드를 기반으로 스레드 테이블을 채웁니다. 그 후 서버가 스레드를 만들 때마다 새 행이 추가됩니다.
새 스레드의 INSTRUMENTED 및 HISTORY 컬럼 값은 setup_actors 테이블의 내용에 의해 결정됩니다.
스레드 테이블에서 행 제거는 스레드가 종료될 때 발생합니다. 클라이언트 세션과 연관된 스레드의 경우 세션이 종료되면 제거가 발생합니다. 클라이언트에 자동 재 연결이 활성화되어 있고 연결이 끊긴 후 세션이 다시 연결되면 세션은 PROCESSLIST_ID 값이 다른 스레드 테이블의 새 행과 연결됩니다. 새 스레드의 초기 INSTRUMENTED 및 HISTORY 값은 원래 스레드의 값과 다를 수 있습니다. 그 동안 setup_actors 테이블이 변경되었을 수 있으며, 행이 초기화된 후 원래 스레드의 INSTRUMENTED 또는 HISTORY 값이 변경된 경우 변경 사항은 새 스레드로 전달되지 않습니다.
스레드 모니터링(즉, 스레드에서 실행되는 이벤트가 계측되었는지 여부) 및 기록 이벤트 로깅을 활성화하거나 비활성화 할 수 있습니다. 새 포 그라운드(계정을 통한 접속)스레드에 대한 초기 INSTRUMENTED 및 HISTORY 값을 제어하려면 setup_actors 테이블을 사용합니다. 기존 스레드의 이러한 측면을 제어하려면 스레드 테이블 행의 INSTRUMENTED 및 HISTORY 컬럼을 설정합니다.(스레드 모니터링 및 히스토리 이벤트 로깅이 발생하는 조건에 대한 자세한 정보는 INSTRUMENTED 및 HISTORY 컬럼의 설명을 참조합니다.)
PROCESSLIST_ 접두사가 있는 이름을 가진 스레드 테이블 컬럼을 다른 프로세스 정보 소스와 비교하려면 프로세스 정보 소스를 참조합니다.
• 주요컬럼
- THREAD_ID
고유한 스레드 식별자입니다.
- NAME
서버의 스레드 인스 트루먼 테이션 코드와 연관된 이름입니다. 예를 들어 thread/sql/one_connection은 사용자 연결을 처리하는 코드의 스레드 함수에 해당하고 thread/sql/main은 서버의 main() 함수를 나타냅니다.
- TYPE
스레드 유형, FOREGROUND 또는 BACKGROUND. 사용자 연결 스레드는 포 그라운드 스레드입니다. 내부 서버 활동과 관련된 스레드는 백그라운드 스레드입니다.
예를 들면 내부 InnoDB 스레드, 복제본에 정보를 보내는 binlog 덤프 스레드, 복제 I/O 및 SQL스레드가 있습니다.
- PROCESSLIST_ID
사용자 연결과 관련된 포 그라운드 스레드의 경우 연결 식별자입니다. 이는 INFORMATION_SCHEMA PROCESSLIST 테이블의 ID 컬럼에 표시되고 SHOW PROCESSLIST 출력의 Id 컬럼에 표시되고 스레드 내에서 CONNECTION_ID() 함수에 의해 반환되는 동일한 값입니다.
백그라운드 스레드 (사용자 연결과 연관되지 않음)의 경우 PROCESSLIST_ID는 NULL이므로 값이 고유하지 않습니다.
- PROCESSLIST_USER
포 그라운드 스레드와 연관된 사용자, 백그라운드 스레드의 경우 NULL입니다.
- PROCESSLIST_HOST
포 그라운드 스레드와 연관된 클라이언트의 호스트 이름, 백그라운드 스레드의 경우 NULL입니다.
INFORMATION_SCHEMA PROCESSLIST 테이블의 HOST 컬럼이나 SHOW PROCESSLIST 출력의 Host컬럼과 달리 PROCESSLIST_HOST 컬럼에는 TCP/IP연결을 위한 포트 번호가 포함되지 않습니다.
성능 스키마에서이 정보를 얻으려면 소켓 인스트루먼테이션(계측기)을 활성화하고(기본적으로 활성화되지 않음) socket_instances 테이블을 검사합니다.
mysql> SELECT * FROM performance_schema.setup_instruments
WHERE NAME LIKE 'wait/io/socket%';
+----------------------------------------+---------+-------+
| NAME | ENABLED | TIMED |
+----------------------------------------+---------+-------+
| wait/io/socket/sql/server_tcpip_socket | NO | NO |
| wait/io/socket/sql/server_unix_socket | NO | NO |
| wait/io/socket/sql/client_connection | NO | NO |
+----------------------------------------+---------+-------+
3 rows in set (0.01 sec)
mysql> UPDATE performance_schema.setup_instruments
SET ENABLED='YES'
WHERE NAME LIKE 'wait/io/socket%';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> SELECT * FROM performance_schema.socket_instances\G
*************************** 1. row ***************************
EVENT_NAME: wait/io/socket/sql/client_connection
OBJECT_INSTANCE_BEGIN: 140612577298432
THREAD_ID: 31
SOCKET_ID: 53
IP: ::ffff:127.0.0.1
PORT: 55642
STATE: ACTIVE
- PROCESSLIST_DB
스레드의 기본 데이터베이스 또는 선택되지 않은 경우 NULL입니다.
- PROCESSLIST_COMMAND
포 그라운드 스레드의 경우 스레드가 클라이언트를 대신하여 실행하는 명령의 유형 또는 세션이 유휴 상태 인 경우 절전 모드입니다. 이 컬럼의 값은 클라이언트/서버 프로토콜의 COM_xxx 명령 및 Com_xxx 상태 변수에 해당합니다.
백그라운드 스레드는 클라이언트를 대신하여 명령을 실행하지 않으므로 이 컬럼은 NULL일 수 있습니다.
- PROCESSLIST_TIME
스레드가 현재 상태에 있었던 시간(초)입니다. 복제본 SQL 스레드의 경우 값은 마지막으로 복제된 이벤트의 타임 스탬프와 복제본 호스트의 실시간 사이의 시간(초)입니다.
- PROCESSLIST_STATE
스레드가 수행중인 작업을 나타내는 작업, 이벤트 또는 상태입니다. 값이 NULL인 경우 스레드는 유휴 클라이언트 세션에 해당하거나 수행중인 작업이 스테이지로 계측되지 않습니다.
대부분의 상태는 매우 빠른 작업에 해당합니다. 스레드가 몇 초 동안 주어진 상태에 머무르면 조사해야 할 문제가 있을 수 있습니다.
- PROCESSLIST_INFO
스레드가 실행중인 명령문 또는 실행중인 명령문이없는 경우 NULL입니다. 명령문은 서버로 전송된 명령문이거나 명령문이 다른 명령문을 실행하는 경우 가장 안쪽 명령문일 수 있습니다.
예를 들어 CALL 문이 SELECT문을 실행하는 저장 프로 시저를 실행하는 경우 PROCESSLIST_INFO 값은 SELECT 문을 표시합니다.
- PARENT_THREAD_ID
이 스레드가 하위 스레드 (다른 스레드에 의해 생성됨)인 경우 이는 생성 스레드의 THREAD_ID 값입니다.
- ROLE
미사용.
- INSTRUMENTED
스레드에 의해 실행 된 이벤트가 계측되었는지 여부. 값은 YES 또는 NO입니다.
1. 포 그라운드 스레드의 경우 초기 INSTRUMENTED 값은 스레드와 연결된 사용자 계정이 setup_actors 테이블의 행과 일치하는지 여부에 따라 결정됩니다. 일치는 PROCESSLIST_USER 및 PROCESSLIST_HOST 컬럼의 값을 기반으로합니다.
스레드가 하위 스레드를 생성하면 하위 스레드에 대해 생성된 스레드 테이블 행에 대해 일치가 다시 발생합니다.
2. 백그라운드 스레드의 경우 INSTRUMENTED는 기본적으로 YES입니다. 백그라운드 스레드에 연결된 사용자가 없기 때문에 setup_actors를 참조하지 않습니다.
3. 모든 스레드의 경우 해당 INSTRUMENTED값은 스레드 수명 동안 변경 될 수 있습니다.
스레드가 실행하는 이벤트를 모니터링하려면 다음 사항이 참 이어야 합니다.
1. setup_consumers 테이블의 thread_instrumentation 소비자는 YES여야 합니다.
2. threads.INSTRUMENTED컬럼은 YES여야 합니다.
3. 모니터링은 setup_instruments 테이블에서 ENABLED컬럼이 YES로 설정된 기기에서 생성된 스레드 이벤트에 대해서만 발생합니다.
- HISTORY
스레드에 대한 기록 이벤트를 기록할지 여부입니다. 값은 YES 또는 NO입니다.
1.포 그라운드 스레드의 경우 초기 HISTORY 값은 스레드와 연결된 사용자 계정이 setup_actors 테이블의 행과 일치하는지 여부에 따라 결정됩니다. 일치는 PROCESSLIST_USER 및 PROCESSLIST_HOST컬럼의 값을 기반으로 합니다.
스레드가 하위 스레드를 생성하면 하위 스레드에 대해 생성된 스레드 테이블 행에 대해 일치가 다시 발생합니다.
2.백그라운드 스레드의 경우 HISTORY는 기본적으로 YES입니다. 백그라운드 스레드에 연결된 사용자가 없기 때문에 setup_actors를 참조하지 않습니다.
3.모든 스레드의 경우 해당 HISTORY 값은 스레드 수명동안 변경될 수 있습니다.
스레드에 대한 기록 이벤트 로깅이 발생하려면 다음 사항이 참이어야 합니다.
1.setup_consumers 테이블에서 적절한 기록 관련 소비자를 활성화해야 합니다. 예를 들어 events_waits_history 및 events_waits_history_long 테이블에 대기 이벤트 로깅을 수행하려면 해당 events_waits_history 및 events_waits_history_long 소비자가 YES 여야합니다.
2.threads.HISTORY컬럼은 YES 여야 합니다.
3.로깅은 setup_instruments 테이블에서 ENABLED컬럼이 YES로 설정된 계측기에서 생성된 스레드 이벤트에 대해서만 발생합니다.
- CONNECTION_TYPE
연결을 설정하는 데 사용되는 프로토콜 또는 백그라운드 스레드의 경우 NULL입니다. 허용되는 값은 TCP/IP(암호화없이 설정된 TCP/IP 연결), SSL/TLS(암호화로 설정된 TCP/IP 연결), 소켓 (Unix 소켓 파일 연결), 명명된 파이프 (Windows 명명된 파이프 연결) 및 공유 메모리(Windows 공유 메모리 연결).
- THREAD_OS_ID
기본 운영 체제에서 정의한 스레드 또는 작업 식별자 (있는 경우) :
1. MySQL 스레드가 수명 동안 동일한 운영 체제 스레드와 연결되면 THREAD_OS_ID에는 운영 체제 스레드 ID가 포함됩니다.
2. MySQL 스레드가 수명 동안 동일한 운영 체제 스레드와 연결되지 않은 경우 THREAD_OS_ID에는 NULL이 포함됩니다. 이것은 스레드 풀 플러그인이 사용될 때 사용자 세션에 일반적입니다 (섹션 5.5.3,“MySQL Enterprise 스레드 풀”참조).
Windows의 경우 THREAD_OS_ID는 Process Explorer에 표시되는 스레드 ID (https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)에 해당합니다.
Linux의 경우 THREAD_OS_ID는 gettid () 함수의 값에 해당합니다. 이 값은 예를 들어 perf 또는 ps -L 명령을 사용하거나 proc 파일 시스템 (/ proc / [pid] / task / [tid])에서 노출됩니다. 자세한 내용은 perf-stat (1), ps (1) 및 proc (5) 매뉴얼 페이지를 참조하십시오.
• 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 모니터링 테이블 - Replication 테이블 (2) | 2021.01.24 |
---|---|
[MySQL] Performance Schema 모니터링 테이블 - Summary(요약) 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Connection 및 Connection Attribute 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Transaction 테이블 (0) | 2021.01.24 |
[MySQL] Performance Schema 모니터링 테이블 - Statement Event 테이블 (0) | 2021.01.24 |