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

首頁 > 數據庫 > MySQL > 正文

MySQL中使用SHOW PROFILE命令分析性能的用法整理

2024-07-24 13:08:09
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了MySQL中使用show profile命令分析性能的用法整理,show profiles是數據庫性能優化的常用命令,需要的朋友可以參考下

show profile是由Jeremy Cole捐獻給MySQL社區版本的。默認的是關閉的,但是會話級別可以開啟這個功能。開啟它可以讓MySQL收集在執行語句的時候所使用的資源。為了統計報表,把profiling設為1

 

 
  1. mysql> SET profiling = 1; 

之后在運行一個查詢

 

 
  1. mysql> SELECT COUNT(DISTINCT actor.first_name) AS cnt_name, COUNT(*) AS cnt 
  2. -> FROM sakila.film_actor 
  3. -> INNER JOIN sakila.actor USING(actor_id) 
  4. -> GROUP BY sakila.film_actor.film_id 
  5. -> ORDER BY cnt_name DESC; 
  6. ... 
  7. 997 rows in set (0.03 sec) 

這個執行語句的剖析信息存儲在這個會話中。使用SHOW PROFILES進行查看。

 

 
  1. mysql> SHOW PROFILES/G 

 

 
  1. *************************** 1. row *************************** 
  2. Query_ID: 1 
  3. Duration: 0.02596900 
  4. Query: SELECT COUNT(DISTINCT actor.first_name) AS cnt_name,... 

你可以使用SHOW PROFILE語句來獲取已經存儲的剖析數據。如果不加參數,會顯示狀態以及它們持續的時間。

 

 
  1. mysql> SHOW PROFILE; 

 

 
  1. +------------------------+-----------+ 
  2. | Status | Duration | 
  3. +------------------------+-----------+ 
  4. | (initialization) | 0.000005 | 
  5. | Opening tables | 0.000033 | 
  6. | System lock | 0.000037 | 
  7. | Table lock | 0.000024 | 
  8. | init | 0.000079 | 
  9. | optimizing | 0.000024 | 
  10. | statistics | 0.000079 | 
  11. | preparing | 0.00003 | 
  12. | Creating tmp table | 0.000124 | 
  13. | executing | 0.000008 | 
  14. | Copying to tmp table | 0.010048 | 
  15. | Creating sort index | 0.004769 | 
  16. | Copying to group table | 0.0084880 | 
  17. | Sorting result | 0.001136 | 
  18. | Sending data | 0.000925 | 
  19. | end | 0.00001 | 
  20. | removing tmp table | 0.00004 | 
  21. | end | 0.000005 | 
  22. | removing tmp table | 0.00001 | 
  23. | end | 0.000011 | 
  24. | query end | 0.00001 | 
  25. | freeing items | 0.000025 | 
  26. | removing tmp table | 0.00001 | 
  27. | freeing items | 0.000016 | 
  28. | closing tables | 0.000017 | 
  29. | logging slow query | 0.000006 | 
  30. +------------------------+-----------+ 

每行都是狀態變化的過程以及它們持續的時間。Status那一列和SHOW FULL PROCESSLIST的State應該是一致的。

這個值是來自于thd->proc_info變量。因此你所查看的這個值是直接來自MySQL內部的。盡管這些數值是比較直接易懂的,你也可以查看MySQL手冊。

你可以給SHOW PROFILES指定一個Query_ID來查看指定的語句,還可以給輸出添加新的列。如,查看用戶和CPU使用??梢杂萌缦旅?。

 

 
  1. mysql> SHOW PROFILE CPU FOR QUERY 1; 

SHOW PROFILE可以深入的查看服務器執行語句的工作情況。以及也能幫助你理解執行語句消耗時間的情況。一些限制是它沒有實現的功能,不能查看和剖析其他連接的語句,以及剖析時所引起的消耗。

SHOW PROFILES顯示最近發給服務器的多條語句,條數根據會話變量profiling_history_size定義,默認是15,最大值為100。設為0等價于關閉分析功能。

