亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL性能分析工具profile使用教程

2024-07-24 13:06:27
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了MySQL性能分析工具profile使用教程,本文描述了如何使用MySQL profile,不涉及具體的樣例分析,需要的朋友可以參考下
 
 

分析SQL執行帶來的開銷是優化SQL的重要手段。在MySQL數據庫中,可以通過配置profiling參數來啟用SQL剖析。該參數可以在全局和session級別來設置。對于全局級別則作用于整個MySQL實例,而session級別緊影響當前session。該參數開啟后,后續執行的SQL語句都將記錄其資源開銷,諸如IO,上下文切換,CPU,Memory等等。根據這些開銷進一步分析當前SQL瓶頸從而進行優化與調整。本文描述了如何使用MySQL profile,不涉及具體的樣例分析。

1、有關profile的描述

 

復制代碼代碼如下:

--當前版本  
root@localhost[sakila]> show variables like 'version';  
+---------------+---------------------------------------+  
| Variable_name | Value                                 |  
+---------------+---------------------------------------+  
| version       | 5.6.17-enterprise-commercial-advanced |  
+---------------+---------------------------------------+  
  
--查看profiling系統變量  
root@localhost[sakila]> show variables like '%profil%';  
+------------------------+-------+  
| Variable_name          | Value |  
+------------------------+-------+  
| have_profiling         | YES   |   --只讀變量,用于控制是否由系統變量開啟或禁用profiling  
| profiling              | OFF   |   --開啟SQL語句剖析功能  
| profiling_history_size | 15    |   --設置保留profiling的數目,缺省為15,范圍為0至100,為0時將禁用profiling  
+------------------------+-------+  
  
profiling [539]  
If set to 0 or OFF (the default), statement profiling is disabled. If set to 1 or ON, statement prof  
is enabled and the SHOW PROFILE and SHOW PROFILES statements provide access to prof  
information. See Section 13.7.5.32, “SHOW PROFILES Syntax”.  
  
This variable is deprecated in MySQL 5.6.8 and will be removed in a future MySQL release.  
profiling_history_size [539]  
The number of statements for which to maintain profiling information if profiling [539] is  
enabled. The default value is 15. The maximum value is 100. Setting the value to 0 effectively  
disables profiling. See Section 13.7.5.32, “SHOW PROFILES Syntax”.  
This variable is deprecated in MySQL 5.6.8 and will be removed in a future MySQL release.  
  
  
--獲取profile的幫助  
root@localhost[sakila]> help profile;  
Name: 'SHOW PROFILE'  
Description:  
Syntax:  
SHOW PROFILE [type [, type] ... ]  
    [FOR QUERY n]  
    [LIMIT row_count [OFFSET offset]]  
  
type:  
    ALL                --顯示所有的開銷信息  
  | BLOCK IO           --顯示塊IO相關開銷  
  | CONTEXT SWITCHES   --上下文切換相關開銷  
  | CPU                --顯示CPU相關開銷信息  
  | IPC                --顯示發送和接收相關開銷信息  
  | MEMORY             --顯示內存相關開銷信息  
  | PAGE FAULTS        --顯示頁面錯誤相關開銷信息  
  | SOURCE             --顯示和Source_function,Source_file,Source_line相關的開銷信息  
  | SWAPS              --顯示交換次數相關開銷的信息   
  
The SHOW PROFILE and SHOW PROFILES statements display profiling  
information that indicates resource usage for statements executed  
during the course of the current session.  
  
*Note*: These statements are deprecated as of MySQL 5.6.7 and will be  
removed in a future MySQL release. Use the Performance Schema instead;  
see http://dev.mysql.com/doc/refman/5.6/en/performance-schema.html.  
--上面描述從5.6.7開始該命令將會被移除,用Performance Schema instead代替  
--在Oracle數據庫中,是通過autotrace來剖析單條SQL并獲取真實的執行計劃以及其開銷信息  

 

2、開啟porfiling

 

復制代碼代碼如下:

--啟用session級別的profiling  
root@localhost[sakila]> set profiling=1;  
Query OK, 0 rows affected, 1 warning (0.00 sec)  
  
