對系統庫的管理維護是是 DBA 的職責。
【performance_schema】
性能監控和狀態信息。包括統計最近執行了哪些語句,在執行過程的每個階段都花費了多長時間,內存的使用情況等等信息。
按照不同的數據庫對象進行分組、按照不同的事件類型進行分組,或者按照事件 類型分組之后,再進一步按照賬號、主機、程序、線程、用戶等進行細分。
語句事件記錄表:記錄語句事件信息的表,包括:
events_statements_current(當前語句事件表)、events_statements_history(歷 史語句事件表)、events_statements_history_long(長語句歷史事件表)以及一 些 summary 表(聚合后的摘要表)。其中,summary 表還可以根據賬號(account)、 主機(host)、程 序(program)、線 程(thread)、用 戶(user)和全局(global) 再進行細分。
show tables like 'events_statement%';
show tables like 'events_wait%'; 等待事件記錄表:與語句事件記錄表類似。
show tables like 'events_stage%'; 階段事件記錄表:記錄語句執行階段事件的表,與語句事件記錄表類似。
show tables like 'events_transaction%'; 事務事件記錄表:記錄與事務相關的事件的表,與語句事件記錄表類似。
show tables like '%file%'; 監視文件系統層調用的表:
show tables like '%memory%'; 監視內存使用的表:
show tables like '%setup%'; 動態對 performance_schema 進行配置的配置表
update setup_instruments set ENABLEd = 'YES', TIMED = 'YES' WHERE name like 'wait%'; -- 修改配置表,指定收集哪些性能指標
update setup_consumers set ENABLEd = 'YES', TIMED = 'YES' WHERE name like 'wait%'; -- 修改配置表,指定哪些表打開性能數據收集,比如events_transactions_history事務歷史表
select * from 1; -- 會報1064錯誤
select thread_id
,EVENT_ID
,SQL_TEXT as '錯誤sql'
,MYSQL_ERRNO as '錯誤號'
,MESSAGE_TEXT as '錯誤信息'
,FROM_UNIXTIME(TIMER_START, '%Y-%m-%d %H:%i:%S') AS '開始執行時間'
,FROM_UNIXTIME(TIMER_END, '%Y-%m-%d %H:%i:%S') AS '結束執行時間'
,FROM_UNIXTIME(TIMER_WAIT, '%Y-%m-%d %H:%i:%S') AS 'wait等待時間'
from events_statements_history WHERE MYSQL_ERRNO = 1064 order by EVENT_ID desc; -- 查看1064報錯的sql語句執行歷史記錄。 SQL以\G結尾,代表列轉行顯示結果集
【sys】
這個數據庫主要是通過視圖的形式把 information_schema 和 performance_schema 結合起來,讓程序員可以更方便的了解 MySQL 服務器的一些性能信息。
這個庫的表都是雙份,兩個表名的區別是另一個前綴是"x$",例如:代表按照主機進行匯總統計的文件 I/O 性能數據, 兩個視圖訪問的數據源是相同的:
host_summary_by_file_io 該視圖顯示的是相關數值經過單位換算后的數據(單位是毫秒、秒、分鍾、小時、 天等),
x$host_summary_by_file_io 該視圖帶“x$”前綴的視圖顯示的是原始的數據。
查看慢 SQL 語句
call sys.ps_setup_enable_instrument('wait'); 啟用與等待事件相關功能
call sys.ps_setup_enable_consumer('wait'); 啟用與等待事件相關功能
select sleep(30); 模擬睡眠30秒
select * from session where command = 'query' and conn_id != connection_id()\G 在模擬睡眠30秒未結束的時候,使用該SQL查詢可以查到current_statement的值為select_sleep狀態的SQL正在執行了幾秒。
select * from schema_table_statistics_with_buffer\G; 查詢表的增、刪、改、查數據量和 I/O 耗時統計
SELECT * FROM `session`; 查看當前會話信息
【information_schema】
這個數據庫保存着 MySQL 服務器維護的所有其他數據庫的信息:表、視圖、觸發器、列、索引等元數據。
performance_schema=ON|OFF 在 my.cnf 中進行配置performance_schema是否啟用,mysql5.7默認啟用這個存儲引擎
INFORMATION_SCHEMA.ENGINES 表或 show engines; 語句都可以查看PERFORMANCE_SCHEMA是support = YES,才算當前mysql版本支持這個數據庫實例。
【mysql】
這個是數據庫核心,它存儲了 MySQL 的用戶賬戶和權限信息,一些存儲過程、 事件的定義信息,一些運行過程中產生的日志信息,一些幫助信息以及時區信息等。
SELECT * FROM innodb_index_stats; 索引。這個表很重要,為什么有些SQL明明加了索引查詢的時候卻沒有使用索引,就是因為這個表的一些數據使mysql判斷出一些查詢成本而導致的。
SELECT * FROM innodb_table_stats; 表最后更新時間、行數、索引數等