mysql sys庫使用功能

MySQL5.7新庫sys的一些實用功能

sys schema數據主要源自performance_schema。其目標是把查詢performance_schema的複雜度降低,讓DBA能更好地利用這個庫裏的數據,更快地瞭解MySQL的運行情況。sys schema包含了一些視圖、函數和存儲過程,sys schema用以幫助DBA及開發更方便的分析定位問題。

        那麼對於我們DBA來說,sys schema的一些主要用途有哪些?

1、哪個用戶或者哪個IP的客戶端使用了最多的資源?

2、數據庫連接來自哪裏,以及這些連接對數據庫的請求情況是怎樣的?

3、數據庫中哪些SQL被頻繁執行?

4、哪個文件產生了最多的IO,讀多還是寫多?

5、哪個表上的IO請求最多?

6、哪個表被訪問的最多?

7、哪些語句延遲比較嚴重?

8、哪些SQL執行了全表掃描或執行了排序操作?

9、哪些SQL使用了臨時表,又有哪些SQL用到了磁盤臨時表?

10、哪個庫/表佔用了最多的buffer pool?

11、每個連接分配多少內存?

12、自增長字段的最大值和當前已經使用到的值?

13、索引使用情況如何?有哪些冗餘索引和無用索引?

14、內部有多個線程在運行?

 

下面一一舉例說明:

1、哪個用戶或者哪個IP的客戶端使用了最多的資源?

mysql> select * from host_summary limit 1\G

*************************** 1. row ***************************

host: 10.10.4.201    //客戶端主機

statements: 207    //執行的語句總數

statement_latency: 16.49 w    //語句等待時間,y-年 w-周 d-天 h-小時 m-分鐘

statement_avg_latency: 13.39 h    //語句平均等待時間

table_scans: 0    //表掃描次數

file_ios: 22290615    //IO事件總數

file_io_latency: 3.67 m    //IO等待時間

current_connections: 1    //當前連接數

total_connections: 19    //總連接數

unique_users: 1    //連接過來的唯一用戶數

current_memory: 0 bytes    //當前分配內存

total_memory_allocated: 0 bytes    //總共分配內存

 

2、數據庫連接來自哪裏,以及這些連接對數據庫的請求情況是怎樣的?

2.1、查看當前連接情況

mysql> select host, current_connections, statements from host_summary limit 1\G

*************************** 1. row ***************************

host: 10.10.4.201    //客戶端主機

current_connections: 1    //當前連接數

statements: 207    //執行的語句總數

2.2、查看當前正在執行的SQL(和執行show full processlist的效果相當)

mysql> select conn_id, user, current_statement, last_statement from session where current_statement is not null limit 1\G

*************************** 1. row ***************************

conn_id: 115882553    //連接的ID,對應show processlist中的ID列

user: root@localhost    //該線程創建的用戶名

current_statement: select conn_id, user, current_ ... _statement is not null limit 1    //該線程執行的語句

last_statement: NULL    //此線程最後一次執行的語句

 

3、數據庫中哪些SQL被頻繁執行?

查詢執行次數top10的SQL:select db,exec_count,query from statement_analysis order by exec_count desc limit 10;

 

4、哪個文件產生了最多的IO,讀多還是寫多?

mysql> select * from io_global_by_file_by_bytes limit 1\G

*************************** 1. row ***************************

file: @@datadir/dedecms/dede_archives.MYD    //被操作的文件名

count_read: 16112940323    //總共有多少次讀

total_read: 58.90 TiB    //總共讀了多少字節

avg_read: 3.93 KiB    //平均每次讀多少字節

count_write: 8830747    //總共多少次寫

total_written: 1.89 GiB    //總共寫了多少字節

avg_write: 230 bytes    //平均每次寫多少字節

total: 58.90 TiB    //總共讀寫了多少字節

write_pct: 0.00    //寫佔比

 

5、哪個表上的IO請求最多?

通過以下sql查出被操做的文件名,然後就可以知道對應的是那個表:

mysql> select * from io_global_by_file_by_bytes limit 1\G

*************************** 1. row ***************************

file: @@datadir/dedecms/dede_archives.MYD    //被操作的文件名

count_read: 16112940323    //總共有多少次讀

total_read: 58.90 TiB    //總共讀了多少字節

avg_read: 3.93 KiB    //平均每次讀多少字節

count_write: 8830747    //總共多少次寫

total_written: 1.89 GiB    //總共寫了多少字節

avg_write: 230 bytes    //平均每次寫多少字節