--驗證修改后的結果  
root@localhost[sakila]> show variables like '%profil%';  
+------------------------+-------+  
| Variable_name          | Value |  
+------------------------+-------+  
| have_profiling         | YES   |  
| profiling              | ON    |  
| profiling_history_size | 15    |  
+------------------------+-------+  
  
--發布SQL查詢  
root@localhost[sakila]> select count(*) from customer;  
+----------+  
| count(*) |  
+----------+  
|      599 |  
+----------+  
  
--查看當前session所有已產生的profile  
root@localhost[sakila]> show profiles;  
+----------+------------+--------------------------------+  
| Query_ID | Duration   | Query                          |  
+----------+------------+--------------------------------+  
|        1 | 0.00253600 | show variables like '%profil%' |  
|        2 | 0.00138150 | select count(*) from customer  |  
+----------+------------+--------------------------------+  
2 rows in set, 1 warning (0.01 sec)  
  
--我們看到有2個warning,之前一個,現在一個  
root@localhost[sakila]> show warnings;    --下面的結果表明SHOW PROFILES將來會被Performance Schema替換掉  
+---------+------+--------------------------------------------------------------------------------------------------------------+  
| Level   | Code | Message                                                                                                      |  
+---------+------+--------------------------------------------------------------------------------------------------------------+  
| Warning | 1287 | 'SHOW PROFILES' is deprecated and will be removed in a future release. Please use Performance Schema instead |  
+---------+------+--------------------------------------------------------------------------------------------------------------+  

 

3、獲取SQL語句的開銷信息

 

復制代碼代碼如下:

--可以直接使用show profile來查看上一條SQL語句的開銷信息  
--注,show profile之類的語句不會被profiling,即自身不會產生Profiling  
--我們下面的這個show profile查看的是show warnings產生的相應開銷  
root@localhost[sakila]> show profile;    
+----------------+----------+  
| Status         | Duration |  
+----------------+----------+  
| starting       | 0.000141 |  
| query end      | 0.000058 |  
| closing tables | 0.000014 |  
| freeing items  | 0.001802 |  
| cleaning up    | 0.000272 |  
+----------------+----------+  
  
--如下面的查詢show warnings被添加到profiles  
root@localhost[sakila]> show profiles;  
+----------+------------+--------------------------------+  
| Query_ID | Duration   | Query                          |  
+----------+------------+--------------------------------+  
|        1 | 0.00253600 | show variables like '%profil%' |  
|        2 | 0.00138150 | select count(*) from customer  |  
|        3 | 0.00228600 | show warnings                  |  
+----------+------------+--------------------------------+  
  
--獲取指定查詢的開銷  
root@localhost[sakila]> show profile for query 2;  
+----------------------+----------+  
| Status               | Duration |  
+----------------------+----------+  
| starting             | 0.000148 |  
| checking permissions | 0.000014 |  
| Opening tables       | 0.000047 |  
| init                 | 0.000023 |  
| System lock          | 0.000035 |  
| optimizing           | 0.000012 |  
| statistics           | 0.000019 |  
| preparing            | 0.000014 |  
| executing            | 0.000006 |  
| Sending data         | 0.000990 |  
| end                  | 0.000010 |  
| query end            | 0.000011 |  
| closing tables       | 0.000010 |  
| freeing items        | 0.000016 |  
| cleaning up          | 0.000029 |  
+----------------------+----------+  
  
--查看特定部分的開銷,如下為CPU部分的開銷  
root@localhost[sakila]> show profile cpu for query 2 ;  
+----------------------+----------+----------+------------+  
| Status               | Duration | CPU_user | CPU_system |  
+----------------------+----------+----------+------------+  
| starting             | 0.000148 | 0.000000 |   0.000000 |  
| checking permissions | 0.000014 | 0.000000 |   0.000000 |  
| Opening tables       | 0.000047 | 0.000000 |   0.000000 |  
| init                 | 0.000023 | 0.000000 |   0.000000 |  
| System lock          | 0.000035 | 0.000000 |   0.000000 |  
| optimizing           | 0.000012 | 0.000000 |   0.000000 |  
| statistics           | 0.000019 | 0.000000 |   0.000000 |  
| preparing            | 0.000014 | 0.000000 |   0.000000 |  
| executing            | 0.000006 | 0.000000 |   0.000000 |  
| Sending data         | 0.000990 | 0.001000 |   0.000000 |  
| end                  | 0.000010 | 0.000000 |   0.000000 |  
| query end            | 0.000011 | 0.000000 |   0.000000 |  
| closing tables       | 0.000010 | 0.000000 |   0.000000 |  
| freeing items        | 0.000016 | 0.000000 |   0.000000 |  
| cleaning up          | 0.000029 | 0.000000 |   0.000000 |  
+----------------------+----------+----------+------------+  
  
