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