SHOW PROFILE FOR QUERY n,這里的n就是對應SHOW PROFILES輸出中的Query_ID。

例如:

 

 
  1. mysql> show profiles; 

 

 
  1. +----------+-------------+---------------------------------------+ 
  2. | Query_ID | Duration | Query | 
  3. +----------+-------------+---------------------------------------+ 
  4. | 1 | 0.00037700 | alter table table1 drop column c3 int | 
  5. | 2 | 70.37123800 | alter table table1 drop column c3 | 
  6. | 3 | 0.00124500 | show tables | 
  7. | 4 | 0.00569800 | select * from table1 where id=2 | 
  8. | 5 | 0.00068500 | select count(1) from tables1 | 
  9. | 6 | 0.00197900 | select count(1) from table1 | 
  10. | 7 | 0.00105900 | alter table tables1 drop c1 | 
  11. | 8 | 0.00800200 | alter table table1 drop c1 | 
  12. +----------+-------------+---------------------------------------+ 
  13. 8 rows in set (0.00 sec) 

 

  1. mysql> SHOW PROFILE FOR QUERY 2; #查看alter table table1 drop column c3的分析 

 

 
  1. +------------------------------+-----------+ 
  2. | Status | Duration | 
  3. +------------------------------+-----------+ 
  4. | starting | 0.000183 | 
  5. | checking permissions | 0.000057 | 
  6. | checking permissions | 0.000059 | 
  7. | init | 0.000060 | 
  8. | Opening tables | 0.000071 | 
  9. | System lock | 0.000062 | 
  10. | setup | 0.000080 | 
  11. | creating table | 0.005052 | 
  12. | After create | 0.000220 | 
  13. | copy to tmp table | 0.000244 | 
  14. | rename result table | 70.364027 | 
  15. | end | 0.000575 | 
  16. | Waiting for query cache lock | 0.000062 | 
  17. | end | 0.000075 | 
  18. | query end | 0.000057 | 
  19. | closing tables | 0.000061 | 
  20. | freeing items | 0.000080 | 
  21. | logging slow query | 0.000056 | 
  22. | logging slow query | 0.000098 | 
  23. | cleaning up | 0.000059 | 
  24. +------------------------------+-----------+ 
  25. 20 rows in set (0.00 sec) 

如果沒有指定FOR QUERY,那么輸出最近一條語句的信息。

LIMIT部分的用法與SELECT中LIMIT子句一致,不贅述。

type是可選的,取值范圍可以如下:

ALL 顯示所有性能信息

BLOCK IO 顯示塊IO操作的次數

CONTEXT SWITCHES 顯示上下文切換次數,不管是主動還是被動

CPU 顯示用戶CPU時間、系統CPU時間

IPC 顯示發送和接收的消息數量

MEMORY [暫未實現]

PAGE FAULTS 顯示頁錯誤數量

SOURCE 顯示源碼中的函數名稱與位置

SWAPS 顯示SWAP的次數

例:

 

  1. mysql> show profile cpu for query 2; 

 

 
  1. +------------------------------+-----------+----------+------------+ 
  2. | Status | Duration | CPU_user | CPU_system | 
  3. +------------------------------+-----------+----------+------------+ 
  4. | starting | 0.000183 | 0.000000 | 0.000000 | 
  5. | checking permissions | 0.000057 | 0.000000 | 0.000000 | 
  6. | checking permissions | 0.000059 | 0.000000 | 0.000000 | 
  7. | init | 0.000060 | 0.000000 | 0.000000 | 
  8. | Opening tables | 0.000071 | 0.000000 | 0.000000 | 
  9. | System lock | 0.000062 | 0.000000 | 0.000000 | 
  10. | setup | 0.000080 | 0.000000 | 0.001000 | 
  11. | creating table | 0.005052 | 0.003000 | 0.001000 | 
  12. | After create | 0.000220 | 0.000000 | 0.000000 | 
  13. | copy to tmp table | 0.000244 | 0.000000 | 0.000000 | 
  14. | rename result table | 70.364027 | 7.470864 | 41.612674 | 
  15. | end | 0.000575 | 0.000000 | 0.001000 | 
  16. | Waiting for query cache lock | 0.000062 | 0.000000 | 0.000000 | 
  17. | end | 0.000075 | 0.000000 | 0.000000 | 
  18. | query end | 0.000057 | 0.000000 | 0.000000 | 
  19. | closing tables | 0.000061 | 0.000000 | 0.000000 | 
  20. | freeing items | 0.000080 | 0.000000 | 0.000000 | 
  21. | logging slow query | 0.000056 | 0.000000 | 0.000000 | 
  22. | logging slow query | 0.000098 | 0.000000 | 0.000000 | 
  23. | cleaning up | 0.000059 | 0.000000 | 0.000000 | 
  24. +------------------------------+-----------+----------+------------+ 
  25. 20 rows in set (0.00 sec) 