--如下為MEMORY部分的開銷  
root@localhost[sakila]> show profile memory for query 2 ;  
+----------------------+----------+  
| Status               | Duration |  
+----------------------+----------+  
| starting             | 0.000148 |  
| checking permissions | 0.000014 |  
| Opening tables       | 0.000047 |  
| init                 | 0.000023 |  
| System lock          | 0.000035 |  
| optimizing           | 0.000012 |  
| statistics           | 0.000019 |  
| preparing            | 0.000014 |  
| executing            | 0.000006 |  
| Sending data         | 0.000990 |  
| end                  | 0.000010 |  
| query end            | 0.000011 |  
| closing tables       | 0.000010 |  
| freeing items        | 0.000016 |  
| cleaning up          | 0.000029 |  
+----------------------+----------+  
  
--同時查看不同資源開銷  
root@localhost[sakila]> show profile block io,cpu for query 2;  
+----------------------+----------+----------+------------+--------------+---------------+  
| Status               | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |  
+----------------------+----------+----------+------------+--------------+---------------+  
| starting             | 0.000148 | 0.000000 |   0.000000 |            0 |             0 |  
| checking permissions | 0.000014 | 0.000000 |   0.000000 |            0 |             0 |  
| Opening tables       | 0.000047 | 0.000000 |   0.000000 |            0 |             0 |  
| init                 | 0.000023 | 0.000000 |   0.000000 |            0 |             0 |  
| System lock          | 0.000035 | 0.000000 |   0.000000 |            0 |             0 |  
| optimizing           | 0.000012 | 0.000000 |   0.000000 |            0 |             0 |  
| statistics           | 0.000019 | 0.000000 |   0.000000 |            0 |             0 |  
| preparing            | 0.000014 | 0.000000 |   0.000000 |            0 |             0 |  
| executing            | 0.000006 | 0.000000 |   0.000000 |            0 |             0 |  
| Sending data         | 0.000990 | 0.001000 |   0.000000 |            0 |             0 |  
| end                  | 0.000010 | 0.000000 |   0.000000 |            0 |             0 |  
| query end            | 0.000011 | 0.000000 |   0.000000 |            0 |             0 |  
| closing tables       | 0.000010 | 0.000000 |   0.000000 |            0 |             0 |  
| freeing items        | 0.000016 | 0.000000 |   0.000000 |            0 |             0 |  
| cleaning up          | 0.000029 | 0.000000 |   0.000000 |            0 |             0 |  
+----------------------+----------+----------+------------+--------------+---------------+  
  
  
--下面的SQL語句用于查詢query_id為2的SQL開銷,且按最大耗用時間倒序排列  
root@localhost[sakila]> set @query_id=2;  
  
root@localhost[sakila]> SELECT STATE, SUM(DURATION) AS Total_R,  
    ->   ROUND(  
    ->        100 * SUM(DURATION) /  
    ->           (SELECT SUM(DURATION)  
    ->            FROM INFORMATION_SCHEMA.PROFILING  
    ->            WHERE QUERY_ID = @query_id  
    ->        ), 2) AS Pct_R,  
    ->     COUNT(*) AS Calls,  
    ->     SUM(DURATION) / COUNT(*) AS "R/Call"  
    ->  FROM INFORMATION_SCHEMA.PROFILING  
    ->  WHERE QUERY_ID = @query_id  
    ->  GROUP BY STATE  
    ->  ORDER BY Total_R DESC;  
