文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  效能結構連線資料表

29.12.8 效能結構連線資料表

當用戶端連線至 MySQL 伺服器時,它會使用特定使用者名稱和來自特定主機進行連線。效能結構會提供這些連線的統計資訊,使用以下資料表,依據帳戶(使用者和主機組合)以及分別依據使用者名稱和主機名稱追蹤它們

  • accounts:每個用戶端帳戶的連線統計資訊

  • hosts:每個用戶端主機名稱的連線統計資訊

  • users:每個用戶端使用者名稱的連線統計資訊

連線資料表中「帳戶」的意義,與 mysql 系統資料庫中 MySQL 授權資料表中的意義類似,因為該詞指的是使用者和主機值的組合。它們的不同之處在於,對於授權資料表,帳戶的主機部分可以是模式,而對於效能結構資料表,主機值始終是特定的非模式主機名稱。

每個連線資料表都有 CURRENT_CONNECTIONSTOTAL_CONNECTIONS 資料行,以追蹤每個基於其統計資料的「追蹤值」的目前和連線總數。資料表的不同之處在於它們使用什麼來作為追蹤值。accounts 資料表具有 USERHOST 資料行,以追蹤每個使用者和主機組合的連線。usershosts 資料表分別具有 USERHOST 資料行,以追蹤每個使用者名稱和主機名稱的連線。

效能結構也會計算內部執行緒和使用者工作階段的執行緒,這些執行緒驗證失敗,使用 USERHOST 資料行值為 NULL 的資料列。

假設名為 user1user2 的用戶端分別從 hostahostb 連線一次。效能結構會追蹤以下連線

  • accounts 資料表有四個資料列,分別用於 user1/hostauser1/hostbuser2/hostauser2/hostb 帳戶值,每個資料列計算每個帳戶一個連線。

  • hosts 資料表有兩個資料列,分別用於 hostahostb,每個資料列計算每個主機名稱兩個連線。

  • users 資料表有兩個資料列,分別用於 user1user2,每個資料列計算每個使用者名稱兩個連線。

當用戶端連線時,效能結構會使用適用於每個資料表的追蹤值,判斷每個連線資料表中適用的資料列。如果沒有此資料列,則會新增一個資料列。然後,效能結構會在該資料列中將 CURRENT_CONNECTIONSTOTAL_CONNECTIONS 資料行的值加一。

當用戶端斷線時,Performance Schema 會將該列中的 CURRENT_CONNECTIONS 欄位的值減一,而 TOTAL_CONNECTIONS 欄位的值則保持不變。

TRUNCATE TABLE 允許用於連線表格。它有以下效果:

  • 會移除沒有目前連線的帳戶、主機或使用者的資料列(即 CURRENT_CONNECTIONS = 0 的資料列)。

  • 未被移除的資料列會重置為僅計入目前連線:對於 CURRENT_CONNECTIONS > 0 的資料列,TOTAL_CONNECTIONS 會重置為 CURRENT_CONNECTIONS 的值。

  • 依賴於連線表格的摘要表格會被隱式截斷,如本節稍後所述。

Performance Schema 維護摘要表格,這些表格會依據帳戶、主機或使用者,彙總各種事件類型的連線統計資訊。這些表格的名稱中包含 _summary_by_account_summary_by_host_summary_by_user。若要識別它們,請使用此查詢:

mysql> SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
       WHERE TABLE_SCHEMA = 'performance_schema'
       AND TABLE_NAME REGEXP '_summary_by_(account|host|user)'
       ORDER BY TABLE_NAME;
+------------------------------------------------------+
| TABLE_NAME                                           |
+------------------------------------------------------+
| events_errors_summary_by_account_by_error            |
| events_errors_summary_by_host_by_error               |
| events_errors_summary_by_user_by_error               |
| events_stages_summary_by_account_by_event_name       |
| events_stages_summary_by_host_by_event_name          |
| events_stages_summary_by_user_by_event_name          |
| events_statements_summary_by_account_by_event_name   |
| events_statements_summary_by_host_by_event_name      |
| events_statements_summary_by_user_by_event_name      |
| events_transactions_summary_by_account_by_event_name |
| events_transactions_summary_by_host_by_event_name    |
| events_transactions_summary_by_user_by_event_name    |
| events_waits_summary_by_account_by_event_name        |
| events_waits_summary_by_host_by_event_name           |
| events_waits_summary_by_user_by_event_name           |
| memory_summary_by_account_by_event_name              |
| memory_summary_by_host_by_event_name                 |
| memory_summary_by_user_by_event_name                 |
+------------------------------------------------------+

有關個別連線摘要表格的詳細資訊,請查閱描述彙總事件類型表格的章節。

TRUNCATE TABLE 允許用於連線摘要表格。它會移除沒有連線的帳戶、主機或使用者的資料列,並將剩餘資料列的摘要欄位重置為零。此外,每個依據帳戶、主機、使用者或執行緒彙總的摘要表格,都會因其所依賴的連線表格的截斷而隱式截斷。下表說明了連線表格截斷和隱式截斷表格之間的關係。

表 29.2 連線表格截斷的隱式效果

已截斷的連線表格 隱式截斷的摘要表格
accounts 名稱包含 _summary_by_account_summary_by_thread 的表格
hosts 名稱包含 _summary_by_account_summary_by_host_summary_by_thread 的表格
users 名稱包含 _summary_by_account_summary_by_user_summary_by_thread 的表格

截斷 _summary_global 摘要表格也會隱式截斷其對應的連線和執行緒摘要表格。例如,截斷 events_waits_summary_global_by_event_name 會隱式截斷依據帳戶、主機、使用者或執行緒彙總的等待事件摘要表格。