MySQL数据库:使用show profile命令分析性能
1、show profile的作用:
能夠查出最近執行的SQL語句的運行狀態,包括在運行過程中執行了哪些操作,各占用了多少時間,利用proflie 功能,可以分析一個SQL具體的執行代價是怎么樣的,尤其是可以分析它的最大瓶頸在哪里。目前profile 功能可提供除了內存以外的其他資源消耗統計,例如CPU、I/O、CONTEXT、SWAP等。大部分情況下,profile 的結果我們主要關注兩列:Status、Duration,前者表示的是profile 里的狀態,后者是該狀態的耗時。因此,我們最主要的是關注處于哪個狀態耗時最久,這些狀態中,哪些是可以進一步優化的。
?
2、show profile 語法:
SHOW PROFILE [type [, type] ... ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
?
type參數:
| ALL:顯示所有開銷信息
| BLOCK IO:阻塞的輸入輸出次數
| CONTEXT SWITCHES:上下文切換相關開銷信息
| CPU:顯示CPU的相關開銷信息?
|?IPC:接收和發送消息的相關開銷信息
| MEMORY :顯示內存相關的開銷,目前無用
| PAGE FAULTS :顯示頁面錯誤相關開銷信息
| SOURCE :列出相應操作對應的函數名及其在源碼中的調用位置(行數)?
| SWAPS:顯示swap交換次數的相關開銷信息
?
LIMIT row_count子句用于限制輸出行數。
?
3、show profile / show profiles的使用:
show profile 以及 show profiles語句可以顯示當前會話過程中執行的sql語句的性能(profiling)信息。
(1)profiling功能由MySQL會話變量 : profiling控制,默認是OFF關閉狀態,查看當前session是否開啟profile功能:
select @@profiling;
show variables like ‘profiling’;?
(2)開啟profiling:
set profiling=ON;
(3)運行SQL:
隨便運行幾條SQL,以便show profiles 的日志分析。
(4)查看結果:
(4.1)show profiles
show profiles 顯示最近發給服務器的多條語句,條數根據會話變量profiling_history_size定義,默認是15,最大值為100。設為0等價于關閉profiling 分析功能。除SHOW PROFILE和SHOW PROFILES之外,所有sql語句的性能信息都會被記錄,甚至包括有錯誤的語句。
show profiles;
(4.2)show profile
用于單獨分析最近一條執行的sql語句的詳細資源占用信息和工作狀況,默認顯示狀態以及它們持續的時間。
show profile;
可以給show profile 指定一個 for query id 來查看指定 id 的語句,還可以給輸出添加新的列。如,查看用戶和CPU使用??梢杂萌缦旅?。(詳細參數請看本文第2點的type參數)
show profile cpu,block io for query id;
id 為 show profiles 查出來的某條記錄的Query_ID。
?
4、作用范圍:
(1)這個命令只是在本會話內起作用,即無法分析本會話外的語句。開啟分析功能后,所有本會話中的語句都被分析(甚至包括執行錯誤的語句),除了SHOW PROFILE和SHOW PROFILES兩句本身。
(2)profiling是會話級的,當會話結束,與之相關的profiling信息也會隨之消失。
(3)profiling是針對進程(process)而非線程(threads),因此運行在服務器上的其他服務進程可能會影響分析結果.
?
總結
以上是生活随笔為你收集整理的MySQL数据库:使用show profile命令分析性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据库:explain执行计划
- 下一篇: MySQL数据库:通用查询日志和慢查询日