+----------------------+----------+-------+-------+--------------+  
| STATE                | Total_R  | Pct_R | Calls | R/Call       |  
+----------------------+----------+-------+-------+--------------+  
| Sending data         | 0.000990 | 71.53 |     1 | 0.0009900000 |--最大耗用時間部分為發送數據  
| starting             | 0.000148 | 10.69 |     1 | 0.0001480000 |  
| Opening tables       | 0.000047 |  3.40 |     1 | 0.0000470000 |  
| System lock          | 0.000035 |  2.53 |     1 | 0.0000350000 |  
| cleaning up          | 0.000029 |  2.10 |     1 | 0.0000290000 |  
| init                 | 0.000023 |  1.66 |     1 | 0.0000230000 |  
| statistics           | 0.000019 |  1.37 |     1 | 0.0000190000 |  
| freeing items        | 0.000016 |  1.16 |     1 | 0.0000160000 |  
| preparing            | 0.000014 |  1.01 |     1 | 0.0000140000 |  
| checking permissions | 0.000014 |  1.01 |     1 | 0.0000140000 |  
| optimizing           | 0.000012 |  0.87 |     1 | 0.0000120000 |  
| query end            | 0.000011 |  0.79 |     1 | 0.0000110000 |  
| end                  | 0.000010 |  0.72 |     1 | 0.0000100000 |  
| closing tables       | 0.000010 |  0.72 |     1 | 0.0000100000 |  
| executing            | 0.000006 |  0.43 |     1 | 0.0000060000 |  
+----------------------+----------+-------+-------+--------------+  
  
--開啟profiling后,我們可以通過show profile等方式查看,其實質是這些開銷信息被記錄到information_schema.profiling表  
--如下面的查詢,部分信息省略  
profiling  
root@localhost[information_schema]> select * from profiling limit 3,3/G;  
*************************** 1. row ***************************  
           QUERY_ID: 1  
                SEQ: 5  
              STATE: init  
           DURATION: 0.000020  
           CPU_USER: 0.000000  
         CPU_SYSTEM: 0.000000  
  CONTEXT_VOLUNTARY: 0  
CONTEXT_INVOLUNTARY: 0  
       BLOCK_OPS_IN: 0  
      BLOCK_OPS_OUT: 0  
      MESSAGES_SENT: 0  
  MESSAGES_RECEIVED: 0  
  PAGE_FAULTS_MAJOR: 0  
  PAGE_FAULTS_MINOR: 0  
              SWAPS: 0  
    SOURCE_FUNCTION: mysql_prepare_select  
        SOURCE_FILE: sql_select.cc  
        SOURCE_LINE: 1050  
  