total: 58.90 TiB    //總共讀寫了多少字節

write_pct: 0.00    //寫佔比

 

6、哪個表被訪問的最多?

可以通過下面先查詢執行最多的sql,然後找出對應的表:

mysql> select * from statement_analysis order by exec_count desc limit 10\G

*************************** 1. row ***************************

query: SELECT * FROM `dede_archives` WHERE `id` = ? LIMIT ?, ...    //歸一化的SQL

db: dedecms    //在哪個DB中執行

full_scan:    //全表掃描的次數

exec_count: 5781519    //該SQL執行的總次數

err_count: 0    //執行錯誤的次數

warn_count: 0    //執行警告的次數

total_latency: 54.19 m    //總共發生延遲的時間

max_latency: 6.89 s    //最大延遲時間

avg_latency: 562.42 us    //平均延遲時間

lock_latency: 38.70 m    //因鎖等待佔用的總時間

rows_sent: 5478992    //執行該SQL返回的總行數

rows_sent_avg: 1    //每次執行該SQL平均返回的行數

rows_examined: 5478992    //該語句掃描的次數

rows_examined_avg: 1    //每次執行該SQL平均掃描的次數

rows_affected: 0    //該語句影響到的行數

rows_affected_avg: 0    //每次執行該語句平均影響到的行數

tmp_tables: 0    //該SQL形成內存臨時表的總次數

tmp_disk_tables: 0    //該SQL形成文件臨時表的總次數

rows_sorted: 0    //該SQL總共排序的行數

sort_merge_passes: 0    //用於排序中合併的總次數

digest: 874bf766d714c115ff67c6ecc85d7172    //該語句的hash值

first_seen: 2017-04-06 19:28:07    //該SQL最早出現的時間

last_seen: 2018-01-23 11:28:26    //該SQL最近出現的時間

 

7、哪些語句延遲比較嚴重?

查看statement_analysis中avg_latency的最高的SQL:

mysql> select * from statement_analysis order by avg_latency desc limit 1\G

*************************** 1. row ***************************

query: SELECT SQL_NO_CACHE * FROM `order_pay`    //歸一化的SQL

db: dyfb2c    //在哪個DB中執行

full_scan: *    //全表掃描的次數

exec_count: 330    //該SQL執行的總次數

err_count: 0    //發生錯誤的次數

warn_count: 0    //發生警告的次數

total_latency: 329.22 ms    //總共發生的延遲時間

max_latency: 2.03 ms    //最大延遲時間

avg_latency: 997.63 us    //平均延遲時間

lock_latency: 13.50 ms    //因鎖等待佔用的總時間

rows_sent: 310860    //執行該SQL返回的總行數

rows_sent_avg: 942    //執行該SQL平均返回的行數

rows_examined: 310860    //該語句掃描的次數

rows_examined_avg: 942    //每次執行該SQL平均掃描的次數

rows_affected: 0    //該語句影響到的行數

rows_affected_avg: 0    //每次執行該語句平均影響到的行數

tmp_tables: 0    //該SQL形成內存臨時表的總次數

tmp_disk_tables: 0    //該SQL形成文件臨時表的總次數

rows_sorted: 0    //該SQL總共排序的行數

sort_merge_passes: 0    //用於排序中合併的總次數

digest: 874bf766d714c115ff67c6ecc85d7172    //該語句的hash值

first_seen: 2017-04-06 19:28:07    //該SQL最早出現的時間

last_seen: 2018-01-23 11:28:26    //該SQL最近出現的時間

 

8、哪些SQL執行了全表掃描或執行了排序操作?

8.1、全表掃描:

mysql> select * from statements_with_full_table_scans limit 1\G

*************************** 1. row ***************************

query: SELECT `usertype` , `userid` , ... ERE `userid` = ? LIMIT ?, ...

db: dedecms

exec_count: 2576

total_latency: 996.10 ms

no_index_used_count: 2576

no_good_index_used_count: 0

no_index_used_pct: 100

rows_sent: 0

rows_examined: 36496

rows_sent_avg: 0

rows_examined_avg: 14

first_seen: 2017-03-08 16:12:55

last_seen: 2018-01-23 11:33:44

digest: c5b6efc92a51003d6f495e1c4233bdc4

8.2、排序操作:

mysql> select * from statements_with_sorting limit 1\G

*************************** 1. row ***************************

query: SELECT `arc` . `id` , `arc` .  ...  `senddate` DESC LIMIT ?, ...

db: dedecms

exec_count: 2329617

total_latency: 10.44 h

sort_merge_passes: 0

