參數(shù)配置
- 內(nèi)存相關(guān)參數(shù):MySQL數(shù)據(jù)庫的內(nèi)存使用包括兩個部分:共享內(nèi)存與連接獨(dú)占內(nèi)存。每一個用戶新建連接,數(shù)據(jù)庫都要分配一塊固定大小的內(nèi)存空間保存用戶的臨時數(shù)據(jù),這些空間為單個連接獨(dú)占。在MySQL實(shí)例啟動時,系統(tǒng)同時也會預(yù)先分配一些實(shí)例級別的共享內(nèi)存空間,例如Innodb_buffer_pool,Innodb_log_buffer_pool等,供所有連接共享。獨(dú)占內(nèi)存空間乘以最大連接數(shù)加上共享內(nèi)存空間,我們可以計算出MySQL最大可使用的內(nèi)存空間,如果超過實(shí)際物理內(nèi)存大小,就存在MySQL進(jìn)程被Linux操作系統(tǒng)強(qiáng)行oom kill風(fēng)險,導(dǎo)致實(shí)例宕機(jī)。MySQL的這些內(nèi)存空間都可以通過配置參數(shù)指定大小,如果超過實(shí)際內(nèi)存空間,應(yīng)該調(diào)整相應(yīng)參數(shù)配置,最常見的是調(diào)整Innodb_buffer_pool和最大連接數(shù)。
- 頻繁卡頓,如果設(shè)置過大,會導(dǎo)致數(shù)據(jù)庫實(shí)例重啟或者故障恢復(fù)花費(fèi)大量的時間。一般,對于使用固態(tài)硬盤等高配置的存儲設(shè)備的數(shù)據(jù)庫,可以將重做日志設(shè)置大一些,對于使用機(jī)械硬盤的數(shù)據(jù)庫,應(yīng)該設(shè)置小一些,一般在512M到4G之間。innodb_flush_log_at_trx_commit定義了重做日志的刷新節(jié)奏,如果該參數(shù)非1,會導(dǎo)致數(shù)據(jù)庫宕機(jī)重啟后丟失部分更新數(shù)據(jù),對于數(shù)據(jù)可靠性要求較高的應(yīng)用造成嚴(yán)重影響。
- 二進(jìn)制日志相關(guān)參數(shù):binlog 主要用于MySQL集群復(fù)制以及故障恢復(fù)擔(dān)任協(xié)調(diào)者的作用。binlog_format定義了binlog的格式,主要包括ROW、STATEMENT、MIXED三種格式,ROW格式是最安全的一種日志格式,會保證主從數(shù)據(jù)的嚴(yán)格一致,建議開發(fā)者選用ROW格式。但是ROW格式的binlog會占用更多的存儲空間,通過expire_logs_days可以控制保存binlog的天數(shù),如果binlog占用的存儲空間比例超過50%,則應(yīng)考慮適當(dāng)減少binlog的保存天數(shù)。sync_binlog 參數(shù)定義了binlog刷新硬盤的節(jié)奏,如果非1,會導(dǎo)致宕機(jī)重啟后最近的更新數(shù)據(jù)丟失。
- 連接數(shù)相關(guān)參數(shù):MySQL有最大連接數(shù)限制max_connections,如果應(yīng)用連接超過max_connetions限制,則會得到out of max connections異常,無法建立連接。show processlist可以查看當(dāng)前的連接數(shù),如果接近最大限制,則存在無法新建連接的風(fēng)險。通過在應(yīng)用端使用連接池可以控制數(shù)據(jù)庫的連接數(shù)。
用戶訪問
- 慢連接:慢查詢數(shù)量是最直觀的反映數(shù)據(jù)庫處理能力是否滿足業(yè)務(wù)需求的指標(biāo)。通過設(shè)置slow_query_log可以開啟慢查詢?nèi)罩?,MySQL數(shù)據(jù)庫會將執(zhí)行時間超過long_query_time的查詢記入慢查詢?nèi)罩?,如果某個時間段內(nèi),慢查詢數(shù)量急劇增加,則開發(fā)者就必須要關(guān)注數(shù)據(jù)庫的性能問題,首先就需要進(jìn)行SQL優(yōu)化,其次考慮資源是否需要擴(kuò)容,最后可能需要數(shù)據(jù)庫水平擴(kuò)展方案,包括創(chuàng)建只讀從節(jié)點(diǎn);
- 死鎖數(shù)量:兩個事務(wù)涉及的數(shù)據(jù)庫記錄有重疊,如果SQL語句的加鎖順序不一致,就會導(dǎo)致事務(wù)之間的死鎖。雖然MySQL數(shù)據(jù)庫會自動的檢測死鎖并強(qiáng)制回滾系統(tǒng)認(rèn)為代價較小的事務(wù),但是死鎖的檢測與事務(wù)回滾都有較大的代價,會嚴(yán)重拖慢數(shù)據(jù)庫的性能,所以當(dāng)系統(tǒng)中出現(xiàn)大量死鎖時,開發(fā)者必須引起重視,要分析發(fā)生死鎖的事務(wù)的SQL語句的加鎖規(guī)則,調(diào)整SQL語句。通過show engin innodb status可以查看死鎖的相關(guān)信息以及系統(tǒng)的處理過程。