mysql5.7.10 performance_schema,MySQL的show profile(已過時)簡介以及該功能在MySQL 5.7中performance_schema中的替代...

show profile 命令用於跟蹤執行過的sql語句的資源消耗信息,可以幫助查看sql語句的執行情況,可以在做性能分析或者問題診斷的時候作為參考。

在MySQL5.7中, show profile 命令已經開始不推薦使用,MySQL使用performance_schema 中系統表的信息來替代show profile命令

本文簡單介紹一下MySQL的profile使用,以及在MySQL5.7之后的改進,同時與SQL Server中的DMV以及profile和擴展事件做一個簡單的對比,

最后會發現,在MySQL和SQL Server中這個信息反映出來的指標都和以及參考作用,都是類似的。

MySQL5.7尚且支持的show profile

show profile在MySQ L5.7之后就開始是一個過時的選項,不過MySQL 5.7尚且支持,不過不建議使用。show profile跟蹤記錄SQL執行情況的需要打開配置才能使用

5085747786d9a94d5d9af255e26e7681.jpe

測試執行數次“select count(1) from test_table1;”這個SQL語句,查看執行過的sql的QUERY_ID

1e3e4af84fc8d05a70915c0fd393527c.png

然后查看具體的某一個query_id的執行過程

4706cb7e12b0bd35fa1bc7f22c1e5266.png

然后可以查看某一個query(執行過的SQL語句)的某一方面的資源消耗信息。

比如show profile cpufor query 82或者是show profile all for query 82;

b6ed02afcc596dab3e01485e3c023c97.png

或者是show profile all for query 82。更多show profile的參數請參考各種參考資料以及官方文檔。

c5ebc1b75e2665b75dd5534d0c3c2f66.png

show profile中記錄的信息實際上是存儲在INFORMATION_SCHEMA.PROFILING 這個系統表中的,

各種show profile只不過是相當於一個馬甲,換一種方式來展現INFORMATION_SCHEMA.PROFILING 中的信息。

實話講,個人是不太喜歡系統類似的封裝命令的,倒不如自己直接去定義查詢條件去查詢系統表本身來的更加實在。

fb2e374f8b6789a6f3676f2c73eef9d0.png

MySQL的show profile差不多就是這個功能。

細節功能要么用的非常非常頻繁,然后自然會熟悉,要么就用的時候查一下。

--打開當前Session的profiling

set profiling = 1;--查詢最近一個查詢的profiling信息

show profile;--查詢所有的profile信息

show profiles;--查詢某個Id的profile信息

show profile for query 5;--查詢某個Id的profile指定信息

show profile cpu for query 5;

MySQL5.7之后的performance_schema 替代 show profile

個人理解起來就是將原先存儲在INFORMATION_SCHEMA.PROFILING系統表中的信息換了一個存儲的方式個位置。

這個過程也是支持可配置化的,首先看 performance_schema.setup_actors這個系統表,默認情況下是開啟了profile跟蹤記錄的。

77564fcafd0c789e7649fb831eb2ae4e.png

可以在全局級關閉profile記錄跟蹤的功能,而只限定某一個賬號的執行記錄被跟蹤

29767db3929cbee6e3ba2fea0066fe24.png

這里就重新建賬號了,重現打開默認情況下記錄所有賬號的跟蹤。

然后根據官網的提示,需要打開一個配置選項才能正常記錄profile信息。

執行如下sql。

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'

WHERE NAME LIKE '%statement/%';UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'

WHERE NAME LIKE '%stage/%';UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'

WHERE NAME LIKE '%events_statements_%';UPDATE performance_schema.setup_consumers SET ENABLED = 'YES'

WHERE NAME LIKE '%events_stages_%';

繼續使用上述的sql查詢語句(select count(1) from test_table1)做測試,

然后系統表performance_schema.events_statements_history_long 中可以根據文本信息模糊匹配出之前執行過的SQL語句的信息了

809724ad83b8336293a5011ab3de3d73.png

根據上述匹配到的sql語句的Event_id就可以查詢到這個SQL語句在執行過程中的資源消耗信息了。

01cd626f5b5b9dda64217f21dba39cf8.png

上面的兩個sql,官當抄來的。

SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) asDuration, SQL_TEXTFROMperformance_schema.events_statements_history_longWHERE SQL_TEXT like '%select count(1) from test_table1%';SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) ASDurationFROMperformance_schema.events_stages_history_longWHERE NESTING_EVENT_ID=544102;

但是performance_schema 系統表中記錄到的信息,並不能像show profile cpu for query *** 一樣,查詢出來某一類資源的消耗情況。

本身還沒有搜索到相關的等價於show profile cpu for query *** 的系統表,有知道的還望告知,謝謝。

到時某些資料上有這么一說,在performance_schema 系統表記錄到的信息中:“Does not cover all metrics compared to the native profiling i.e. CONTEXT SWITCHES, BLOCK IO, SWAPS”

也就說相比之前版本的show profile,新的記錄profile的方式還是有待完善的,不知道到目前為止有沒有完善這個功能。

參考:https://www.percona.com/blog/2015/04/16/profiling-mysql-queries-from-performance-schema/

MySQL中的show profile中的信息大概就是這樣子,

參考了一下《深入淺出MySQL》發現提到的show profile在執行的執行給出了警告,表明后續版本中可能會移除這個功能,因此又搜索show profile的替代者。

MySQL的profile信息與SQL Server中的profile簡單的對比

最后簡單地與sqlserver系統表DMV中的類似功能做一下比較,還是有一些比較相似的地方的。

SQL Server可以通過DMV來查詢執行過的SQL的一些信息,比如執行的時間,消耗的CPU時間,執行的邏輯讀寫,物理讀寫等等

不過這個結果還是有一些不一樣的,下面再說。

28acf6e9da3108e9ae7a7a7e8e1a49fc.png

上述MySQL統計出來的是一個結果強調的是步驟與時間的維度,也即每一步花費了多少時間,

這里的sqlserver統計出來的是一個整體消耗信息

如果sqlserver想到達到類似也是可以的,最簡單的就是SQL Server中的profile跟蹤結果,也叫profile,看來套路都是一樣的,

另外就是sqlserver中改良過來的擴展事件,參考之前的博文:http://www.cnblogs.com/wy123/p/6835939.html

完全可以拿到Session級別的等待資源和等待時間,這樣子基本上就等同於MySQL中的performance_schema記錄到的信息了。

不過SQL Server 擴展事件捕獲到的這個信息要比MySQL的原始的Profile中INFORMATION_SCHEMA.PROFILING 的更加具體和詳盡了。

在資源消耗和時間維度上有一個更加清晰和直觀的結果。

比如如下的這個截圖,還是那句話,套路都是一樣的,換了個馬甲而已。

f9a56ca92e0a1b04f750e72093e7be3e.png

如果把擴展事件捕獲到的上述結果,統計起來看,就更像MySQL中的profile信息了。

58972bb92ede40eac04de63b5f8226cc.png

總結:

profile跟蹤結果可以反饋出來sql執行過程中的資源消耗信息,以提供在做性能優化或者是問題診斷過程中的參考依據,作為DBA在管理和優化數據中的工具

不管是在MySQL中,還是在SQL Server中,功能都是類似的。

當然在問題診斷的時候,僅僅有這些信息,還是不完全夠的,需要其他方面的一些信息做綜合考量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值