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

来源:http://www.cnblogs.com/wy123/archive/2017/06/10/6979499.html
-Advertisement-
Play Games

本文出處:http://www.cnblogs.com/wy123/p/6979499.html show profile 命令用於跟蹤執行過的sql語句的資源消耗信息,可以幫助查看sql語句的執行情況,可以在做性能分析或者問題診斷的時候作為參考。 在MySQL5.7中, show profile ...


 

本文出處:http://www.cnblogs.com/wy123/p/6979499.html 

 

  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執行情況的需要打開配置才能使用

  

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

  

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

  

  然後可以查看某一個query(執行過的SQL語句)的某一方面的資源消耗信息。
  比如show profile cpufor query 82或者是show profile all for query 82;

  

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

  

  show profile中記錄的信息實際上是存儲在INFORMATION_SCHEMA.PROFILING 這個系統表中的,
  各種show profile只不過是相當於一個馬甲,換一種方式來展現INFORMATION_SCHEMA.PROFILING 中的信息。
  實話講,個人是不太喜歡系統類似的封裝命令的,倒不如自己直接去定義查詢條件去查詢系統表本身來的更加實在。

  MySQL的show profile差不多就是這個功能。
  細節功能要麼用的非常非常頻繁,然後自然會熟悉,要麼就用的時候查一下。

 

MySQL5.7之後的performance_schema 替代 show profile

  首先參考官方文檔https://dev.mysql.com/doc/refman/5.7/en/performance-schema-query-profiling.html

 

  個人理解起來就是將原先存儲在INFORMATION_SCHEMA.PROFILING系統表中的信息換了一個存儲的方式個位置。
  這個過程也是支持可配置化的,首先看 performance_schema.setup_actors這個系統表,預設情況下是開啟了profile跟蹤記錄的。

  

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

  

  這裡就重新建賬號了,重現打開預設情況下記錄所有賬號的跟蹤。
  然後根據官網的提示,需要打開一個配置選項才能正常記錄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語句的信息了

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

  

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

SELECT EVENT_ID, TRUNCATE(TIMER_WAIT/1000000000000,6) as Duration, SQL_TEXT
FROM performance_schema.events_statements_history_long 
WHERE SQL_TEXT like '%select count(1) from test_table1%';
 
 
SELECT event_name AS Stage, TRUNCATE(TIMER_WAIT/1000000000000,6) AS Duration
FROM performance_schema.events_stages_history_long 
WHERE 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時間,執行的邏輯讀寫,物理讀寫等等
不過這個結果還是有一些不一樣的,下麵再說。

  上述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 的更加具體和詳盡了。
  在資源消耗和時間維度上有一個更加清晰和直觀的結果。
  比如如下的這個截圖,還是那句話,套路都是一樣的,換了個馬甲而已。

  

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

  

 

 

總結:

  profile跟蹤結果可以反饋出來sql執行過程中的資源消耗信息,以提供在做性能優化或者是問題診斷過程中的參考依據,作為DBA在管理和優化數據中的工具
  不管是在MySQL中,還是在SQL Server中,功能都是類似的。
  當然在問題診斷的時候,僅僅有這些信息,還是不完全夠的,需要其他方面的一些信息做綜合考量。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在iOS開發裡面我們經常會進行NSMutable(可變類型的類,常用的如NSMutableString,NSMutableArray,NSMutableDictionary,NSMutableData等)屬性的聲明,在聲明時我們都知道要使用strong(強引用)來進行標識,但是很多人不知道為什麼不能 ...
  • 1。不要充滿至 100% 。 2。不要放電至 0% 。 3。電池的容量儘量維持在 50%。 4。不要在高溫下操作。 5。不要使用快充功能的充電器。 6。使用一般的充電器,如,500mA 或是 800mA。 ...
  • 本文想要完成對twemproxy發送流程——msg_send的探索,對於twemproxy發送流程的數據結構已經在《twemproxy接收流程探索——剖析twemproxy代碼正編》介紹過了,msg_send和msg_recv的流程大致類似。請在閱讀代碼時,查看註釋,英文註釋是作者對它的代碼的註解, ...
  • 登錄到安裝oracle資料庫伺服器的操作系統。打開命令視窗:(我的演示機器是windows) 登錄到安裝oracle資料庫伺服器的操作系統。打開命令視窗:(我的演示機器是windows) 查看環境變數ORACLE_SID的設置情況: windows: echo %ORACLE_SID% linux: ...
  • 本文出處:http://www.cnblogs.com/wy123/p/6984885.html 最近遇到一個SQL Server伺服器響應極度緩慢,並且出現客戶端請求報錯的情況,在資料庫中的errorlog中出現磁碟請求超過15s才完成的error消息。對於此類問題,到底是存儲系統或者磁碟的故障, ...
  • 1、基本構成 (1)需要查詢的表(單表,多表,視圖) (2)需要查詢的信息(欄位信息,過濾處理) (3)查詢條件(欄位關聯,欄位值範圍,記錄截取設置,排序方式,分組方式,去重,or ,and) 2、實例展示(以user表為例) 2.1查詢單表(user) (1)查詢單表所有欄位 select * f ...
  • 下載apache-flume-1.7.0-bin.tar.gz,用 解壓,在/etc/profile文件中增加設置: 修改$FLUME_HOME/conf/下的兩個文件,在flume-env.sh中增加JAVA_HOME: 最重要的,修改flume-conf.properties文件: 以上文件設置 ...
  • 同Oracle一樣,SQL Server在非一致性關閉的時候也會進行實例恢復(Instance Recovery),本文根據stack overflow的文章介紹一些SQL Server實例恢復的知識。 原文鏈接:https://stackoverflow.com/questions/4193273 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...