文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


29.12.22.8 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: mysql
  PROCESSLIST_COMMAND: NULL
     PROCESSLIST_TIME: 418094
    PROCESSLIST_STATE: NULL
     PROCESSLIST_INFO: NULL
     PARENT_THREAD_ID: NULL
                 ROLE: NULL
         INSTRUMENTED: YES
              HISTORY: YES
      CONNECTION_TYPE: NULL
         THREAD_OS_ID: 5856
       RESOURCE_GROUP: SYS_default
     EXECUTION_ENGINE: PRIMARY
    CONTROLLED_MEMORY: 1456
MAX_CONTROLLED_MEMORY: 67480
         TOTAL_MEMORY: 1270430
     MAX_TOTAL_MEMORY: 1307317
     TELEMETRY_ACTIVE: NO
...

當 Performance Schema 初始化時,它會根據當時存在的執行緒來填入 threads 表格。此後,每次伺服器建立執行緒時都會新增一列。

新執行緒的 INSTRUMENTEDHISTORY 資料行值由 setup_actors 表格的內容決定。有關如何使用 setup_actors 表格來控制這些資料行的資訊,請參閱第 29.4.6 節,「依執行緒預先篩選」

當執行緒結束時,會從 threads 表格中移除列。對於與用戶端工作階段相關聯的執行緒,當工作階段結束時會發生移除。如果用戶端已啟用自動重新連線,且工作階段在斷線後重新連線,則工作階段會與 threads 表格中的新列相關聯,該列具有不同的 PROCESSLIST_ID 值。新執行緒的初始 INSTRUMENTEDHISTORY 值可能與原始執行緒不同:setup_actors 表格可能在此期間已變更,而且如果原始執行緒的 INSTRUMENTEDHISTORY 值在列初始化後已變更,則變更不會傳遞到新執行緒。

您可以啟用或停用執行緒監控(也就是說,執行緒執行的事件是否經過儀器化)和歷史事件記錄。若要控制新前景執行緒的初始 INSTRUMENTEDHISTORY 值,請使用 setup_actors 表格。若要控制現有執行緒的這些方面,請設定 threads 表格列的 INSTRUMENTEDHISTORY 資料行。(有關執行緒監控和歷史事件記錄發生的條件的詳細資訊,請參閱 INSTRUMENTEDHISTORY 資料行的描述。)

若要比較 threads 表格中具有 PROCESSLIST_ 前置詞名稱的資料行與其他程序資訊來源,請參閱程序資訊來源

重要

對於非 threads 表格的其他執行緒資訊來源,只有當目前使用者擁有 PROCESS 權限時,才會顯示其他使用者的執行緒資訊。但 threads 表格的情況並非如此;所有擁有該表格 SELECT 權限的使用者都可以看到所有列。不應該能夠透過存取 threads 表格來查看其他使用者執行緒的使用者,不應該被授予該表格的 SELECT 權限。

