MySQL sys Schema 簡單介紹-1
參考文件:
- MySQL- 5.7 sys schema筆記
- MySQL 5.7新特性:SYS庫詳解
- MySQL Performance Schema&sys Schema介紹
- 記憶體分配統計檢視 | 全方位認識 sys 系統庫
- MySQL sys Schema
- 初相識 | 全方位認識sys系統庫
- MySQL 5.7 Reference Manual / MySQL sys Schema
雖然MySQL5.7中有sys Schema這樣子的特性,提供了一系列檢視檢視MySQL資料庫當前的執行狀態和效能資訊,但是一直以來都使用過和認真的閱讀過相關的文件。正好這次部門有一個比較的重要的線下計算系統每天半夜計算的時候總是記憶體報使用率95%以上,同時伴有資料庫被作業系統kill掉的情況發生。在調查原因的過程中,使用了sys schema 的相關功能,特此記錄下。
1. sys schema 介紹
從mysql5.5開始mysql提供了performance_schema效能引擎,可以通過查詢這個庫獲取當前MySQL的執行狀態。但是這個庫比較複雜,而且查詢和操作起來也不是方便,因此從5.7開始提供了sys Schema 庫方便DBA進行操作。sys schema的基礎資料都來自於performance和information_shcema兩個庫,本身不儲存及集採資料。
2. sys schema 功能
在這裡來介紹下sys schema都可以提供哪些資料。在sys schema 中提供了大量的物件,這些物件包括檢視,表,觸發器,函式,儲存過程等。通過以下的語句查詢overview檢視,就可以知道sys庫中有多少的物件。 可以看出這個庫中就一個表,其他的絕大部分是檢視。
mysql> use sys Database changed mysql> select * from schema_object_overview where db='sys'; +-----+---------------+-------+ | db | object_type | count | +-----+---------------+-------+ | sys | PROCEDURE | 26 | | sys | VIEW | 100 | | sys | BASE TABLE | 1 | | sys | INDEX (BTREE) | 1 | | sys | TRIGGER | 2 | | sys | FUNCTION | 22 | +-----+---------------+-------+ 6 rows in set (16.84 sec)
2.2 sys中的檢視
在sys庫中佔絕大多數的物件是檢視。如果通過show tables命令檢視庫中的物件,會發現這些檢視有2種不同的形式。 例如顯示當前mysql伺服器實際使用了多少記憶體的檢視有如下的形式:
memory_global_total
x$memory_global_total
那麼這兩種形式的檢視有什麼不同呢?
- 以字母開頭的檢視是經過轉換後,便於人類閱讀的形式。
- 以 "x" 開頭的檢視,是沒有經過格式化的,方便程式進行處理。
例如通過以下2個檢視的對比,就可以看出區別。
mysql> select * from memory_global_total;
+-----------------+
| total_allocated |
+-----------------+
| 183.85 MiB |
+-----------------+
1 row in set (0.09 sec)
mysql> select * from x$memory_global_total;
+-----------------+
| total_allocated |
+-----------------+
| 192784960 |
+-----------------+
1 row in set (0.00 sec)
接下來對sys schema中的其他檢視做下簡單的介紹,庫中檢視彙總如下:
檢視 | 描述 |
---|---|
host開頭的檢視 | 以主機層面為視角,統計相關的資訊 |
user開頭的檢視 | 以使用者的視角統計相關的資訊 |
innodb開頭的檢視 | 在innodb引擎層面,統計innodb buffer資訊和事務等待innodb鎖資訊 |
io開頭的檢視 | 以i/o層面,統計io相關的資訊 |
memory開頭的檢視 | 以記憶體層面為視角,統計分析記憶體使用情況相關資訊 |
schema開頭的檢視 | 以schema層面為視角,統計schema相關資訊 |
session開頭的檢視 | 以會話層面為視角,統計使用者連線相關的資訊 |
statement開頭的檢視 | 在sql語句層面,統計和分析相關語句的資訊 |
statements開頭的檢視 | 以語句層面為視角,統計分析出錯的語句,進行全表掃描, 執行時間超長,排序等語句的資訊 |
wait開頭的檢視 | 以wait層面為視角,統計相關資訊 |
metrics開頭的檢視 | 資料庫內部的統計值資訊 |
processlist開頭的檢視 | 執行緒相關的資訊(包含內部執行緒及使用者連線) |
接下來將介紹幾個使用比較多的檢視:
- host 開頭的檢視
- user開頭的檢視
- innodb開頭的檢視
- io開頭的檢視
- memory開頭的檢視
2.2.1 host 開頭的檢視
2.2.1.1 host_summary表
host_summary表按host分組統計了語句的執行時間,次數,相關檔案的IO,連線數和記憶體分配等資訊。這個檢視擁有列如下:
列名 | 作用 |
---|---|
host | 客戶端連線的主機名或IP |
statements | 總共執行的語句數 |
statement_latency | 語句執行所花費的總時間 |
statement_avg_latency | 執行的語句資料平均耗時 |
table_scans | 一共傳送了多少次全表掃描 |
file_ios | 檔案io事件總次數 |
file_io_latency | 檔案io事件總執行時間 |
current_connections | 當前連線數 |
total_connections | 總共的連線數 |
unique_users | (去重)使用者總數 |
current_memory | 當前賬戶分配的記憶體數 |
total_memory_allocated | 該host總計分配的記憶體數 |
mysql> select * from host_summary limit 1 \G
*************************** 1. row ***************************
host: XXXXX
statements: 2048
statement_latency: 4.81 s
statement_avg_latency: 2.35 ms
table_scans: 917
file_ios: 7882
file_io_latency: 2.51 s
current_connections: 0
total_connections: 6
unique_users: 1
current_memory: 0 bytes
total_memory_allocated: 0 bytes
2.2.1.2 host_summary_by_file_io表
從host角度分組統了I/O的總體情況。這個檢視擁有列如下:
列名 | 作用 |
---|---|
host | 客戶端連線的主機名或IP |
ios | 總I/O請求資料 |
io_latency | I/O請求消耗的總時間 |
mysql> select * from host_summary_by_file_io limit 1 \G
*************************** 1. row ***************************
host: localhost
ios: 136686048
io_latency: 3.07 d
1 row in set (0.02 sec)
2.2.1.3 host_summary_by_file_io_type表
從host角度,統計了每個I/O事件的資訊。 這個檢視擁有列如下:
列名 | 作用 |
---|---|
host | 客戶端連線的主機名或IP |
event_name | I/O事件名稱 |
total | 總共發生了多少次I/O事件 |
total_latency | I/O請求消耗的總時間 |
max_latency | 最大IO執行時間 |
mysql> select * from host_summary_by_file_io_type limit 1 \G
*************************** 1. row ***************************
host: XXXXXX
event_name: wait/io/file/sql/FRM
total: 2868
total_latency: 1.62 s
max_latency: 71.06 ms
1 row in set (0.08 sec)
2.2.1.4 host_summary_by_stages表
從host角度,統計了每個I/O事件各個階段的資訊。這個檢視擁有如下的列:
列名 | 作用 |
---|---|
host | 客戶端連線的主機名或IP |
event_name | 檔案io事件各個階段名稱(注意和上一個檢視的區別,這裡記錄的是事件各個階段的名稱) |
total | 總共發生了多少次I/O事件 |
total_latency | I/O請求消耗的總時間 |
max_latency | 最大I/O執行時間 |
mysql> select * from host_summary_by_stages limit 1 \G
*************************** 1. row ***************************
host: background
event_name: stage/innodb/buffer pool load
total: 1
total_latency: 4.17 ms
avg_latency: 4.17 ms
1 row in set (0.00 sec)
2.2.1.5 host_summary_by_statement_latency表
按照host角度,統計了host執行語句的總體情況。包括執行的sql語句數,執行時間,鎖等待時間,返回的資料量等資訊。 這個檢視擁有如下的列:
列名 | 作用 |
---|---|
host | 客戶端連線的主機名或IP |
total | 總共執行了多少語句 |
total_latency | 所有語句執行的時間彙總 |
max_latency | 語句最長執行時間 |
lock_lateccy | 鎖等待的總計時間 |
rows_sent | 當前host總計通過語句返回了多少的資料 |
rows_affected | 當前host總計更改了多少的資料 |
full_scans | 當前host全表掃描的次數 |
mysql> select * from host_summary_by_statement_latency limit 1 \G
*************************** 1. row ***************************
host: localhost
total: 123861
total_latency: 1.24 d
max_latency: 1.68 h
lock_latency: 6.03 s
rows_sent: 41473119
rows_examined: 13417905908
rows_affected: 12801220
full_scans: 5059
2.2.1.6 host_summary_by_statement_type表
按照host和語句的執行型別,分組統計了包括執行的sql語句數,執行時間,鎖等待時間,返回的資料量等資訊。這個檢視只返回執行時間不為0的統計資訊。
這個檢視擁有如下的列:
列名 | 作用 |
---|---|
host | 客戶端連線的主機名或IP |
statement | 最後一次執行的語句名 |
total | 總共執行了多少語句 |
total_latency | 所有語句執行的時間彙總 |
max_latency | 語句最長執行時間 |
lock_lateccy | 鎖等待的總計時間 |
rows_sent | 當前host總計通過語句返回了多少的資料 |
rows_affected | 當前host總計更改了多少的資料 |
full_scans | 當前host全表掃描的次數 |
在這裡提到的語句執行型別是什麼呢?來看下錶裡的資料就知道了。從下面的結果可以看出執行語句的型別,就是執行的是select,update等等語句。
mysql> select distinct statement from host_summary_by_statement_type ;
+-----------------------+
| statement |
+-----------------------+
| select |
| create_table |
| alter_table |
| update |
| insert |
| insert_select |
| delete |
| drop_table |
| show_databases |
| show_tables |
| show_fields |
| show_variables |
| show_status |
| show_engine_status |
| show_slave_status |
| show_grants |
| show_create_table |
| show_table_status |
| show_triggers |
| load |
| set_option |
| lock_tables |
| unlock_tables |
| change_db |
| replace |
| replace_select |
| flush |
| rollback |
| commit |
| begin |
| delete_multi |
| update_multi |
| show_warnings |
| show_create_func |
| show_procedure_status |
| show_function_status |
| show_create_trigger |
| error |
| stmt |
| set |
| jump |
| jump_if_not |
| freturn |
| Quit |
| Init DB |
| set_case_expr |
| Ping |
+-----------------------+
47 rows in set (0.01 sec)
mysql> select * from host_summary_by_statement_type limit 1 \G
*************************** 1. row ***************************
host: XXXX
statement: select
total: 191798
total_latency: 57.59 s
max_latency: 208.20 ms
lock_latency: 22.66 s
rows_sent: 412
rows_examined: 12479336
rows_affected: 0
full_scans: 106
1 row in set (0.01 sec)
2.2.2 innodb 開頭的檢視
innodb開頭的檢視,主要是顯示innodb buffer相關的統計資訊。雖然這個庫提供了不少innodb buffer的相關資訊,但是查詢這些表的相關資訊會一定程度是上影響資料庫的效能。mysql官方文件上有如下的提示:
Warning
Querying views that access the INNODB_BUFFER_PAGE table can affect performance. Do not query these views on a production system unless you are aware of the performance impact and have determined it to be acceptable. To avoid impacting performance on a production system, reproduce the issue you want to investigate and query buffer pool statistics on a test instance.
2.2.2.1 innodb_buffer_stats_by_schema表
按資料分組統計了innodb buffer的相關資訊。這個檢視擁有如下的列:
列名 | 作用 |
---|---|
object_schema | 資料庫名稱 |
allocated | 分配給當前這個庫的總位元組數(包括了資料和其他相關的內容的總大小) |
data | 分配給當前這個庫的位元組數(資料總大小) |
pages | 分配給當前這個庫的頁面數 |
pages_hashed | 分配給當前這個庫的hash頁數 |
pages_old | 分配給當前資料庫的舊頁數 |
rows_cached | 當前有多少行快取在buffer中 |
mysql> select * from innodb_buffer_stats_by_schema limit 1 \G
*************************** 1. row ***************************
object_schema: XXXXX
allocated: 38.59 GiB
data: 35.58 GiB
pages: 2528767
pages_hashed: 163354
pages_old: 782043
rows_cached: 73175818
1 row in set (2 min 25.12 sec)
2.2.2.2 innodb_buffer_stats_by_table表
從表的角度提供innodb buffer 的統計資訊。這個檢視擁有如下的列:
列名 | 作用 |
---|---|
object_schema | 資料庫名稱 |
allocated | 分配給當前這個庫的總位元組數(包括了資料和其他相關的內容的總大小) |
data | 分配給當前這個庫的位元組數(資料總大小) |
pages | 分配給當前這個庫的頁面數 |
pages_hashed | 分配給當前這個庫的hash頁數 |
pages_old | 分配給當前資料庫的舊頁數 |
rows_cached | 當前有多少行快取在buffer中 |
mysql> select * from innodb_buffer_stats_by_table limit 1 \G
*************************** 1. row ***************************
object_schema: XXX
object_name: XXX
allocated: 23.08 GiB
data: 15.88 GiB
pages: 1512638
pages_hashed: 745355
pages_old: 213638
rows_cached: 207340166
1 row in set (3 min 52.70 sec)
2.2.2.3 innodb_lock_waits表
這個檢視彙總了innodb事物正在等待的鎖的情況。這個檢視擁有如下的列:
列名 | 作用 |
---|---|
wait_started | 鎖等待的開始時間 |
wait_age | 鎖已經等待了多長時間 |
wait_age_secs | 以秒為單位顯示鎖已經等待的時間(5.7.9中新增此列)。 |
locked_table | 被鎖的表 |
locked_index | 被鎖住的索引 |
locked_type | 鎖型別 |
waiting_trx_id | 正在等待的事務ID |
waiting_trx_started | 正在等待的事務開始的時間 |
waiting_trx_age | 正在等待的事務等待了多長時間 |
waiting_trx_rows_locked | 有多少行記錄被當前的事物鎖住 |
waiting_trx_rows_modified | 正在等待的事務,修改的行數量 |
waiting_pid | 正在等待的事務所屬的執行緒ID,既show processlist看到的ID |
waiting_query | 正在等待的事物,當前正在執行的語句 |
waiting_lock_id | 鎖的ID |
waiting_lock_mode | 鎖的模式 |
blocking_trx_id | 阻塞的事務的id |
blocking_pid | 阻塞的事務所屬的執行緒ID,既show processlist看到的ID |
blocking_query | 阻塞的事務當前正在執行的操作 |
blocking_lock_id | 阻塞事務的鎖的id |
blocking_lock_mode | 阻塞的模式 |
blocking_trx_started | 阻塞的事務的開始時間 |
blocking_trx_age | 阻塞的事務的已經執行了多少時間 |
blocking_trx_rows_locked | 阻塞的事務鎖住了多少行 |
blocking_trx_rows_modified | 阻塞的事務修改了多少行 |
sql_kill_blocking_query | kill語句殺死正在執行的阻塞事務 |
sql_kill_blocking_connection | kill語句殺死會話中正在執行的阻塞事務 |
我們來看看當有個阻塞的事物的時候,這個表中資料的情況:
1.首先建立一個表 ,同時有資料如下:
mysql> show create table test_lock \G
*************************** 1. row ***************************
Table: test_lock
Create Table: CREATE TABLE `test_lock` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> select * from test_lock;
+-----+
| id |
+-----+
| 3 |
| 10 |
| 100 |
+-----+
3 rows in set (0.00 sec)
2.事務1
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> update test_lock set id =2 where id =10;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
3.事物2
mysql> begin ;
mysql> select * from test_lock where id = 10 for update ;
4.show processlist
*************************** 8. row ***************************
Id: 1690543
User: xxxx
Host: localhost
db: test
Command: Query
Time: 2
State: statistics
Info: select * from test_lock where id = 10 for update
5.查看錶可以有如下的資料:
mysql> select * from innodb_lock_waits \G
*************************** 1. row ***************************
wait_started: 2018-12-31 01:26:54
wait_age: 00:00:20
wait_age_secs: 20
locked_table: `test`.`test_lock`
locked_index: PRIMARY
locked_type: RECORD
waiting_trx_id: 294360748
waiting_trx_started: 2018-12-30 23:18:16
waiting_trx_age: 02:08:58
waiting_trx_rows_locked: 5
waiting_trx_rows_modified: 0
waiting_pid: 1690543
waiting_query: select * from test_lock where id = 10 for update
waiting_lock_id: 294360748:30180851:3:2
waiting_lock_mode: X
blocking_trx_id: 294360747
blocking_pid: 1690288
blocking_query: NULL
blocking_lock_id: 294360747:30180851:3:2
blocking_lock_mode: X
blocking_trx_started: 2018-12-30 23:17:59
blocking_trx_age: 02:09:15
blocking_trx_rows_locked: 1
blocking_trx_rows_modified: 2
sql_kill_blocking_query: KILL QUERY 1690288
sql_kill_blocking_connection: KILL 1690288
1 row in set, 3 warnings (0.04 sec)
可以看出 waiting開頭的部分就是事務2,正在等待鎖的事務。而blocking開頭的就是正在阻塞其他程序的事務。
2.2.3 io 開頭的檢視
以I/O層面為視角,統計I/O相關的資訊。
2.2.3.1 io_by_thread_by_latency 表
這個檢視從執行緒的角度,統計了I/O的延遲情況(I/O時間消耗)這個檢視擁有以下的列:
列名 | 作用 |
---|---|
user | 對於當前執行緒來說,這個值是執行緒被分配的賬戶,對於後臺執行緒來講,就是執行緒的名稱 |
total | I/O事件的總數 |
total_latency | I/O總體延遲時間(總體花費的時間) |
min_latency | 單個I/O事件最小延遲 |
avg_latency | 平均I/O的延遲 |
max_latency | 單個I/O事件最大延遲 |
thread_id | 執行緒ID |
processlist_id | 對於當前執行緒就是此時的ID,對於後臺就是null |
mysql> select * from io_by_thread_by_latency limit 1 \G
*************************** 1. row ***************************
user: XXXXX
total: 3982138
total_latency: 46.85 m
min_latency: 384.48 ns
avg_latency: 8.60 ms
max_latency: 50.59 s
thread_id: 30
processlist_id: NULL
1 row in set (0.04 sec)
2.2.3.2 io_global_by_file_by_bytes 表
這個檢視從每個檔案的角度,統計了I/O的情況(主要顯示檔案寫入和讀取的byte數量)。這個檢視擁有以下的列:
列名 | 作用 |
---|---|
file | 檔名 |
count_read | 總共發生了多少讀取的I/O事件 |
total_read | 總計讀取了多少byte從檔案中 |
avg_read | 每次I/O平均從檔案中讀取了多少byte |
count_write | 總計發生了多少次寫入的I/O事件 |
total_written | 總計寫入了多少byte到檔案中 |
avg_write | 每次I/O平均寫入多少byte到檔案中 |
total | 總共有多少byte被讀取和寫入到檔案中 |
write_pct | 寫入的byte佔總請求的比例 |
mysql> select * from io_global_by_file_by_bytes limit 1 \G
*************************** 1. row ***************************
file: XXXXX
count_read: 124097831
total_read: 1.85 TiB
avg_read: 16.00 KiB
count_write: 154762
total_written: 2.36 GiB
avg_write: 16.00 KiB
total: 1.85 TiB
write_pct: 0.12
1 row in set (0.03 sec)
2.2.3.3 io_global_by_file_by_latency表(misc是啥)
這個檢視從每個檔案的角度,統計了I/O的情況(主要顯示I/O的時間延遲)。這個檢視擁有以下的列:
列名 | 作用 |
---|---|
file | 檔名 |
total | I/O事件的總數 |
total_latency | I/O時間總體花費的時間 |
count_read | 總共發生了多少讀取的I/O事件 |
read_latency | 讀請求I/O的總延遲 |
count_write | 總計發生了多少次寫入的I/O事件 |
write_latency | 寫請求I/O的總延遲 |
count_misc | 其他的I/O請求的數量 |
misc_latency | 其他I/O請求總計延遲 |
mysql> select * from io_global_by_file_by_latency limit 1 \G
*************************** 1. row ***************************
file: XXXXX.ibd
total: 58795939
total_latency: 7.52 h
count_read: 56231839
read_latency: 7.47 h
count_write: 2372895
write_latency: 1.51 m
count_misc: 191205
misc_latency: 1.18 m
1 row in set (0.02 sec)
2.2.3.4 io_global_by_wait_by_bytes表
這個檢視從I/O事件的角度(顯示的時候會有wait/io/file/ 這樣子的字首),統計了I/O的情況(主要顯示I/O的時間延遲,和寫入和讀取的byte數)。這個檢視擁有如下的列:
列名 | 作用 |
---|---|
event_name | I/O事件名稱,顯示的時候會有wait/io/file/ 這樣子的字首 |
total | I/O事件發生的總數 |
total_latency | I/O事件的定時發生的總等待時間 |
min_latency | I/O事件定時發生的最短單個等待時間 |
avg_latency | 每次定時發生I / O事件的平均等待時間 |
max_latency | I/O事件定時發生的最大單個等待時間 |
count_read | I/O事件的讀取請求數 |
total_read | 總計讀取的byte資料 |
avg_read | 平均每個I/O事件讀取的byte數 |
count_write | I/O事件的寫入請求數 |
total_written | 總計寫入的byte數 |
avg_written | 平均每個I/O事件 |
total_requested | 總計byte 被讀取和寫入 |
mysql> select * from io_global_by_wait_by_bytes limit 1 \G
*************************** 1. row ***************************
event_name: innodb/innodb_data_file
total: 762718061
total_latency: 2.47 d
min_latency: 0 ps
avg_latency: 279.74 us
max_latency: 16.23 s
count_read: 743120377
total_read: 11.07 TiB
avg_read: 16.00 KiB
count_write: 17834643
total_written: 484.40 GiB
avg_written: 28.48 KiB
total_requested: 11.55 TiB
1 row in set (0.03 sec)
2.2.4 memory開頭的檢視
以記憶體層面為視角,統計分析記憶體使用情況相關資訊。
2.2.4.1 memory_by_host_by_current_bytes表
從host層面,統計當前記憶體使用的情況,這個檢視擁有以下的幾個列:
列名 | 作用 |
---|---|
host | 主機名 |
current_count_used | 尚未被host釋放的當前已分配記憶體塊數 |
current_allocated | 尚未被host釋放的當前已分配位元組數 |
current_avg_alloc | host每個記憶體塊的當前分配位元組數 |
current_max_alloc | host的最大單個當前記憶體分配(以位元組為單位) |
total_allocated | 主機的總記憶體分配(以位元組為單位) |
mysql> select * from memory_by_host_by_current_bytes order by current_allocated desc \G
*************************** 1. row ***************************
host: background
current_count_used: 0
current_allocated: 0 bytes
current_avg_alloc: 0 bytes
current_max_alloc: 0 bytes
total_allocated: 0 bytes
其他幾個相關的表,結構和作用都差不多,不過從其他的層面進行統計,這裡就不多做介紹了:
- memory_by_thread_by_current_bytes
- memory_by_user_by_current_bytes
- memory_global_by_current_bytes
- memory_global_total
2.2.5 user開頭的表
user開頭的表,主要從user的角度統計相關的資訊。
2.2.5.1 user_summary表
這個表在使用者的維度統計了語句的執行情況,I/O和連線數等情況。這個表擁有如下的列:
列名 | 作用 |
---|---|
user | 使用者 |
statements | 總共執行了多少語句 |
statement_latency | 執行語句花費的總時間 |
statement_avg_latency | 語句平均執行時間 |
table_scans | 全表掃描的次數 |
file_ios | 總共發生了多少次檔案I/O |
file_io_latency | 對應使用者執行的語句產生的檔案I/O事件的總延遲時間(執行時間) |
current_connections | 對應使用者的當前連線數 |
total_connections | 對應使用者的歷史總連線數 |
unique_hosts | 對應使用者來自不同主機(針對主機名去重)連線的數量 |
current_memory | 對應使用者的連線當前已使用的記憶體分配量 |
total_memory_allocated | 對應使用者的連線的歷史記憶體分配量 |
mysql> select * from user_summary limit 1 \G
*************************** 1. row ***************************
user: XXXX
statements: 520988370
statement_latency: 8.04 w
statement_avg_latency: 9.34 ms
table_scans: 3729186
file_ios: 175723683186
file_io_latency: 2.23 w
current_connections: 27
total_connections: 1063563
unique_hosts: 6
current_memory: 0 bytes
total_memory_allocated: 0 bytes
1 row in set (0.04 sec)
2.2.5.2 user_summary_by_file_io表
這個表按使用者彙總了I/O的相關資訊。這個表擁有如下的列:
列名 | 作用 |
---|---|
user | 使用者 |
ios | 總共發生了多少次I/O |
io_latency | I/O的延遲 |
mysql> select * from user_summary_by_file_io;
+------------+-------------+------------+
| user | ios | io_latency |
+------------+-------------+------------+
| XXXX1 | 45364630590 | 3.92 d |
| XXXX5 | 35400554 | 2.60 h |
| XXXX4 | 5316048288 | 39.01 m |
| XXXX2 | 114389 | 457.59 ms |
| XXXX3 | 288 | 1.02 ms |
+------------+-------------+------------+
5 rows in set (0.03 sec)
2.2.5.3 user_summary_by_file_io_type表
這個表按使用者分別統計了不同型別的I/O的情況。這個表擁有如下的列:
列名 | 作用 |
---|---|
user | 使用者 |
event_name | I/O事件名稱 |
total | 總計發生了多少次I/O |
latency | 總共的I/O時延(花費的時間) |
max_latency | 最大I/O時延 |
mysql> select * from user_summary_by_file_io_type limit 10;
+------------+--------------------------------------+----------+-----------+-------------+
| user | event_name | total | latency | max_latency |
+------------+--------------------------------------+----------+-----------+-------------+
| background | wait/io/file/innodb/innodb_data_file | 35139637 | 1.37 h | 14.10 s |
| background | wait/io/file/innodb/innodb_log_file | 311112 | 1.25 h | 50.59 s |
| background | wait/io/file/sql/FRM | 129640 | 121.38 ms | 1.74 ms |
| background | wait/io/file/sql/ERRMSG | 5 | 1.24 ms | 1.20 ms |
| background | wait/io/file/sql/file_parser | 350 | 760.17 us | 13.46 us |
| background | wait/io/file/sql/binlog | 20 | 459.69 us | 200.42 us |
| background | wait/io/file/myisam/kfile | 33 | 109.25 us | 12.38 us |
| background | wait/io/file/sql/casetest | 10 | 93.15 us | 44.42 us |
| background | wait/io/file/myisam/dfile | 29 | 92.66 us | 14.30 us |
| background | wait/io/file/sql/binlog_index | 20 | 84.62 us | 39.29 us |
+------------+--------------------------------------+----------+-----------+-------------+
10 rows in set (0.01 sec)
2.2.5.4 user_summary_by_stages表
這個表按使用者分別統計階段事件的資訊。這個表擁有如下的列:
列名 | 作用 |
---|---|
user | 使用者 |
event_name | I/O事件名稱 |
total | 總計發生了多少次I/O |
total_latency | 總共的I/O時延(花費的時間) |
avg_latency | 平均I/O時延 |
mysql> select * from user_summary_by_stages;
+------------+-------------------------------+-------+---------------+-------------+
| user | event_name | total | total_latency | avg_latency |
+------------+-------------------------------+-------+---------------+-------------+
| background | stage/innodb/buffer pool load | 1 | 18.49 s | 18.49 s |
| XXXXXX | stage/sql/copy to tmp table | 3579 | 5.96 s | 1.66 ms |
+------------+-------------------------------+-------+---------------+-------------+
2 rows in set (0.18 sec)
2.2.5.5 user_summary_by_statement_latency表
這個表按使用者統計了語句的執行情況。這個表擁有如下的列:
列名 | 作用 |
---|---|
user | 使用者 |
total | 使用者執行語句總數 |
total_latency | 使用者執行語句的總延遲時間 |
max_latency | 最大延遲時間 |
lock_latency | 鎖等待時間彙總 |
rows_sent | 總共返回了多少行的資料 |
rows_examined | 總計從儲存引擎讀取了多少資料 |
row_affected | 總計影響了多少行資料 |
full_scans | 總計全表掃描了多少次 |
mysql> select * from user_summary_by_statement_latency \G
*************************** 1. row ***************************
user: XXXX
total: 125928907
total_latency: 2.04 w
max_latency: 3.57 h
lock_latency: 16.55 m
rows_sent: 512627430
rows_examined: 193893079249
rows_affected: 589428520
full_scans: 981959
2.2.5.6 user_summary_by_statement_type表
按使用者和語句事件型別(事件型別名稱為語句事件的event_name擷取最後一部分字串,也是語句command型別字串類似)分組的語句統計資訊。這個表擁有如下的列:
列名 | 作用 |
---|---|
user | 使用者 |
statement | 最近執行的語句 |
total | 使用者執行語句總數 |
total_latency | 使用者執行語句的總延遲時間 |
max_latency | 最大延遲時間 |
lock_latency | 鎖等待時間彙總 |
rows_sent | 總共返回了多少行的資料 |
rows_examined | 總計從儲存引擎讀取了多少資料 |
row_affected | 總計影響了多少行資料 |
full_scans | 總計全表掃描了多少次 |
mysql> select * from user_summary_by_statement_type limit 10 \G
*************************** 1. row ***************************
user: XXX
statement: show_variables
total: 5269
total_latency: 9.42 s
max_latency: 13.69 ms
lock_latency: 380.99 ms
rows_sent: 2592348
rows_examined: 5184696
rows_affected: 0
full_scans: 5269
*************************** 2. row ***************************
user: XXX
statement: show_status
total: 5269
total_latency: 8.06 s
max_latency: 24.84 ms
lock_latency: 654.23 ms
rows_sent: 1859957
rows_examined: 3719914
rows_affected: 0
full_scans: 5269
3. 結束語
到這裡,簡單的介紹了下sys Schema 庫相關的表。那麼這些表能查詢到些什麼資料呢?在一篇文章中在做下介紹吧~