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()
함수를 나타냅니다.TYPE
FOREGROUND
또는BACKGROUND
스레드의 종류. 사용자 연결 스레드는 전경 스레드입니다. 내부 서버 활동에 연관된 스레드는 백그라운드 스레드입니다. 예를 들어, 내부InnoDB
쓰레드 슬레이브로 정보를 전송하는 'Binlog Dump "스레드 슬레이브 I / O 및 SQL 스레드입니다.PROCESSLIST_ID
INFORMATION_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_
명령과xxx
Com_
상태 변수에 대응합니다. 섹션 5.1.6 "서버 상태 변수" 를 참조하십시오xxx
PROCESSLIST_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에서 생성 된 스레드 이벤트에 대해서만 모니터링이 이루어집니다.