MySQL邏輯結(jié)構(gòu)圖
圖片.png
select * from T where id=1
比如一條SQL語句,從我們的客戶端出發(fā)開始進(jìn)入MySQL,首先接待他的是連接器
連接器
連接器接待之前會(huì)驗(yàn)證他的身份是否正確,就是我們的SQL賬號(hào)密碼是否一致
mysql -h $ip -P $port -u $user -p
密碼錯(cuò)誤,報(bào)錯(cuò),結(jié)束
如果驗(yàn)證通過,連接器會(huì)到權(quán)限表里面查詢?cè)撚脩羲鶕碛械臋?quán)限.之后,這個(gè)鏈接所有的權(quán)限邏輯判斷,都依賴于這次查詢
這意味著,當(dāng)連接器查詢之后,如果再修改該用戶權(quán)限,不會(huì)再經(jīng)生成的連接生效
連接建立完成后,如果長時(shí)間沒有后續(xù)動(dòng)作,連接器就會(huì)自動(dòng)關(guān)閉它,由wait_timeout屬性決定,默認(rèn)是8小時(shí).
連接通常建立比較復(fù)雜,盡量使用長連接,減少建立連接的開銷.
問題:有時(shí)候MySQL內(nèi)存漲的很快,這是因?yàn)镸ySQL執(zhí)行過程的內(nèi)存是管理在連接對(duì)象上的,只有連接斷開才會(huì)關(guān)閉
解決:1.定期斷開長連接
2.高版本MySQL可以使用mysql_reset_connection來初始化連接資源
MySQL查詢執(zhí)行過程.png