數(shù)據(jù)庫優(yōu)化之常用的show variables、show status配置優(yōu)化

當(dāng)面試官讓你聊聊MySQL數(shù)據(jù)庫性能優(yōu)化,你還是只能回答優(yōu)化sql,建索引嗎?
讓我們看看還可以從哪些方面聊聊吧。其實你還可以從網(wǎng)速、數(shù)據(jù)量、數(shù)據(jù)庫日志、內(nèi)存等問題、硬件配置,當(dāng)前占用資源、硬盤碎片或索引碎片等等諸多方面分析聊聊。

?? MySQL優(yōu)化-配置優(yōu)化

1、show variables查看MySQL服務(wù)器配置參數(shù)

1)查看及調(diào)整系統(tǒng)配置變量值

show variables;--查看一些系統(tǒng)配置變量
show variables like 'key_%';
show variables like '%cache%';--查看緩存相關(guān)參數(shù)
show variables like 'innodb_buffer_pool%';--查看緩沖池信息
show variables like 'innodb_file_per_table';--選擇是否將表數(shù)據(jù)和系統(tǒng)表空間獨立成單個文件。



2)查詢緩存相關(guān)參數(shù):

[圖片上傳失敗...(image-c1ee16-1685674585229)]

2、show status查看MySQL服務(wù)器運行狀態(tài)值

通過下面的命令可以了解MySQL服務(wù)器運行狀態(tài)值。

show status;
show status like 'com_%';
show status like 'innodb_%';
show status like 'connections';
show status like 'slow_queries';

1)調(diào)整max_connections:

MySQL最大連接數(shù)量,默認(rèn)151。
在Linux系統(tǒng)上,如果內(nèi)存足夠且不考慮用戶等待響應(yīng)時間這些問題,MySQL理論上可以支持到萬級連接,但是通常情況下,這個值建議控制在1000以內(nèi)。

2)調(diào)整back_log:

TCP連接的積壓請求隊列大小,通常是max_connections的五分之一,最大不能超過900。

3)調(diào)整table_open_cache:

這個值應(yīng)該設(shè)置為max_connections的N倍,其中N代表每個連接在查詢時打開的表的最大個數(shù)。

4)調(diào)整innodb_lock_wait_timeout:

該參數(shù)可以控制InnoDB事務(wù)等待行鎖的時間,默認(rèn)值是50ms,對于反饋響應(yīng)要求較高的應(yīng)用,可以將這個值調(diào)小避免事務(wù)長時間掛起;
對于后臺任務(wù),可以將這個值調(diào)大來避免發(fā)生大的回滾操作。

5)調(diào)整innodb_buffer_pool_size:

InnoDB數(shù)據(jù)和索引的內(nèi)存緩沖區(qū)大小,以字節(jié)為單位,這個值設(shè)置得越高,訪問表數(shù)據(jù)需要進(jìn)行的磁盤I/O操作就越少,如果可能甚至可以將該值設(shè)置為物理內(nèi)存大小的80%。

調(diào)優(yōu)參考計算方法
val = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%

val > 95% 則考慮增大 innodb_buffer_pool_size, 建議使用物理內(nèi)存的75%

val < 95% 則考慮減小 innodb_buffer_pool_size, 建議設(shè)置為:Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (102410241024)

設(shè)置命令:set global innodb_buffer_pool_size = 2097152; //緩沖池字節(jié)大小,單位kb,如果不設(shè)置,默認(rèn)為128M

設(shè)置要根據(jù)自己的實際情況來設(shè)置,如果設(shè)置的值不在合理的范圍內(nèi),并不是設(shè)置越大越好,可能設(shè)置的數(shù)值太大體現(xiàn)不出優(yōu)化效果,反而造成系統(tǒng)的swap空間被占用,導(dǎo)致操作系統(tǒng)變慢,降低sql查詢性能。

修改配置文件的調(diào)整方法,修改my.cnf配置:

innodb_buffer_pool_size = 2147483648 #設(shè)置2G

innodb_buffer_pool_size = 2G #設(shè)置2G

innodb_buffer_pool_size = 500M #設(shè)置500M

MySQL5.7及以后版本,改參數(shù)時動態(tài)的,修改后,無需重啟MySQL,但是低版本,靜態(tài)的,修改后,需要重啟MySQL。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容