MySQL profiling中要關(guān)注哪些信息

2018-07-31 19:01 更新

利用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ū)給我留言,謝謝。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)