avg_sort_merges: 0

sorts_using_scans: 2329610

sort_using_range: 0

rows_sorted: 5731397

avg_rows_sorted: 2

first_seen: 2017-06-05 19:59:08

last_seen: 2018-01-23 11:54:53

digest: dec0ec92c5aad756414d4b26c7e17245

 

9、哪些SQL使用了臨時表,又有哪些SQL用到了磁盤臨時表?

查看statement_analysis中哪個SQL的tmp_tables 、tmp_disk_tables值大於0即可:

mysql> select db, query, tmp_tables, tmp_disk_tables  from statement_analysis where tmp_tables>0 or tmp_disk_tables >0 order by (tmp_tables+tmp_disk_tables) desc limit 1\G

*************************** 1. row ***************************

db: dedecms

query: SELECT `arc` . `id` , `arc` .  ...  `senddate` DESC LIMIT ?, ...

tmp_tables: 1101140    //該SQL形成內存臨時表的總次數

tmp_disk_tables: 0    //該SQL形成文件臨時表的總次數

 

10、哪個庫/表佔用了最多的buffer pool?

庫:

mysql> select * from innodb_buffer_stats_by_schema order by allocated desc limit 1\G

*************************** 1. row ***************************

object_schema: tpshop    //庫名

allocated: 583.83 MiB    //分配的buffer pool大小

data: 468.04 MiB    //實際緩存的數據大小

pages: 37365    //緩存的page數

pages_hashed: 37365    //Buffer  pool中進行hash 索引的page

pages_old: 37365    //Buffer pool中的舊頁,可能被置換出去

rows_cached: 320285    //Buffer pool中以行爲單位的緩存

表:

mysql> select * from innodb_buffer_stats_by_table order by allocated desc limit 1\G

*************************** 1. row ***************************

object_schema: 160dyf_dede    //庫名

object_name: dede_arctype    //表名

allocated: 96.00 KiB    //基於表分配的buffer pool大小

data: 37.80 KiB    //基於表實際緩存的數據大小

pages: 6    //緩存的page數

pages_hashed: 6    //Buffer  pool中進行hash 索引的page

pages_old: 6    //Buffer pool中的舊頁,可能被置換出去

rows_cached: 37    //Buffer pool中以行爲單位的緩存

 

11、每個連接分配多少內存?

利用session表和memory_by_thread_by_current_bytes分配表進行關聯查詢:

mysql> select b.user, current_count_used, current_allocated, current_avg_alloc, current_max_alloc, total_allocated,current_statement from memory_by_thread_by_current_bytes a, session b where a.thread_id = b.thd_id limit 1\G

*************************** 1. row ***************************

user: [email protected]    //該線程創建的用戶名

current_count_used: 0    //當前使用的內存塊還沒有釋放

current_allocated: 0 bytes    //當前分配的內存大小(字節)而且沒有被釋放出來

current_avg_alloc: 0 bytes    //平均分配的blocks

current_max_alloc: 0 bytes    //當前線程分配的最多內存

total_allocated: 0 bytes    //當前連接總共分配的內存大小

current_statement: NULL

 

12、自增長字段的最大值和當前已經使用到的值?

select * from schema_auto_increment_columns order by auto_increment_ratio desc limit 3;

 

13、索引使用情況如何?有哪些冗餘索引和無用索引?

13.1、索引使用情況:

mysql> select * from schema_index_statistics limit 1\G

*************************** 1. row ***************************

table_schema: dedecms

table_name: dede_archives

index_name: mainindex

rows_selected: 12142972982

select_latency: 6.66 h

rows_inserted: 0

insert_latency: 0 ps

rows_updated: 0

update_latency: 0 ps

rows_deleted: 0

delete_latency: 0 ps

13.2、冗餘索引:

mysql> select * from schema_redundant_indexes limit 1\G

*************************** 1. row ***************************

table_schema: 160dyf_dede    //

table_name: dede_member_group

redundant_index_name: id

redundant_index_columns: id

redundant_index_non_unique: 1

dominant_index_name: PRIMARY

dominant_index_columns: id

dominant_index_non_unique: 0

subpart_exists: 0

sql_drop_index: ALTER TABLE `160dyf_dede`.`dede_member_group` DROP INDEX `id`

13.3、無用索引:

mysql> select * from schema_unused_indexes limit 1\G

*************************** 1. row ***************************

object_schema: 160dyf_dede

object_name: dede_addonimages

index_name: imagesMain

 

14、內部有多個線程在運行?

select user, count(*) from processlist group by user;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章