[MySQL] Performance Schema 모니터링 테이블 - User, 시스템, 상태 및 기타 테이블

■ 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 소개 및 사용방법

■ Performance Schema 소개 MySQL 성능 스키마는 낮은 수준에서 MySQL 서버 실행을 모니터링하는 기능입니다. 성능 스키마에는 다음과 같은 특성이 있습니다. - 성능 스키마는 런타임에 서버의 내부 실

myinfrabox.tistory.com

[MySQL] Performance Schema 상태 모니터링

 

[MySQL] Performance Schema 상태 모니터링

■ performance schema 상태 모니터링. 다음과 같은 쿼리로 performance schema의 상태를 확인할 수 있습니다. mysql> SHOW STATUS LIKE 'perf%'; +-----------------------------------------------+-------+ | V..

myinfrabox.tistory.com

[MySQL] Performance Schema 설정 테이블 - Setup 및 Instance 테이블

 

[MySQL] Performance Schema 설정 테이블 - Setup 및 Instance 테이블

■ Setup Tables setup_actors : 새로운 포그라운드 스레드(foreground threads : 접속 클라이언트 혹은 서버)에 대한 모니터링을 초기화하는 방법 setup_consumers : 이벤트 정보를 보내고 저장할 수 있는 대상 s..

myinfrabox.tistory.com

[MySQL] Performance Schema 모니터링 테이블 - Wait Event 및 Lock 테이블

 

[MySQL] Performance Schema 모니터링 테이블 - Wait Event 및 Lock 테이블

■ Wait Event 테이블 종류 성능 스키마 도구는 시간이 걸리는 이벤트를 대기합니다. 이벤트 계층 구조 내에서 대기 이벤트는 트랜잭션 이벤트 내에 중첩되는 명령문 이벤트 내에 중첩되는 스테이

myinfrabox.tistory.com

[MySQL] Performance Schema 모니터링 테이블 - Stage Event 테이블

 

[MySQL] Performance Schema 모니터링 테이블 - Stage Event 테이블

■ Stage Event 테이블 성능 스키마 단계는 명령문 구문 분석, 테이블 열기 또는 파일 정렬 작업 수행과 같은 명령 실행 프로세스 중 단계입니다. 스테이지는 SHOW PROCESSLIST에 의해 표시되거나 INFORMATI

myinfrabox.tistory.com

 

[MySQL] Performance Schema 모니터링 테이블 - Statement Event 테이블

 

[MySQL] Performance Schema 모니터링 테이블 - Statement Event 테이블

■ Statement Event 테이블 성능 스키마 도구 명령문 실행. 명령문 이벤트는 이벤트 계층 구조의 높은 수준에서 발생합니다. 이벤트 계층 구조 내에서 대기 이벤트는 트랜잭션 이벤트 내에 중첩되는

myinfrabox.tistory.com

[MySQL] Performance Schema 모니터링 테이블 - Transaction 테이블

 

[MySQL] Performance Schema 모니터링 테이블 - Transaction 테이블

■ Transaction 테이블 성능 스키마는 트랜잭션을 계측합니다. 이벤트 계층 구조 내에서 대기 이벤트는 트랜잭션 이벤트 내에 중첩되는 명령문 이벤트 내에 중첩되는 스테이지 이벤트 내에 중첩됩

myinfrabox.tistory.com

[MySQL] Performance Schema 모니터링 테이블 - Connection 및 Connection Attribute 테이블

 

[MySQL] Performance Schema 모니터링 테이블 - Connection 및 Connection Attribute 테이블

■ Connection 테이블 클라이언트가 MySQL 서버에 연결하면 특정 사용자 이름과 특정 호스트에서 연결됩니다. 성능 스키마는 이러한 연결에 대한 통계를 제공하고 다음 표를 사용하여 계정 (사용자

myinfrabox.tistory.com

[MySQL] Performance Schema 모니터링 테이블 - User, 시스템, 상태 및 기타 테이블

 

[MySQL] Performance Schema 모니터링 테이블 - User, 시스템, 상태 및 기타 테이블

■ User-Defined Variable 테이블 성능 스키마는 사용자 정의 변수를 노출하는 user_variables_by_thread 테이블을 제공합니다. 이들은 특정 세션 내에서 정의된 변수이며 이름 앞에 @문자를 포함합니다. user_v

myinfrabox.tistory.com

[MySQL] Performance Schema 모니터링 테이블 - Summary(요약) 테이블

 

[MySQL] Performance Schema 모니터링 테이블 - Summary(요약) 테이블

■ Summary(요약) 테이블 ▶︎ objects_summary_global_by_type 테이블 성능 스키마는 개체 대기 이벤트를 집계하기 위해 objects_summary_global_by_type 테이블을 유지합니다. 예제 개체 대기 이벤트 요약 정보..

myinfrabox.tistory.com

[MySQL] Performance Schema 모니터링 테이블 - Replication 테이블

 

[MySQL] Performance Schema 모니터링 테이블 - Replication 테이블

■ Replication 테이블 성능 스키마는 복제 정보를 노출하는 테이블을 제공합니다. 이는 SHOW SLAVE STATUS 문에서 사용할 수있는 정보와 비슷하지만 테이블 형식으로 표현하는 것이 더 접근하기 쉽고

myinfrabox.tistory.com

 

Designed by JB FACTORY