mysql 5.7新數據庫sys解析(一)


mysql5.7增加了sys 系統數據庫,通過這個庫可以快速的了解系統的元數據信息
這個庫確實可以方便DBA發現數據庫的很多信息,解決性能瓶頸都提供了巨大幫助
 
這個庫在mysql5.7中是默認存在的,在mysql5.6版本以上可以手動導入,數據庫包請在github自行查找
 
這個庫包括了哪些內容?
這個庫是通過視圖的形式把information_schema 和performance_schema結合起來,查詢出更加令人容易理解的數據
存儲過程可以可以執行一些性能方面的配置,也可以得到一些性能診斷報告內容
存儲函數可以查詢一些性能信息
 
分析每個視圖和表之前先說明一下:關於帶不帶x$,去掉x$同名的視圖他們的數據是相同的,區別在於不帶x$的單位更加符合直接閱讀經過了轉換,而帶x$是為了某些工具存在而使用的原始單位(多數應該是mysql默認的)
 
下面就結合mysql官方手冊來詳細分析sys庫

1.表 
    1.1 sys_config 表
        這是在這個系統庫上存在的唯一一個表了
        先看看表結構
CREATE TABLE `sys_config` (
  `variable` varchar(128) NOT NULL,
  `value` varchar(128) DEFAULT NULL,
  `set_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `set_by` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`variable`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

        variable 配置選項名稱

        value     配置選項值
        set_time 該行配置修改的時間
        set_by     該行配置信息修改者,如果從被安裝沒有修改過,那么這個數據應該為NULL
 
    表中默認數據為
variable    
value    
set_time    
set_by
diagnostics.allow_i_s_tables  
  OFF 
  2015-11-20 16:04:38 
     root@localhost
diagnostics.include_raw 
   OFF
   2015-11-20 16:04:38 
     root@localhost
statement_performance_analyzer.limit 
  100
  2015-11-20 16:04:38  
     root@localhost
statement_performance_analyzer.view 
 
2015-11-20 16:04:38
     root@localhost
statement_truncate_len  
  64 
   2016-01-22 17:00:16    
     root@localhost
 
    以上值的會話變量為@sys.+表中variable字段,譬如:@sys.statement_truncate_len 
可以set @sys.statement_truncate_len = 32 臨時改變值,在會話中會一直使用這個值,如果想要恢復使用表的默認值,只需要將這個會話值設置為null;set @sys.statement_truncate_len = null;
 
diagnostics.allow_i_s_tables  
diagnostics.include_raw 
這兩個值默認為OFF ,前者如果開啟表示允許diagnostics() 存儲過程執行掃描information_schema.tables 表,如果表很多,那么可能會很耗性能,后者開啟將會從metrics 視圖輸出未加工處理的數據 。diagnostics() 具體內容見下面對diagnostics()的解釋。
 
statement_performance_analyzer.limit 
視圖在沒有加limit限制時,返回的最大行數
statement_performance_analyzer.view 
(略)
以上參數為mysql5.7.9加入
 
statement_truncate_len  
通過format_statement()函數返回值的最大長度
 
這個表非默認選項還有一個@sys.debug參數
可以手動加入
INSERT INTO sys_config (variable, value) VALUES('debug', 'ON');
UPDATE sys_config SET value = 'OFF' WHERE variable = 'debug';
SET @sys.debug = NULL;
具體內容請參考官方文檔,此處不做介紹
 
關於這個表有兩個觸發器
1.1.1 sys_config_insert_set_user觸發器
如果加入新行通過insert語句,那么這個觸發器會把set_by列設置為當前操作者
1.1.2 sys_config_update_set_user觸發器           
 
如果加入新行通過update語句,那么這個觸發器會把set_by列設置為當前操作者
 
2.視圖
以下部分只介紹不包含x$的視圖內容
 
2.1 host_summary (主機概要)
有如下列:
• host
監聽連接過的主機
• 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
該主機分配的內存總數
 
2.2  The host_summary_by_file_io_type
•host
主機
•event_name
IO事件名稱
•total
該主機發生的事件
•total_latency
該主機發生IO事件總延遲時間
•max_latency
該主機IO事件中最大的延遲時間
 
2.3 The host_summary_by_file_io
•host
主機
•ios
IO事件總數
•io_latency
IO總的延遲時間
 
2.4 The host_summary_by_stages
• host
主機
• event_name
stage event名稱
• total
stage event發生的總數
• total_latency
stage event總的延遲時間
• avg_latency
stage event平均延遲時間
 
 
2.5 The host_summary_by_statement_latency
• host
主機
• total
這個主機的語句總數
• total_latency
這個主機總的延遲時間
• max_latency
主機最大的延遲時間
• lock_latency
等待鎖的鎖延遲時間
• rows_sent
該主機通過語句返回的總行數
• rows_examined
在存儲引擎上通過語句返回的行數
• rows_affected
該主機通過語句影響的總行數
• full_scans
全表掃描的語句總數
 
 
2.6  The host_summary_by_statement_type
• host
主機
• statement
最后的語句事件名稱
• total
sql語句總數
• total_latency
sql語句總延遲數
• max_latency
最大的sql語句延遲數
• lock_latency
鎖延遲總數
• rows_sent
語句返回的行總數
• rows_examined
通過存儲引擎的sql語句的讀取的總行數
• rows_affected
語句影響的總行數
• full_scans
全表掃描的語句事件總數
 
 
2.7 The innodb_buffer_stats_by_schema  
這個表是通過數據庫統計innodb引擎的innodb緩存
• object_schema
數據庫名稱
• allocated
分配給當前數據庫的總的字節數
• data
分配給當前數據庫的數據字節數
• pages
分配給當前數據庫的總頁數
• pages_hashed
分配給當前數據庫的hash頁數
• pages_old
 
分配給當前數據庫的舊頁數
• rows_cached
 
當前數據庫緩存的行數
 
2.8 The innodb_buffer_stats_by_table
這個表是通過每個表innodb引擎的innodb緩存
• object_schema
數據庫名稱
• object_name
表名稱
• allocated
分配給表的總字節數
• data
分配該表的數據字節數
• pages
分配給表的頁數
• pages_hashed
分配給表的hash頁數
• pages_old
分配給表的舊頁數
• rows_cached
表的行緩存數
 
2.9 The innodb_lock_waits
這個表其實從視圖的語句來看就是information_schema這個數據庫中的innodb_locks、innodb_trx這兩個表的整合,能夠更清晰的顯示當前實例的鎖情況
• 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
• waiting_query
正在等待鎖的查詢
• waiting_lock_id
正在等待鎖的ID
• waiting_lock_mode
等待鎖的模式
• blocking_trx_id
阻塞等待鎖的事務id
• blocking_pid
正在鎖的線程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 語句殺死正在運行的阻塞事務
在mysql5.7.9中被加入
• sql_kill_blocking_connection
kill 語句殺死會話中正在運行的阻塞事務
在mysql5.7.9中被加入
 
 
2.10 The io_by_thread_by_latency
這個視圖主要信息是通過IO的消耗展示IO等待的時間
• user
對於當前線程來說,這個值是線程被分配的賬戶,對於后台線程來講,就是線程的名稱
• total
IO事件的總數
• total_latency
IO事件的總延遲
• min_latency
單個最小的IO事件延遲
• avg_latency
平均IO延遲
• max_latency
最大IO延遲
• thread_id
線程ID
• processlist_id
對於當前線程就是此時的ID,對於后台就是null

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM