22.9.10.3 스레드 테이블
threads 테이블은 각 서버 스레드의 행을 포함합니다. 각 행은 스레드에 대한 정보를 저장하고 이에 대한 모니터링이 활성화되어 있는지 여부를 나타냅니다.
mysql> SELECT * FROM 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
...
*************************** 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 threads
PARENT_THREAD_ID: 1
ROLE: NULL
INSTRUMENTED: YES
...
threads 테이블의 초기 내용은 성능 스키마의 초기화가 수행 될 때 존재하는 스레드에 따라 달라집니다. 그런 다음 서버가 스레드를 만들 때마다 새로운 행이 추가됩니다.
스레드의 종료시 threads 테이블에서 행 삭제가 이루어집니다. 클라이언트 세션과 연관된 스레드는 세션을 종료 할 때 삭제가 이루어집니다. 클라이언트의 자동 재 연결이 활성화되고 세션이 끊어 후 다시 연결하면 세션은 다른 PROCESSLIST_ID 값을 가지는 threads 테이블에 새 행에 연결됩니다. 새로운 스레드의 초기 INSTRUMENTED 값은 원래 스레드 값과 다를 수 있습니다. 그동안 setup_actors 테이블이 변경되어있을 수 있습니다 원래 스레드 INSTRUMENTED 값이 초기화 후 변경되는 경우 그 변경은 새로운 스레드에 미루어지지 않습니다.
PROCESSLIST_ 의 프리픽스있는 이름을 가진 threads 테이블 컬럼은 INFORMATION_SCHEMA.PROCESSLIST 테이블 또는 SHOW PROCESSLIST 명령문에서 사용할 수있는 것과 유사한 정보를 제공합니다. 따라서 이러한 모든 소스는 스레드 모니터링 정보를 제공합니다. threads 의 사용은 다음의 점에서 다른 두 소스의 사용과 다릅니다.
threads에 대한 액세스는 상호 배타적 잠금이 필요없이 서버 성능에 미치는 영향은 크지 않습니다.INFORMATION_SCHEMA.PROCESSLIST와SHOW PROCESSLIST는 상호 배타적 잠금이 필요하므로 성능이 저하 될 수 있습니다.threads스레드가 포 그라운드 스레드 또는 백그라운드 스레드 여부와 스레드에 연결된 서버의 위치 등의 각 스레드의 추가 정보를 제공합니다.threads는 백그라운드 스레드에 대한 정보를 제공하기 위해, 다른 thread 정보 소스에서는 불가능한 활동의 모니터에 사용할 수 있습니다.스레드 모니터링을 활성화하거나 비활성화 할 수 있습니다 (즉, 스레드에 의해 실행되는 이벤트가 instrument되는지 여부). 기존의 스레드 모니터링을 제어하려면
threads테이블INSTRUMENTED컬럼을 설정합니다. 새로운 포 그라운드 스레드의 초기INSTRUMENTED값을 제어하려면setup_actors테이블을 사용합니다. (스레드 모니터링이 이루어지는 상황에 대한 자세한 내용은INSTRUMENTED컬럼의 설명을 참조하십시오.)
이러한 이유로, INFORMATION_SCHEMA.PROCESSLIST 또는 SHOW PROCESSLIST 를 사용하여 서버 모니터링을 실행하는 DBA는 대신 threads 를 사용하여 모니터하고자하는 경우가 있습니다.
INFORMATION_SCHEMA.PROCESSLIST 및 SHOW PROCESSLIST 는 다른 사용자 스레드에 대한 정보는 현재 사용자에게 PROCESS 권한이있는 경우에만 표시됩니다. 이것은 threads 테이블에는 적용되지 않습니다. 테이블의 SELECT 권한을 가진 모든 사용자에게 모든 행이 표시됩니다. 다른 사용자의 스레드를 볼 수 없도록해야한다 사용자에게 그 권한을주지 마십시오.
threads 테이블에는 이러한 열이 있습니다.
THREAD_ID고유의 스레드 식별자.
NAME서버의 스레드 계측 코드에 연관된 이름. 예를 들어,
thread/sql/one_connection는 사용자 연결의 처리를 담당하는 코드의 스레드 함수에 대응 해,thread/sql/main은 서버의main()함수를 나타냅니다.TYPEFOREGROUND또는BACKGROUND스레드의 종류. 사용자 연결 스레드는 전경 스레드입니다. 내부 서버 활동에 연관된 스레드는 백그라운드 스레드입니다. 예를 들어, 내부InnoDB쓰레드 슬레이브로 정보를 전송하는 'Binlog Dump "스레드 슬레이브 I / O 및 SQL 스레드입니다.PROCESSLIST_IDINFORMATION_SCHEMA.PROCESSLIST테이블에 표시되는 스레드의 경우, 이것은 그 테이블의ID열에 표시되는 동일한 값입니다. 그것은SHOW PROCESSLIST출력의Id컬럼에 표시되는 값과 그 스레드에서CONNECTION_ID()의 반환 값이기도합니다.백그라운드 스레드 (사용자 연결과 관련된 아닌 thread)의 경우
PROCESSLIST_ID은NULL이기 때문에 값은 고유하지 않습니다. (MySQL 5.6.9 이전에는 백그라운드 스레드의 경우 값은 0입니다.)PROCESSLIST_USER포 그라운드 스레드에 연결된 사용자 백그라운드 스레드의 경우는
NULL.PROCESSLIST_HOST포 그라운드 스레드에 연결된 클라이언트의 호스트 이름 백그라운드 스레드의 경우는
NULL.PROCESSLIST_DB스레드의 기본 데이터베이스, 아무것도없는 경우는
NULL.PROCESSLIST_COMMAND스레드가 실행하는 명령의 종류. 스레드 명령에 대한 설명은 섹션 8.12.5 "스레드 정보 검사" 를 참조하십시오. 이 컬럼 값은 클라이언트 / 서버 프로토콜
COM_명령과xxxCom_상태 변수에 대응합니다. 섹션 5.1.6 "서버 상태 변수" 를 참조하십시오xxxPROCESSLIST_TIME스레드가 현재 상태에서 초.
PROCESSLIST_STATE스레드가 행하고있는 것을 나타내는 액션 이벤트 또는 상태.
PROCESSLIST_STATE값에 대한 설명은 섹션 8.12.5 "스레드 정보 검사" 를 참조하십시오.대부분의 상태가 매우 빠른 동작에 해당합니다. 스레드가 몇 초에도 특정 상태에 머물러있는 경우는 문제가 발생하고있을 가능성이 있고, 조사가 필요합니다.
PROCESSLIST_INFO스레드가 실행하는 명령문 또는 그것이 모든 문이 실행되지 않을 경우
NULL. 이 문은 서버에 보내는 명령문 또는 명령문이 다른 문을 실행하는 경우에는 가장 안쪽의 문이 될 수 있습니다. 예를 들어,CALL문이SELECT문을 실행하는 저장 프로 시저를 실행하는 경우PROCESSLIST_INFO값은SELECT문이 표시됩니다.PARENT_THREAD_ID이 스레드가 하위 스레드 (다른 스레드에 의해 생성 된) 인 경우, 이것은 생성 된 쓰레드의
THREAD_ID입니다. 스레드의 생성은INSERT DELAYED문에서 행 삽입을 처리하는 등 발생합니다.ROLE사용되지 않습니다.
INSTRUMENTED스레드가 instrument되는지 여부. 이것은 스레드
threads테이블 행에 영향을주지 않고 스레드에서 실행되는 이벤트가 instrument되는지 여부에 영향을줍니다.포 그라운드 스레드는 초기
INSTRUMENTED값은 스레드에 연결된 사용자 계정이setup_actors테이블의 모든 행에 일치하는 여부에 따라 결정됩니다. 조합은PROCESSLIST_USER및PROCESSLIST_HOST컬럼 값을 기준으로합니다.스레드가 하위 스레드를 생성하는 경우, 그 하위 스레드에 데이터가 다시 이루어집니다.
백그라운드 스레드의 경우
INSTRUMENTED은 기본적으로YES입니다. 백그라운드 스레드에 연결된 사용자는 않기 때문에setup_actors는 참조되지 않습니다.어느 thread에서도 스레드의 유효 기간 동안 그
INSTRUMENTED값이 변경 될 수 있습니다. 이것은 유일한 변경 가능한threads테이블 컬럼입니다.
스레드에서 실행되는 이벤트 모니터링을하는 경우 이러한 것이 적용해야합니다.
setup_consumers테이블의thread_instrumentation소비자는YES이어야합니다.thread.INSTRUMENTED컬럼은YES이어야합니다.setup_instruments테이블에서 사용되는 instrument에서 생성 된 스레드 이벤트에 대해서만 모니터링이 이루어집니다.