ps:

SHOW PROFILE ALL FOR QUERY 2;的信息還可以通過SELECT * FROM information_schema.profiling WHERE query_id = 2 ORDER BY seq;獲取。

作用范圍

這個命令只是在本會話內起作用,即無法分析本會話外的語句。

開啟分析功能后,所有本會話中的語句都被分析(甚至包括執行錯誤的語句),除了SHOW PROFILE和SHOW PROFILES兩句本身。

應用示例:使用SHOW PROFILE分析查詢緩存命中的性能優勢。

 

 
  1. mysql> set profiling=1; 

 

 
  1. Query OK, 0 rows affected (0.00 sec) 

 

 
  1. mysql> select count(1) as cnt from tran_excution; 

 

 
  1. +-------+ 
  2. | cnt | 
  3. +-------+ 
  4. | 14225 | 
  5. +-------+ 
  6. 1 row in set (0.00 sec) 

由于已經啟用了查詢緩存,相同查詢(非分區表)可以直接在查詢緩存中命中。

 

 
  1. mysql> select count(1) as cnt from tran_excution; 

我們仔細看下兩個同樣的語句的分析。

 

 
  1. mysql> show profile source for query 1; 

 

 
  1. +--------------------------------+----------+-----------------------+---------------+-------------+ 
  2. | Status | Duration | Source_function | Source_file | Source_line | 
  3. +--------------------------------+----------+-----------------------+---------------+-------------+ 
  4. | starting | 0.000048 | NULL | NULL | NULL | 
  5. | Waiting for query cache lock | 0.000013 | try_lock | sql_cache.cc | 454 | 
  6. | checking query cache for query | 0.000040 | send_result_to_client | sql_cache.cc | 1561 | 
  7. | checking permissions | 0.000023 | check_access | sql_parse.cc | 4751 | 
  8. | Opening tables | 0.000040 | open_tables | sql_base.cc | 4831 | 
  9. | System lock | 0.000020 | mysql_lock_tables | lock.cc | 299 | 
  10. | Waiting for query cache lock | 0.000037 | try_lock | sql_cache.cc | 454 | 
  11. | init | 0.000020 | mysql_select | sql_select.cc | 2579 | 
  12. | optimizing | 0.000015 | optimize | sql_select.cc | 865 | 
  13. | statistics | 0.000017 | optimize | sql_select.cc | 1056 | 
  14. | preparing | 0.000016 | optimize | sql_select.cc | 1078 | 
  15. | executing | 0.000015 | exec | sql_select.cc | 1836 | 
  16. | Sending data | 0.003875 | exec | sql_select.cc | 2380 | 
  17. | end | 0.000018 | mysql_select | sql_select.cc | 2615 | 
  18. | query end | 0.000015 | mysql_execute_command | sql_parse.cc | 4440 | 
  19. | closing tables | 0.000016 | mysql_execute_command | sql_parse.cc | 4492 | 
  20. | freeing items | 0.000016 | mysql_parse | sql_parse.cc | 5640 | 
  21. | Waiting for query cache lock | 0.000012 | try_lock | sql_cache.cc | 454 | 
  22. | freeing items | 0.000032 | NULL | NULL | NULL | 
  23. | Waiting for query cache lock | 0.000017 | try_lock | sql_cache.cc | 454 | 
  24. | freeing items | 0.000016 | NULL | NULL | NULL | 
  25. | storing result in query cache | 0.000017 | end_of_result | sql_cache.cc | 1020 | 
  26. | logging slow query | 0.000018 | log_slow_statement | sql_parse.cc | 1461 | 
  27. | logging slow query | 0.000050 | log_slow_statement | sql_parse.cc | 1470 | 
  28. | cleaning up | 0.000018 | dispatch_command | sql_parse.cc | 1417 | 
  29. +--------------------------------+----------+-----------------------+---------------+-------------+ 
  30. 25 rows in set (0.00 sec) 

 

 
  1. mysql> show profile source for query 2; 

 

 
  1. +--------------------------------+----------+-----------------------+--------------+-------------+ 
  2. | Status | Duration | Source_function | Source_file | Source_line | 
  3. +--------------------------------+----------+-----------------------+--------------+-------------+ 
  4. | starting | 0.000051 | NULL | NULL | NULL | 
  5. | Waiting for query cache lock | 0.000014 | try_lock | sql_cache.cc | 454 | 
  6. | checking query cache for query | 0.000016 | send_result_to_client | sql_cache.cc | 1561 | 
  7. | checking privileges on cached | 0.000013 | send_result_to_client | sql_cache.cc | 1652 | 
  8. | checking permissions | 0.000015 | check_access | sql_parse.cc | 4751 | 
  9. | sending cached result to clien | 0.000036 | send_result_to_client | sql_cache.cc | 1749 | 
  10. | logging slow query | 0.000017 | log_slow_statement | sql_parse.cc | 1461 | 
  11. | cleaning up | 0.000018 | dispatch_command | sql_parse.cc | 1417 | 
  12. +--------------------------------+----------+-----------------------+--------------+-------------+ 
  13. 8 rows in set (0.00 sec) 