threads 表格具有以下欄位:

  • THREAD_ID

    唯一的執行緒識別碼。

  • NAME

    伺服器中與執行緒檢測程式碼相關聯的名稱。例如,thread/sql/one_connection 對應於程式碼中負責處理使用者連線的執行緒函式,而 thread/sql/main 代表伺服器的 main() 函式。

  • TYPE

    執行緒類型,可以是 FOREGROUNDBACKGROUND。使用者連線執行緒是前景執行緒。與內部伺服器活動相關的執行緒是背景執行緒。例如,內部 InnoDB 執行緒、傳送資訊至複本的 binlog dump執行緒,以及複製 I/O 和 SQL 執行緒。

  • PROCESSLIST_ID

    對於前景執行緒(與使用者連線相關聯),這是連線識別碼。這與 INFORMATION_SCHEMA PROCESSLIST 表格的 ID 欄位中顯示的值相同,在 SHOW PROCESSLIST 輸出的 Id 欄位中顯示,並由執行緒內的 CONNECTION_ID() 函式傳回。

    對於背景執行緒(與使用者連線無關),PROCESSLIST_IDNULL,因此值不是唯一的。

  • PROCESSLIST_USER

    與前景執行緒相關聯的使用者,背景執行緒則為 NULL

  • PROCESSLIST_HOST

    與前景執行緒相關聯的用戶端主機名稱,背景執行緒則為 NULL

    INFORMATION_SCHEMA PROCESSLIST 表格的 HOST 欄位或 SHOW PROCESSLIST 輸出的 Host 欄位不同,PROCESSLIST_HOST 欄位不包含 TCP/IP 連線的連接埠號碼。若要從 Performance Schema 取得此資訊,請啟用 Socket 檢測(預設為未啟用),並檢查 socket_instances 表格。

    mysql> SELECT NAME, ENABLED, TIMED
           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

    對於前景執行緒,此欄位表示執行緒代表用戶端執行的命令類型,如果會期閒置則為 Sleep。如需執行緒命令的說明,請參閱第 10.14 節「檢查伺服器執行緒(處理序)資訊」。此欄位的值對應於用戶端/伺服器協定的 COM_xxx 命令和 Com_xxx 狀態變數。請參閱第 7.1.10 節「伺服器狀態變數」

    背景執行緒不會代表用戶端執行命令,因此此欄位可能為 NULL

  • PROCESSLIST_TIME

    執行緒處於目前狀態的時間(以秒為單位)。對於複本 SQL 執行緒,此值是最後一個複製事件的時間戳記與複本主機實際時間之間經過的秒數。請參閱第 19.2.3 節「複製執行緒」

  • PROCESSLIST_STATE

    表示執行緒正在執行的動作、事件或狀態。如需 PROCESSLIST_STATE 值的說明,請參閱第 10.14 節「檢查伺服器執行緒(處理序)資訊」。如果值為 NULL,則執行緒可能對應於閒置的用戶端會期,或者其正在進行的工作未以階段進行檢測。

    大多數狀態對應於非常快速的操作。如果執行緒在給定狀態下停留數秒,可能存在需要調查的問題。

  • PROCESSLIST_INFO

    執行緒正在執行的陳述式,如果未執行任何陳述式,則為 NULL。此陳述式可能是傳送至伺服器的陳述式,如果陳述式執行其他陳述式,則為最內層的陳述式。例如,如果 CALL 陳述式執行正在執行 SELECT 陳述式的預存程序,PROCESSLIST_INFO 值會顯示 SELECT 陳述式。

  • PARENT_THREAD_ID

    如果此執行緒是子執行緒(由另一個執行緒產生),則這是產生執行緒的 THREAD_ID 值。

  • ROLE

    未使用。

  • INSTRUMENTED

    執行緒執行的事件是否已檢測。值為 YESNO

    • 對於前景執行緒,初始 INSTRUMENTED 值取決於與執行緒相關聯的使用者帳戶是否符合 setup_actors 表格中的任何列。比對是根據 PROCESSLIST_USERPROCESSLIST_HOST 欄位的值。

      如果執行緒產生子執行緒,則會針對為子執行緒建立的 threads 表格列再次進行比對。

    • 對於背景執行緒,預設情況下 INSTRUMENTEDYES。由於背景執行緒沒有相關聯的使用者,因此不會查詢 setup_actors

    • 對於任何執行緒,其 INSTRUMENTED 值可以在執行緒的生命週期內變更。

    若要發生執行緒執行的事件監控,必須符合以下條件:

    • setup_consumers 表格中的 thread_instrumentation 消費者必須為 YES

    • threads.INSTRUMENTED 欄位必須為 YES

    • 監控只會針對在 setup_instruments 表格中 ENABLED 欄位設定為 YES 的工具產生的執行緒事件發生。

  • HISTORY

    是否記錄執行緒的歷史事件。值為 YESNO

    • 對於前景執行緒,初始 HISTORY 值取決於與執行緒相關聯的使用者帳戶是否符合 setup_actors 表格中的任何列。比對是根據 PROCESSLIST_USERPROCESSLIST_HOST 欄位的值。

      如果執行緒產生子執行緒,則會針對為子執行緒建立的 threads 表格列再次進行比對。

    • 對於背景執行緒,預設情況下 HISTORYYES。由於背景執行緒沒有相關聯的使用者,因此不會查詢 setup_actors

    • 對於任何執行緒,其 HISTORY 值可以在執行緒的生命週期內變更。

    若要發生執行緒的歷史事件記錄,必須符合以下條件:

    • setup_consumers 表格中適當的歷史相關消費者必須啟用。例如,events_waits_historyevents_waits_history_long 表格中的等待事件記錄需要將對應的 events_waits_historyevents_waits_history_long 消費者設定為 YES

    • threads.HISTORY 欄位必須為 YES

    • 記錄只會針對在 setup_instruments 表格中 ENABLED 欄位設定為 YES 的工具產生的執行緒事件發生。

  • CONNECTION_TYPE

    用於建立連線的協定,背景執行緒則為 NULL。允許的值包括 TCP/IP(未加密建立的 TCP/IP 連線)、SSL/TLS(以加密建立的 TCP/IP 連線)、Socket(Unix Socket 檔案連線)、Named Pipe(Windows 具名管道連線)和 Shared Memory(Windows 共享記憶體連線)。

  • THREAD_OS_ID

    底層作業系統定義的執行緒或工作識別碼(如果有的話)

    • 當 MySQL 執行緒在其生命週期內與相同的作業系統執行緒相關聯時,THREAD_OS_ID 包含作業系統執行緒 ID。

    • 當 MySQL 執行緒在其生命週期內未與相同的作業系統執行緒相關聯時,THREAD_OS_ID 包含 NULL。當使用執行緒集區外掛程式時,使用者會期通常是這種情況(請參閱第 7.6.3 節「MySQL Enterprise 執行緒集區」)。

    對於 Windows,THREAD_OS_ID 對應於 Process Explorer 中可見的執行緒 ID (https://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)。

    對於 Linux,THREAD_OS_ID 對應於 gettid() 函式的值。例如,使用 perfps -L 命令,或在 proc 檔案系統 (/proc/[pid]/task/[tid]) 中會公開此值。如需詳細資訊,請參閱 perf-stat(1)ps(1)proc(5) 手冊頁。

  • RESOURCE_GROUP

    資源群組標籤。如果目前的平台或伺服器組態不支援資源群組,此值為 NULL(請參閱資源群組限制)。

  • EXECUTION_ENGINE

    查詢執行引擎。值為 PRIMARYSECONDARY。用於 HeatWave 服務和 HeatWave,其中 PRIMARY 引擎為 InnoDB,而 SECONDARY 引擎為 HeatWave (RAPID)。對於 MySQL Community Edition Server、MySQL Enterprise Edition Server (內部部署) 和沒有 HeatWave 的 HeatWave 服務,值始終為 PRIMARY

  • CONTROLLED_MEMORY

    執行緒使用的受控記憶體量。

  • MAX_CONTROLLED_MEMORY

    在執行緒執行期間看到的 CONTROLLED_MEMORY 最大值。

  • TOTAL_MEMORY

    執行緒目前使用的記憶體量,無論是否受控。

  • MAX_TOTAL_MEMORY

    在執行緒執行期間看到的 TOTAL_MEMORY 最大值。

  • TELEMETRY_ACTIVE

    執行緒是否附加了有效的遙測連線。值為 YESNO

threads 資料表有以下索引

  • 主鍵位於 (THREAD_ID)

  • 索引位於 (NAME)

  • 索引位於 (PROCESSLIST_ID)

  • 索引位於 (PROCESSLIST_USER, PROCESSLIST_HOST)

  • 索引位於 (PROCESSLIST_HOST)

  • 索引位於 (THREAD_OS_ID)

  • 索引位於 (RESOURCE_GROUP)

不允許對 threads 資料表使用 TRUNCATE TABLE