當用戶端連線到 MySQL 伺服器時,它會使用特定使用者名稱並從特定主機連線。效能架構提供有關這些連線的統計資訊,追蹤每個帳戶(使用者和主機組合)以及每個使用者名稱和主機名稱的連線,使用這些表格
連線表格中「帳戶」的含義與 mysql
系統資料庫中 MySQL 授權表格中的含義類似,因為該術語是指使用者和主機值的組合。它們的不同之處在於,對於授權表格,帳戶的主機部分可以是模式,而對於效能架構表格,主機值始終是特定的非模式主機名稱。
每個連線表格都有 CURRENT_CONNECTIONS
和 TOTAL_CONNECTIONS
欄位,用來追蹤每個「追蹤值」上的目前和總連線數,其統計資料即以此為基礎。表格之間的差異在於它們用於追蹤值的內容。accounts
表格有 USER
和 HOST
欄位,用於追蹤每個使用者和主機組合的連線數。users
和 hosts
表格分別有 USER
和 HOST
欄位,用於追蹤每個使用者名稱和主機名稱的連線數。
Performance Schema 還會計算內部執行緒和驗證失敗的使用者工作階段的執行緒,這些列的 USER
和 HOST
欄位值為 NULL
。
假設名為 user1
和 user2
的用戶端各自從 hosta
和 hostb
連線一次。Performance Schema 會追蹤連線如下:
當用戶端連線時,Performance Schema 會使用適用於每個表格的追蹤值,來判斷每個連線表格中適用的列。如果沒有這樣的列,則會新增一列。然後,Performance Schema 會將該列中的 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
會隱含地截斷依帳戶、主機、使用者或執行緒彙總的等待事件摘要表格。