W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
利用MySQL的PROFILE功能,我們可以很方便的查看一個(gè)SQL具體的執(zhí)行代價(jià)是怎樣的,尤其是可以分析它的最大瓶頸在哪里。目前PROFILE功能可提供除了內(nèi)存以外的其他資源消耗統(tǒng)計(jì),例如CPU、I/O、CONTEXT、SWAP等。
PROFILE功能只能在SESSION級別使用,還做不到像SQL Server那樣可以全局開啟,收集一段時(shí)間后再關(guān)閉,這點(diǎn)有待改進(jìn)。關(guān)于PROFILE的具體用法大家可以查看手冊 13.7.5.31 SHOW PROFILE Syntax,這里不細(xì)說。
大部分情況下,PROFILE的結(jié)果我們主要關(guān)注兩列:Status、Duration,前者表示的是PROFILE里的狀態(tài),它和PROCESSLIST的狀態(tài)基本是一致的,后者是該狀態(tài)的耗時(shí)。因此,我們最主要的是關(guān)注處于哪個(gè)狀態(tài)耗時(shí)最久,這些狀態(tài)中,哪些可以進(jìn)一步優(yōu)化。
和我們之前的一個(gè)分享 [MySQL FAQ]系列 — processlist中哪些狀態(tài)要引起關(guān)注 類似,PROFILE中,下面幾種狀態(tài)是要尤其關(guān)注的,而且大多數(shù)通過創(chuàng)建合適的索引就可以完成優(yōu)化。
Status | 建議 |
---|---|
System lock | 確認(rèn)是由于哪個(gè)鎖引起的,通常是因?yàn)镸ySQL或InnoDB內(nèi)核級的鎖引起的建議:如果耗時(shí)較大再關(guān)注即可,一般情況下都還好 |
Sending data | 從server端發(fā)送數(shù)據(jù)到客戶端,也有可能是接收存儲(chǔ)引擎層返回的數(shù)據(jù),再發(fā)送給客戶端,數(shù)據(jù)量很大時(shí)尤其經(jīng)常能看見(備注:Sending Data不是網(wǎng)絡(luò)發(fā)送,是從硬盤讀取,發(fā)送到網(wǎng)絡(luò)是Writing to net 建議:通過索引或加上LIMIT,減少需要掃描并且發(fā)送給客戶端的數(shù)據(jù)量) |
Sorting result | 正在對結(jié)果進(jìn)行排序,類似Creating sort index,不過是正常表,而不是在內(nèi)存表中進(jìn)行排序(建議:創(chuàng)建適當(dāng)?shù)乃饕?/td> |
Table lock | 表級鎖,沒什么好說的,要么是因?yàn)镸yISAM引擎表級鎖,要么是其他情況顯式鎖表 |
create sort index | 當(dāng)前的SELECT中需要用到臨時(shí)表在進(jìn)行ORDER BY排序(建議:創(chuàng)建適當(dāng)?shù)乃饕?/td> |
checking query cache for querychecking privileges on cachedsending cached result to clien storing result in query cache | 和query cache相關(guān)的狀態(tài),已經(jīng)多次強(qiáng)烈建議關(guān)閉 |
更多狀態(tài)請移步之前的分享文章 [MySQL FAQ]系列 — processlist中哪些狀態(tài)要引起關(guān)注 以及官方文檔 8.14.2 General Thread States,如果有未涉及想了解的狀態(tài),也請?jiān)谠u論區(qū)給我留言,謝謝。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: