1. 程式人生 > >MySQL sys Schema 簡單介紹-1

MySQL sys Schema 簡單介紹-1

參考文件:

  1. MySQL- 5.7 sys schema筆記
  2. MySQL 5.7新特性:SYS庫詳解
  3. MySQL Performance Schema&sys Schema介紹
  4. 記憶體分配統計檢視 | 全方位認識 sys 系統庫
  5. MySQL sys Schema
  6. 初相識 | 全方位認識sys系統庫
  7. 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

那麼這兩種形式的檢視有什麼不同呢?

  1. 以字母開頭的檢視是經過轉換後,便於人類閱讀的形式。
  2. 以 "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開頭的檢視 執行緒相關的資訊(包含內部執行緒及使用者連線)

接下來將介紹幾個使用比較多的檢視:

  1. host 開頭的檢視
  2. user開頭的檢視
  3. innodb開頭的檢視
  4. io開頭的檢視
  5. 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

其他幾個相關的表,結構和作用都差不多,不過從其他的層面進行統計,這裡就不多做介紹了:

  1. memory_by_thread_by_current_bytes
  2. memory_by_user_by_current_bytes
  3. memory_global_by_current_bytes
  4. 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 庫相關的表。那麼這些表能查詢到些什麼資料呢?在一篇文章中在做下介紹吧~