MySQL基本架構(gòu)示意圖
image.png
大體來(lái)說(shuō),MySQL可以分為Server層和存儲(chǔ)引擎層兩部分
連接器
連接完成后麻昼,如果沒(méi)有后續(xù)動(dòng)作奠支,這個(gè)連接就處于空閑狀態(tài),可以使用show processlist命令查看抚芦。
image.png
若客戶端太長(zhǎng)時(shí)間沒(méi)有動(dòng)靜倍谜,連接器就會(huì)自動(dòng)斷開(kāi)。這個(gè)時(shí)間由參數(shù)wait_tiemout控制燕垃,默認(rèn)是8小時(shí)枢劝。
建立連接的過(guò)程比較耗時(shí),故盡量減少建立連接的動(dòng)作卜壕,也就是盡量使用長(zhǎng)鏈接您旁。但有時(shí)候MySQL占用內(nèi)存漲的特別快,這是因?yàn)镸ySQL在執(zhí)行過(guò)程臨時(shí)使用的內(nèi)存是管理在連接對(duì)象里面的轴捎。這些資源會(huì)在連接斷開(kāi)的時(shí)候才釋放鹤盒。所以長(zhǎng)連接積累下來(lái),可能會(huì)導(dǎo)致內(nèi)存占用太大侦副,被系統(tǒng)強(qiáng)行殺掉OOM
解決方案
- 定期斷開(kāi)連接侦锯,或執(zhí)行過(guò)一個(gè)占用內(nèi)存較大的查詢后,斷開(kāi)連接重新連接
- MySQL5.7版本后秦驯,可以通過(guò)mysql_reset_connection重新初始化連接資源
查詢緩存
大多數(shù)情況下尺碰,不建議使用查詢緩存,原因是弊大于利
查詢緩存的失效非常頻繁,只要對(duì)一個(gè)表有更新亲桥,緩存都會(huì)被清空洛心,命中率非常低。8.0版本后已經(jīng)刪除這個(gè)功能里
分析器
如果沒(méi)有命中緩存题篷,就開(kāi)始真正執(zhí)行語(yǔ)句了词身。詞法分析和語(yǔ)法分析就在這里完成