當用戶端連線至 MySQL 伺服器時,它會使用特定使用者名稱和來自特定主機進行連線。效能結構會提供這些連線的統計資訊,使用以下資料表,依據帳戶(使用者和主機組合)以及分別依據使用者名稱和主機名稱追蹤它們
連線資料表中「帳戶」的意義,與 mysql
系統資料庫中 MySQL 授權資料表中的意義類似,因為該詞指的是使用者和主機值的組合。它們的不同之處在於,對於授權資料表,帳戶的主機部分可以是模式,而對於效能結構資料表,主機值始終是特定的非模式主機名稱。
每個連線資料表都有 CURRENT_CONNECTIONS
和 TOTAL_CONNECTIONS
資料行,以追蹤每個基於其統計資料的「追蹤值」的目前和連線總數。資料表的不同之處在於它們使用什麼來作為追蹤值。accounts
資料表具有 USER
和 HOST
資料行,以追蹤每個使用者和主機組合的連線。users
和 hosts
資料表分別具有 USER
和 HOST
資料行,以追蹤每個使用者名稱和主機名稱的連線。
效能結構也會計算內部執行緒和使用者工作階段的執行緒,這些執行緒驗證失敗,使用 USER
和 HOST
資料行值為 NULL
的資料列。
假設名為 user1
和 user2
的用戶端分別從 hosta
和 hostb
連線一次。效能結構會追蹤以下連線
當用戶端連線時,效能結構會使用適用於每個資料表的追蹤值,判斷每個連線資料表中適用的資料列。如果沒有此資料列,則會新增一個資料列。然後,效能結構會在該資料列中將 CURRENT_CONNECTIONS
和 TOTAL_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 |
+------------------------------------------------------+
有關個別連線摘要表格的詳細資訊,請查閱描述彙總事件類型表格的章節。
等待事件摘要:第 29.12.20.1 節,「等待事件摘要表格」
階段事件摘要:第 29.12.20.2 節,「階段摘要表格」
語句事件摘要:第 29.12.20.3 節,「語句摘要表格」
交易事件摘要:第 29.12.20.5 節,「交易摘要表格」
記憶體事件摘要:第 29.12.20.10 節,「記憶體摘要表格」
錯誤事件摘要:第 29.12.20.11 節,「錯誤摘要表格」
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
會隱式截斷依據帳戶、主機、使用者或執行緒彙總的等待事件摘要表格。