按 host 分組統計檢視 | 全方位認識 sys 系統庫
在上一篇《配置表|全方位認識 sys 系統庫》中,我們介紹了sys 系統庫的配置表,但實際上我們大部分人大多數時候並不需要去修改配置表,直接使用sys 系統庫下的檢視來獲取所需的資料即可,sys 系統庫下一共有100多檢視,這些檢視都能夠給我們提供一些什麼樣的資訊呢?本期的內容先給大家介紹按照host進行分類統計相關的檢視。下面請跟隨我們一起開始 sys 系統庫的系統學習之旅吧。
在《初相識|全方位認識 sys 系統庫》一文中,我們提到過 sys 系統庫的很多檢視是成對出現的(帶x$的內部檢視主要用於程式或者檢視之間呼叫,不帶x$的主要用於人工查詢使用,返回的數值為經過單位轉換的易讀格式),按照host進行分類統計的檢視應該有6對,這些檢視提供的查詢內容本質上就是用更易讀的格式按照主機的維度進行分組統計等待事件、語句事件、階段事件等。下面我們依次進行介紹。
01.host_summary_by_file_io,x$host_summary_by_file_io
按主機(與使用者賬號組成中的host值相同)分組統計的檔案I/O的IO總數和IO延遲時間,預設按照總I/O等待時間降序排序。資料來源:performance_schema.events_waits_summary_by_host_by_event_name表,呼叫了sys.format_time()自定義函式、sum()聚合函式對查詢結果進行求和運算並轉換時間單位。
下面我們看看使用該檢視查詢返回的結果集。
# 從查詢的結果中可以看到,延遲時間帶有單位秒,對人類來說更易讀 mysql> SELECT * FROM host_summary_by_file_io; +------------+-------+------------+ | host | ios | io_latency | +------------+-------+------------+ | localhost | 67570 | 5.38 s | | background | 3468 | 4.18 s | +------------+-------+------------+ # 帶x$字首的同名檢視範圍的時間值未經過可讀格式裝換,單位為皮秒(萬億分之一秒,可讀性比較差) mysql> SELECT * FROM x$host_summary_by_file_io; +------------+-------+---------------+ | host | ios | io_latency | +------------+-------+---------------+ | localhost | 67574 | 5380678125144 | | background | 3474 | 4758696829416 | +------------+-------+---------------+
檢視欄位含義如下:
-
host:客戶端連線的主機名或IP。在Performance Schema表中的HOST列為NULL的行在這裡假定為後臺執行緒,且在該檢視host列顯示為background
-
ios:檔案I/O事件總次數,即可以認為就是io總數
-
io_latency:檔案I/O事件的總等待時間(執行時間)
PS:沒有x$字首的檢視旨在提供對使用者更加友好和更易於閱讀的輸出格式。而帶x$字首的檢視輸出的原始格式值更適用於一些工具類的程式使用。沒有x$字首的檢視中將會呼叫如下函式中的一個或者多個進行數值單位轉換再輸出(後續其他檢視的可讀格式轉換檢視相同,下文不再贅述):
-
位元組值使用format_bytes()函式格式化並轉換單位,詳見後續章節
-
時間值使用format_time()函式格式化並轉換單位。詳見後續章節
-
使用format_statement()函式將SQL語句文字截斷為statement_truncate_len配置選項設定的顯示寬度。詳見後續章節
-
路徑名稱使用format_path()函式擷取並替換為相應的系統變數名稱。詳見後續章節
-
該檢視只統計檔案IO等待事件資訊("wait/io/file/%")
02.host_summary,x$ host_summary
按照主機分組統計的語句延遲(執行)時間、次數、相關的檔案I/O延遲、連線數和記憶體分配大小等摘要資訊,資料來源:performance_schema.accounts、sys.x$host_summary_by_statement_latency、sys.x$host_summary_by_file_io
下面我們看看使用該檢視查詢返回的結果集。
# 不帶x$字首的檢視
[email protected] : sys 12:38:11> select * from host_summary limit 1\G
*************************** 1. row ***************************
host: 192.168.2.122
statements: 9
statement_latency: 13.22 ms
statement_avg_latency: 1.47 ms
table_scans: 0
file_ios: 11
file_io_latency: 53.33 us
current_connections: 1
total_connections: 1
unique_users: 1
current_memory: 0 bytes
total_memory_allocated: 0 bytes
1 row in set (0.01 sec)
# 帶x$字首的檢視
[email protected] : sys 12:38:14> select * from x$host_summary limit 1\G
*************************** 1. row ***************************
host: 192.168.2.122
statements: 9
statement_latency: 13218739000
statement_avg_latency: 1468748777.7778
table_scans: 0
file_ios: 11
file_io_latency: 53332848
current_connections: 1
total_connections: 1
unique_users: 1
current_memory: 0
total_memory_allocated: 0
1 row in set (0.01 sec)
檢視欄位含義如下:
-
host:客戶端連線的主機名或IP。在Performance Schema表中的HOST列為NULL的行在這裡假定為後臺執行緒,且在該檢視host列顯示為background
-
statements:語句總執行次數
-
statement_latency:語句總延遲時間(執行時間)
-
statement_avg_latency:語句的平均延遲時間(執行時間)
-
table_scans:語句的表掃描總次數
-
file_ios:檔案I/O事件總次數
-
file_io_latency:檔案I/O事件總延遲時間(執行時間)
-
current_connections:當前連線數
-
total_connections:總歷史連線數
-
unique_users:不同(去重)使用者數量
-
current_memory:當前記憶體使用量
-
total_memory_allocated:總的記憶體分配量
PS:該檢視只統計檔案IO等待事件資訊("wait/io/file/%")
03.host_summary_by_file_io_type,x$host_summary_by_file_io_type
按照主機和事件名稱分組的檔案I/O事件次數、延遲統計資訊,預設按照主機和總I/O延遲時間降序排序。資料來源:performance_schema.events_waits_summary_by_host_by_event_name,呼叫了sys.format_time()自定義函式轉換時間單位。
下面我們看看使用該檢視查詢返回的結果集。
# 不帶x$字首的檢視
[email protected] : sys 12:39:51> select * from host_summary_by_file_io_type limit 3;
+---------------+--------------------------------------+-------+---------------+-------------+
| host | event_name | total | total_latency | max_latency |
+---------------+--------------------------------------+-------+---------------+-------------+
| 192.168.2.122 | wait/io/file/sql/binlog | 11 | 53.33 us | 24.33 us |
| background | wait/io/file/innodb/innodb_data_file | 1631 | 5.85 s | 35.48 ms |
| background | wait/io/file/sql/FRM | 2151 | 3.89 s | 26.10 ms |
+---------------+--------------------------------------+-------+---------------+-------------+
3 rows in set (0.01 sec)
# 帶x$字首的檢視
[email protected] : sys 12:39:54> select * from x$host_summary_by_file_io_type limit 3;
+---------------+--------------------------------------+-------+---------------+-------------+
| host | event_name | total | total_latency | max_latency |
+---------------+--------------------------------------+-------+---------------+-------------+
| 192.168.2.122 | wait/io/file/sql/binlog | 11 | 53332848 | 24334839 |
| background | wait/io/file/innodb/innodb_data_file | 1631 | 5851714703037 | 35476899531 |
| background | wait/io/file/sql/FRM | 2151 | 3894316306089 | 26099526756 |
+---------------+--------------------------------------+-------+---------------+-------------+
3 rows in set (0.00 sec)
檢視欄位含義如下:
-
host:客戶端連線的主機名或IP。在Performance Schema表中的HOST列為NULL的行在這裡假定為後臺執行緒,且在該檢視host列顯示為background
-
EVENT_NAME:檔案I/O事件名稱
-
total:檔案I/O事件發生總次數
-
total_latency:檔案I/O事件的總延遲時間(執行時間)
-
max_latency:檔案I/O事件的單次最大延遲時間(執行時間)
PS:該檢視只統計檔案IO等待事件資訊("wait/io/file/%")
04.host_summary_by_stages,x$host_summary_by_stages
按照主機和事件名稱分組的階段事件總次數、總執行時間、平均執行時間等統計資訊,預設按照主機和總的延遲(執行)時間降序排序。資料來源:performance_schema.events_stages_summary_by_host_by_event_name,呼叫了sys.format_time()自定義函式轉換時間單位。
下面我們看看使用該檢視查詢返回的結果集。
# 不帶x$字首的檢視
[email protected] : sys 12:39:57> select * from host_summary_by_stages limit 3;
+------------+-------------------------------+-------+---------------+-------------+
| host | event_name | total | total_latency | avg_latency |
+------------+-------------------------------+-------+---------------+-------------+
| background | stage/innodb/buffer pool load | 1 | 4.68 s | 4.68 s |
+------------+-------------------------------+-------+---------------+-------------+
1 row in set (0.00 sec)
# 帶x$字首的檢視
[email protected] : sys 12:40:15> select * from x$host_summary_by_stages limit 3;
+------------+-------------------------------+-------+---------------+---------------+
| host | event_name | total | total_latency | avg_latency |
+------------+-------------------------------+-------+---------------+---------------+
| background | stage/innodb/buffer pool load | 1 | 4678671071000 | 4678671071000 |
+------------+-------------------------------+-------+---------------+---------------+
1 row in set (0.00 sec)
檢視欄位含義如下:
-
host:客戶端連線的主機名或IP。在Performance Schema表中的HOST列為NULL的行在這裡假定為後臺執行緒,且在該檢視host列顯示為background
-
EVENT_NAME:階段事件名稱
-
total:階段事件總髮生次數
-
total_latency:階段事件總延遲(執行)時間
-
avg_latency:階段事件平均延遲(執行)時間
05.host_summary_by_statement_latency,x$host_summary_by_statement_latency
按照主機和事件名稱分組的語句事件總次數、總執行時間、最大執行時間、鎖時間以及資料行相關的統計資訊,預設按照總延遲(執行)時間降序排序。資料來源:performance_schema.events_statements_summary_by_host_by_event_name
下面我們看看使用該檢視查詢返回的結果集。
# 不帶x$字首的檢視
[email protected] : sys 12:40:19> select * from host_summary_by_statement_latency limit 3;
+---------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
| host | total | total_latency | max_latency | lock_latency | rows_sent | rows_examined | rows_affected | full_scans |
+---------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
| localhost | 3447 | 539.61 ms | 89.37 ms | 131.90 ms | 3023 | 40772 | 0 | 108 |
| 192.168.2.122 | 9 | 13.22 ms | 12.55 ms | 0 ps | 5 | 0 | 0 | 0 |
| background | 0 | 0 ps | 0 ps | 0 ps | 0 | 0 | 0 | 0 |
+---------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
3 rows in set (0.01 sec)
# 帶x$字首的檢視
[email protected] : sys 12:40:36> select * from x$host_summary_by_statement_latency limit 3;
+---------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
| host | total | total_latency | max_latency | lock_latency | rows_sent | rows_examined | rows_affected | full_scans |
+---------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
| localhost | 3528 | 544883806000 | 89365202000 | 132140000000 | 3026 | 41351 | 0 | 109 |
| 192.168.2.122 | 9 | 13218739000 | 12550251000 | 0 | 5 | 0 | 0 | 0 |
| background | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
+---------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
3 rows in set (0.01 sec)
檢視欄位含義如下:
-
host:客戶端連線的主機名或IP。在Performance Schema表中的HOST列為NULL的行在這裡假定為後臺執行緒,且在該檢視host列顯示為background
-
total:語句總執行次數
-
total_latency:語句總延遲(執行)時間
-
max_latency:語句單個最大延遲(執行)時間
-
lock_latency:語句總鎖延遲(執行)時間
-
rows_sent:語句返回給客戶端的總資料行數
-
rows_examined:語句從儲存引擎層讀取的總資料行數
-
rows_affected:語句執行時受影響(DML會返回資料發生變更的受影響行數,select等不會產生資料變更的語句執行時不會有受影響行數返回)的總資料行數
-
full_scans:語句全表掃描總次數
06.host_summary_by_statement_type,x$host_summary_by_statement_type
按照主機和語句分組的當前語句事件總次數、總執行時間、最大執行時間、鎖時間以及資料行相關的統計資訊(與performance_schema.host_summary_by_statement_latency 檢視比起來,該檢視只返回執行時間不為0的統計資訊,且多了一個statement欄位顯示語句事件名稱層級中的最後一部分字元),資料來源:performance_schema.events_statements_summary_by_host_by_event_name
下面我們看看使用該檢視查詢返回的結果集。
# 不帶x$字首的檢視
[email protected] : sys 12:40:40> select * from host_summary_by_statement_type limit 3;
+---------------+----------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
| host | statement | total | total_latency | max_latency | lock_latency | rows_sent | rows_examined | rows_affected | full_scans |
+---------------+----------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
| 192.168.2.122 | select | 5 | 12.92 ms | 12.55 ms | 0 ps | 5 | 0 | 0 | 0 |
| 192.168.2.122 | set_option | 3 | 258.22 us | 166.40 us | 0 ps | 0 | 0 | 0 | 0 |
| 192.168.2.122 | Register Slave | 1 | 37.68 us | 37.68 us | 0 ps | 0 | 0 | 0 | 0 |
+---------------+----------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
3 rows in set (0.00 sec)
# 帶x$字首的檢視
[email protected] : sys 12:41:00> select * from x$host_summary_by_statement_type limit 3;
+---------------+----------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
| host | statement | total | total_latency | max_latency | lock_latency | rows_sent | rows_examined | rows_affected | full_scans |
+---------------+----------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
| 192.168.2.122 | select | 5 | 12922834000 | 12550251000 | 0 | 5 | 0 | 0 | 0 |
| 192.168.2.122 | set_option | 3 | 258224000 | 166400000 | 0 | 0 | 0 | 0 | 0 |
| 192.168.2.122 | Register Slave | 1 | 37681000 | 37681000 | 0 | 0 | 0 | 0 | 0 |
+---------------+----------------+-------+---------------+-------------+--------------+-----------+---------------+---------------+------------+
3 rows in set (0.01 sec)
檢視欄位含義如下:
-
statement:顯示語句事件名稱層級中的最後一部分字元,如:statement/com/Prepare instruments,在statement欄位中就顯示Prepare
-
其他欄位含義與performance_schema.host_summary_by_statement_latency 檢視欄位含義相同
PS:限於篇幅原因,本文在編輯時刪除了檢視的原始語句文字資訊(後續文章類似處理),關於檢視的原始語句文字資訊,可以根據《初相識|全方位認識 sys 系統庫》一文中提到的下載連結,下載相應的SQL檔案進行檢視,另外,有沒有發現一些檢視查詢的內容相似度很高有點傻傻分不清,而且可能還不能完全覆蓋我們想要查詢的疏忽呢?是的,的確有這個問題,但沒有關係,我們只要弄清楚sys 系統庫預設了哪些檢視,這些檢視是怎麼編寫的,如果真的出現預設檢視無法滿足我們的要求,那麼我們可以基於預設檢視的語句文字進行修改(但要注意,不可直接修改sys系統庫的原有檢視,因為sys預設檢視中相當一部分檢視有相互呼叫關係,擅自修改可能會導致內部調用出錯),想怎麼寫就怎麼寫,是不是想想就很激動呢!
本期內容就介紹到這裡,本期內容參考連結如下:
-
https://dev.mysql.com/doc/refman/5.7/en/sys-host-summary-by-statement-type.html
-
https://dev.mysql.com/doc/refman/5.7/en/sys-schema-views.html
-
https://dev.mysql.com/doc/refman/5.7/en/sys-host-summary-by-file-io.html
-
https://dev.mysql.com/doc/refman/5.7/en/sys-host-summary-by-file-io-type.html
-
https://dev.mysql.com/doc/refman/5.7/en/sys-host-summary-by-stages.html
-
https://dev.mysql.com/doc/refman/5.7/en/sys-host-summary-by-statement-latency.html
-
https://dev.mysql.com/doc/refman/5.7/en/sys-host-summary.html
| 作者簡介
羅小波·沃趣科技高階資料庫技術專家
IT從業多年,歷任運維工程師,高階運維工程師,運維經理,資料庫工程師,曾參與版本釋出系統,輕量級監控系統,運維管理平臺,資料庫管理平臺的設計與編寫,熟悉MySQL的體系結構時,InnoDB儲存引擎,喜好專研開源技術,追求完美。
相關推薦
按 host 分組統計檢視 | 全方位認識 sys 系統庫
在上一篇《配置表|全方位認識 sys 系統庫》中,我們介紹了sys 系統庫的配置表,但實際上我們大部分人大多數時候並不需要去修改配置表,直接使用sys 系統庫下的檢視來獲取所需的資料即可,sys 系統庫下一共有100多檢視,這些檢視都能夠給我們提供一些什麼樣的資訊呢?本期的內
記憶體分配統計檢視 | 全方位認識 sys 系統庫
在上一篇《按 file 分組統計檢視 | 全方位認識 sys 系統庫》中,我們介紹了sys 系統庫中按 file 分組統計的檢視,本期的內容將為大家介紹記憶體事件和innodb buffer pool記憶體分配的統計檢視。下面請跟隨我們一起開始 sys 系統庫的系統學習之旅吧。 PS:
語句效率統計檢視 | 全方位認識 sys 系統庫
在上一篇《統計資訊查詢檢視|全方位認識 sys 系統庫》中,我們介紹了利用sys 系統庫的查詢統計資訊的快捷檢視,本期將為大家介紹語句查詢效率語句統計資訊相關的檢視,這些檢視可以快速找出資料庫中哪些語句使用了全表掃描、哪些語句使用了檔案排序、哪些語句使用了臨時表。 PS:由於本文中所提及的檢視功
統計資訊查詢檢視 | 全方位認識 sys 系統庫
在上一篇《會話和鎖資訊查詢檢視|全方位認識 sys 系統庫》中,我們介紹瞭如何使用 sys 系統庫總的檢視來查詢會話狀態資訊以及鎖等待資訊,本期的內容先給大家介紹查詢表和索引相關的統計資訊快捷檢視。下面請跟隨我們一起開始 sys 系統庫的系統學習之旅吧。 PS:由於本文中所提及的檢視功能的特殊性
會話和鎖資訊查詢檢視 | 全方位認識 sys 系統庫
在上一篇《等待事件統計檢視 | 全方位認識 sys 系統庫》中,我們介紹了sys 系統庫中的等待事件統計檢視,本期的內容先給大家介紹會話資訊和鎖等待資訊查詢檢視,通過這些檢視我們可以清晰地知道每個會話正在做什麼事情,是否存在鎖等待。下面請跟隨我們一起開始 sys 系統庫的系統
用於檢視配置的儲存過程 | 全方位認識 sys 系統庫
在上一篇《用於修改配置的儲存過程 | 全方位認識 sys 系統庫》中,我們介紹了sys 系統庫中用於修改配置的儲存過程,利用這些儲存過程可以代替修改performance_schema配置表的DML語句等操作,本期的內容講介紹用於檢視performance_schema配置資訊的儲存過程。 PS
配置查詢與執行緒追蹤函式|全方位認識 sys 系統庫
不知不覺中,我們的"全方位認識 sys 系統庫" 系列文章已經接近尾聲了,在上一篇《字串與數字轉換函式|全方位認識 sys 系統庫》中,我們介紹了sys 系統庫中用於字串和數字格式化轉換的函式,本期的內容給大家介紹 sys 系統庫中的剩餘函式,這也是本系列文章的最後一篇。 PS:下文中如果函式定
字串與數字轉換函式 | 全方位認識 sys 系統庫
本系列在之前的文章中我們為大家介紹了sys 系統庫的快捷檢視、函式,本期開始我們將為大家介紹 sys 系統庫的函式。 PS:下文中如果函式定義文字較短的會列出部分函式的定義文字,以便大家更直觀地學習它們。過長的函式定義文字請自行按照《初相識|全方位認識 sys 系統庫》一文
配置表 | 全方位認識 sys 系統庫
在上一篇《初相識 | 全方位認識 sys 系統庫》中,我們針對sys 系統庫做了一個不痛不癢的開端,是不是覺得太簡單了?別急,本期我們將為大家帶來系列第二篇《配置表|全方位認識 sys 系統庫》,讓你一次性重新找回學習performance_schema時的感覺,下面請跟隨我
mongodb 計算季度 & 按季度分組統計
計算季度: db.task.aggregate([{ $match: { "createDate": {$ne: null} } }, { $project: { status: 1, createDate: 1, qu
mongodb aggregate按日期分組統計及spring mongo實現
如需轉載請註明出處: mongodb aggregate按日期分組統計及spring mongo實現 實現的需求 傳入毫秒級開始時間戳和結束的時間戳,根據當前狀態currentStatus.status和當前狀態時間currentStatus.datetime進行按日統計,缺少數
Oracle 按時間段分組統計 (使用LEVEL)
想要按時間段分組查詢,首先要了解level,connect by,oracle時間的加減. 關於level這裡不多說,我只寫出一個查詢語句: ---level 是一個偽例 selectlevelfrom dual connectbylevel <=10 ---結果:1 2
記錄一個mysql按日期分組統計的查詢
SELECT DATE_FORMAT( deteline, "%Y-%m-%d %H" ) , COUNT( * ) FROM testGROUP BY DATE_FORMAT( deteline, "%Y-%m-%d %H" ) 查詢某天: deteline, "%Y
按時間分組統計的SQL語句
如下表table1: 日期(exportDate) 數量(amount) -------------- ----------- 14-2月 -08 2
Mysql 根據時間戳按年月日分組統計(做個收藏)
create_time時間格式 SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY weeks; SELECT DATE_FO
Oracle 按時間段分組統計
想要按時間段分組查詢,首先要了解level,connect by,oracle時間的加減. 關於level這裡不多說,我只寫出一個查詢語句: ---level 是一個偽例 select level from dual connect by level <=1
MySQL DATE_FORMAT用法,按周,按月,按日分組統計資料
MySQL DATE_FORMAT用法: DATE_FORMAT(date,format) 根據format字串格式化date值。下列修飾符可以被用在format字串中: %M 月名字(January……December) %W 星期名字(Sunday……S
SQL語句 按年齡段分組統計人數
create table #t(Uname varchar(10),age int) insert #t select '啊啊',19 union all select '資訊',23 union
Mysql 根據時間戳、時間按年月日分組統計
下列修飾符可以被用在format字串中: %M 月名字(January……December) %W 星期名字(Sunday……Saturday) %D 有英語字首的月份的日期(1st, 2nd, 3rd, 等等。) %Y 年, 數字, 4 位 %y 年, 數字, 2 位 %a 縮寫的星期名字(Sun……Sat
Oracle按日期分組統計資料
昨天專案突然改了個需求,要求折線圖的資料顯示,必須按照月三天,季度九天來分組統計資料,網上搜索了一堆,差點沒找著相關的!還好找到了類似的,現整理下提供給有需要的大家參考參考! (本人是在Oracle