1. 程式人生 > >MySQL 5.7中sys是一個MySQL自帶的系統庫

MySQL 5.7中sys是一個MySQL自帶的系統庫

MySQL 5.7中引入了一個新的sys schema,sys是一個MySQL自帶的系統庫,在安裝MySQL 5.7以後的版本,使用mysqld進行初始化時,會自動建立sys庫,
sys庫裡面的表、檢視、函式、儲存過程可以使我們更方便、快捷的瞭解到MySQL的一些資訊,比如哪些語句使用了臨時表、哪個SQL沒有使用索引、哪個
schema中有冗餘索引、查詢使用全表掃描的SQL、查詢使用者佔用的IO等.sys庫裡這些檢視中的資料,都是從information_schema裡面獲得的。

截止到現在(MySQL 5.7.12),sys中有1張表、52個檢視(我們可以從這些檢視中查詢到上面說到的那些資訊,預計再以後的版本中,sys庫中的檢視數量還
會再增加),這些資訊都可以通過show tables;檢視或者在information_schema中檢視:

select table_name,table_type,engine from

information_schema.tables where

table_schema='sys' order by table_name;

當你使用上面的方法檢視時,你會發現一個很有趣的現象,比如咱們看下show tables;的一部分輸出:







上面,我們可以看出,這些檢視有2中表現形式,一種是host_summary,另一種是加上x$字樣的,x$host_summary,這2種視圖裡面的資訊是一樣的,

只是表現形式不一樣,前一種是便於我們閱讀,格式化了時間和位元組的單位,後一種形式是指以”x$”開頭的檢視名稱,是為了便於一些工具的資料處理。




我們通過show create table命令分別檢視上面2個檢視的建立語句,可以發現,他們的建立是一樣的,只是在定義io_latency列的時候,在

host_summary_by_file_io中,使用了一個函式sys.format_time來格式化時間格式:

`format_time`(sum(`performance_schema`.`events_

waits_summary_by_host_by_event_name`.`SUM_TI

MER_WAIT`)) AS `io_latency`





而類似於sys.format_time這樣的函式,也是伴隨sys庫一起建立的,我們可以使用以下命令檢視:

select

routine_schema,routine_name,routine_type

from information_schema.routines where

routine_type='FUNCTION';

我們也可以使用show function status where db='sys'\G來檢視這些函式是怎麼建立的,具體的作用,怎麼使用等。

具體這些檢視都承載這哪些資訊,我們可以從官方手冊獲得幫助,這個值得我們花費一些時間來研究,比如我們可以在schema_redundant_indexes

中檢視資料庫中冗餘的索引,在statements_with_full_table_scans中檢視使用全表掃描的
SQL:
http://dev.mysql.com/doc/refman/5.7/en/sys-schema-views.html