--停止profile,可以設置profiling參數,或者在session退出之后,profiling會被自動關閉  
root@localhost[sakila]> set profiling=off;  
Query OK, 0 rows affected, 1 warning (0.00 sec)      
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av在线播放| 97视频在线观看成人| 精品久久久视频| 亚洲国产精品资源| 欧美国产日韩视频| 国产精品 欧美在线| 亚洲人成电影网站色xx| 久久久视频在线| 欧美肥老太性生活视频| 这里只有精品视频在线| 成人h视频在线观看播放| 久久久久久九九九| 中文字幕9999| 欧美高清视频在线观看| 欧美精品videosex极品1| 国产精品丝袜久久久久久不卡| 国产亚洲视频在线观看| 亚洲一区亚洲二区亚洲三区| 亲子乱一区二区三区电影| 亚洲欧美中文字幕在线一区| 成人免费网站在线看| 69久久夜色精品国产69| 久久天天躁狠狠躁夜夜爽蜜月| 日韩高清欧美高清| 欧美激情综合色综合啪啪五月| 日韩av资源在线播放| 欧美插天视频在线播放| 国产亚洲视频在线观看| 欧美有码在线观看| 亚洲人成电影网站色xx| 精品福利在线视频| 国产成人久久久| 久久久最新网址| 亚洲视频在线观看网站| 国产精品91在线观看| 91国产精品电影| 国产91在线播放| 亚洲精品国产拍免费91在线| 亚洲欧美日韩精品久久奇米色影视| 国产欧美一区二区三区视频| 国产精品久久久久久亚洲影视| 国产经典一区二区| 5566成人精品视频免费| 91精品视频大全| 热99精品里视频精品| 亚洲自拍偷拍一区| 亚洲日本欧美日韩高观看| 亚洲成人精品av| 欧美日韩国产综合新一区| 欧美激情影音先锋| 久久国产精品久久久久久久久久| 庆余年2免费日韩剧观看大牛| 亚洲成人黄色在线观看| 日韩精品视频免费在线观看| 国产一区二区色| 久久久久久久久久国产| 欧美成人精品在线视频| 国产精品吴梦梦| 91免费在线视频| 在线丨暗呦小u女国产精品| 青青草成人在线| 日韩欧美一区视频| 国产精品视频精品视频| 91久久国产婷婷一区二区| 一本一本久久a久久精品牛牛影视| 91免费精品视频| 欧美与欧洲交xxxx免费观看| 91成人在线视频| 国产成人精品视频在线| 夜夜嗨av一区二区三区四区| 日韩高清电影免费观看完整| www.99久久热国产日韩欧美.com| 最近2019年手机中文字幕| 欧美日韩在线影院| 欧美成人激情视频免费观看| 欧美成人中文字幕| 欧美激情视频在线| 日韩一区二区精品视频| 97香蕉超级碰碰久久免费的优势| 美女精品视频一区| 午夜免费在线观看精品视频| 日韩欧美国产一区二区| 国产精品成人aaaaa网站| xxx一区二区| 综合136福利视频在线| 欧美日韩成人在线观看| 国产精品丝袜一区二区三区| 98视频在线噜噜噜国产| 美女精品久久久| 欧美日韩在线影院| 精品国产欧美成人夜夜嗨| 国产精品第一区| 久久精品国产一区二区电影| 国产日韩欧美自拍| 一区二区在线视频播放| 欧美性视频网站| 国产成人精品一区二区| 日韩电影免费在线观看中文字幕| 国产精品亚洲美女av网站| 亚洲日韩第一页| 欧美日韩国产丝袜美女| 中文字幕日韩av综合精品| 91性高湖久久久久久久久_久久99| 在线观看视频99| 国产精品久久久av久久久| 视频一区视频二区国产精品| 久久久99久久精品女同性| 亚洲黄色av网站| 国产精品久久久久一区二区| 久久久天堂国产精品女人| 国产精品96久久久久久| 成人激情视频免费在线| 国产精品久久综合av爱欲tv| 2020国产精品视频| 亚洲老板91色精品久久| 欧美激情中文字幕在线| 久久久av亚洲男天堂| 亚洲精品午夜精品| 国产精品九九久久久久久久| 欧美国产日韩二区| 中文字幕亚洲国产| 亚洲午夜精品久久久久久久久久久久| 国产在线观看精品一区二区三区| 久久久av网站| 精品国产福利视频| 欧美香蕉大胸在线视频观看| 国产精品大陆在线观看| 亚洲午夜未满十八勿入免费观看全集| 国产精品偷伦视频免费观看国产| 欧美日本黄视频| 日韩中文字幕在线播放| 国产91色在线播放| 麻豆乱码国产一区二区三区| 中文字幕九色91在线| 精品一区二区三区四区| 亚洲精品久久在线| 国产成人精品日本亚洲专区61| 成人免费视频在线观看超级碰| 国产精品尤物福利片在线观看| 91夜夜揉人人捏人人添红杏| 国产丝袜精品第一页| 国产精品美女午夜av| 国产福利精品视频| 久久久久九九九九| 国产亚洲精品一区二区| 久久人人爽国产| 疯狂做受xxxx高潮欧美日本| 久久久久五月天| 日本精品视频在线观看| 亚洲精品mp4| 日本精品视频在线播放| 欧美电影免费观看电视剧大全| 亚洲欧洲视频在线| 一本色道久久综合狠狠躁篇怎么玩| 亚洲视频在线免费观看| 疯狂蹂躏欧美一区二区精品| 中文日韩在线视频| 色综合亚洲精品激情狠狠| 性夜试看影院91社区| 精品一区二区三区三区| 欧美激情小视频| 亚洲自拍偷拍色片视频| 国产精品久久久久久久天堂| 亚洲xxx大片|