可以清晰地看到緩存中命中時,大大節省了后臺的開銷。當然緩存的使用也需要根據各種場景(表的數據規模,更新頻率等)考察使用,并不是啟用緩存就一定能夠提高查詢效率。這里僅僅作為SHOW PROFILE的一個應用示例。


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
黑人极品videos精品欧美裸| 久久国产精品久久精品| 91久久久久久久一区二区| 欧美精品一区二区三区国产精品| 日韩精品在线观看一区二区| 亚洲人高潮女人毛茸茸| 国产精品日日做人人爱| 中文在线不卡视频| 成人国产精品久久久久久亚洲| 久久久亚洲福利精品午夜| 国产成人精品久久二区二区91| 5566日本婷婷色中文字幕97| 亚洲国产精品电影在线观看| 亚洲免费精彩视频| 综合国产在线观看| 欧美成人在线免费| 国产不卡av在线| 91久久精品日日躁夜夜躁国产| 欧美大尺度激情区在线播放| 久久久久国产精品免费| 亚洲免费视频在线观看| 国产激情视频一区| 午夜免费久久久久| 久久香蕉国产线看观看网| 亚洲午夜激情免费视频| 91大神福利视频在线| 国产成人欧美在线观看| 日本91av在线播放| 这里只有精品丝袜| 亚洲黄色片网站| 琪琪亚洲精品午夜在线| 国模精品视频一区二区三区| 成人国产精品久久久久久亚洲| 性欧美xxxx视频在线观看| 亚洲aaa激情| 亚洲国产精品久久久久久| 国外成人在线视频| 国产69精品久久久久久| 国内精品中文字幕| 国内精品久久久久久久久| 成人黄色av播放免费| 欧美极品少妇xxxxⅹ喷水| 亚洲欧洲午夜一线一品| 久久久久国产视频| 中文字幕一区二区三区电影| 久久国产精品电影| 中文字幕精品www乱入免费视频| 成人国产精品久久久久久亚洲| 91在线精品播放| 欧美日韩在线影院| 国产欧美一区二区三区四区| 久久精品人人做人人爽| 国产精品久久久久久av福利| 性色av一区二区三区在线观看| 91精品国产沙发| 国产精品美女在线观看| 亚洲欧美国产一区二区三区| 亚洲成人精品久久| 日韩一区二区三区国产| 午夜精品免费视频| 国产主播喷水一区二区| 亚洲xxxx18| 亚洲福利影片在线| 久久久久国产精品一区| 欧美成人精品在线观看| 精品久久久国产| 国产成人免费91av在线| 中文字幕不卡av| 色天天综合狠狠色| 国模私拍一区二区三区| 亚洲自拍小视频免费观看| 在线观看国产精品淫| 国产日韩欧美一二三区| 欧美日韩国产中文字幕| 日本午夜精品理论片a级appf发布| 久久精品色欧美aⅴ一区二区| 国产自摸综合网| 亚洲国产古装精品网站| 亚洲变态欧美另类捆绑| 亚洲女在线观看| 伊人久久大香线蕉av一区二区| 亚洲一区二区中文| 亚洲精品福利免费在线观看| 国产精品色婷婷视频| 九九九热精品免费视频观看网站| 亚洲乱亚洲乱妇无码| 国产精品av免费在线观看| 日本欧美一级片| 国产ts人妖一区二区三区| 日韩a**站在线观看| 国产精品专区一| 黄网动漫久久久| 黑人欧美xxxx| 欧美精品videosex极品1| 高跟丝袜一区二区三区| 国产精品美女久久久免费| 精品日本高清在线播放| 欧美成人在线免费视频| 亚洲欧美一区二区精品久久久| 国产精品露脸av在线| 啪一啪鲁一鲁2019在线视频| 尤物99国产成人精品视频| 日韩一级裸体免费视频| 136fldh精品导航福利| 亚洲日韩中文字幕| 日韩在线中文视频| 久久九九热免费视频| 国产精品日韩欧美| 久久国产精彩视频| 亚洲日韩中文字幕在线播放| 国产精品96久久久久久又黄又硬| 国产日韩在线看片| 精品国产91久久久久久老师| 亚洲精品suv精品一区二区| 性视频1819p久久| 国产精品免费视频久久久| 亚洲人成电影网站色www| 视频在线观看一区二区| 久久久久久999| 国产精品亚洲аv天堂网| 欧美激情中文字幕在线| 亚洲欧美日韩区| 欧美性极品少妇精品网站| 日本伊人精品一区二区三区介绍| 国产成人精彩在线视频九色| 久久久精品视频成人| 亚洲网址你懂得| 亚洲成年人在线| 欧美成aaa人片在线观看蜜臀| 91精品久久久久久久| 国产视频精品久久久| 亚洲精品国产精品国自产在线| 亚洲摸下面视频| 亚洲国产91色在线| 欧美成人在线网站| 国产激情久久久久| 欧美中在线观看| 亚洲精品美女在线| 亚洲美女在线视频| 尤物99国产成人精品视频| 国产精品免费观看在线| 国产一区二区美女视频| 97在线精品国自产拍中文| 国外成人在线直播| 亚洲最新av在线| 欧美性高潮床叫视频| 国产一区二区三区视频在线观看| 欧美孕妇性xx| 草民午夜欧美限制a级福利片| 97av在线播放| 成人国产精品久久久| 欧美男插女视频| 狠狠躁夜夜躁人人爽天天天天97| 尤物九九久久国产精品的特点| 国产欧美韩国高清| 国产精品流白浆视频| 欧美—级a级欧美特级ar全黄| 中国日韩欧美久久久久久久久| 欧美日韩国产精品一区二区不卡中文| 日韩成人在线网站| 国产成人自拍视频在线观看| 国产精品99蜜臀久久不卡二区| 国产成人97精品免费看片| 欧美成人精品不卡视频在线观看|