通過寶塔面板實現(xiàn)MySQL性能簡單調優(yōu)
在PHP+MYSQL架構網站運行過程中,往往會遇到各種性能問題影響,如MySQL、PHP、CPU、磁盤IO、緩存等,其中MySQL瓶頸就是最常見也最難解決的一種影響網站性能的因素;通常,我們會使用redis、memcached等緩存軟件來緩存內容,這確實是最優(yōu)的解決方案之一,但這需要網站程序的支持,然而多數(shù)常用網站程序并不支持或者不能完美支持這些緩存軟件,今天我們就來談談如何通過MySQL自身的配置調整來優(yōu)化MySQL性能,以緩解MySQL瓶頸問題。
準備:
1、寶塔Linux面板 正式版 5.2.0+ (2017/09/20發(fā)布)測試版5.2.4+
2、MySQL 5.x
通常MySQL調優(yōu)我們分以下幾部分:
1、MySQL配置參數(shù)調優(yōu) (需要根據網站運行情況調整)
2、數(shù)據表索引調優(yōu) (效果明顯,但通常優(yōu)秀的開源程序都不需要調整)
3、SQL語句調優(yōu) (這是程序員或DBA干的事)
今天我們主要談談如果配合寶塔面板的新功能來進行MySQL配置參數(shù)調優(yōu),我們先來看兩張圖片:
(圖1)
(圖2)
很明顯,(圖1)顯示的是MySQL當前的運行狀態(tài),(圖2)顯示的是MySQL主要配置參數(shù)
下面我們就來解讀一下這兩張圖:
1、活動/峰值連接數(shù)
(圖1)中當前活動的連接為1個,自MySQL服務啟動以來,最高連接數(shù)為54;當最高連接數(shù)接近或等于(圖2)中的max_connections時,應適當增加max_connections,需要注意的是,不要一下子增加過多,建議每次增加50,觀察一段時間,不夠再繼續(xù)增加。
2、線程緩存命中率
(圖1)中線程緩存命中率為99.78%,若這個值小于90%,建議適當增加(圖2)中的thread_cache_size,建議每次增加8。
3、索引命中率
(圖1)中索引命中率為99.50%,若這個值小于95%,建議適當增加(圖2)中的key_buffer_size,建議每次增加64,需要說明的是,若您的數(shù)據庫使用的是Innodb引擎,可忽略這個選項
4、Innodb索引命中率
(圖1)中Innodb索引命中率為100%,若這個值小于95%,建議適當增加(圖2)中的innodb_buffer_pool_size,建議每次增加64,需要說明的是,若您的數(shù)據庫沒有使用Innodb引擎,可忽略這個選項
5、查詢緩存命中率
MySQL查詢緩存是個比較受爭議的功能,個人建議當你有在使用redis、memcached等緩存軟件時,在(圖2)中將query_cache_size設為0可以將其關閉,當你沒有使用緩存軟件,有多余的內存使用,且數(shù)據庫瓶頸明顯存在時,可以嘗試開啟查詢緩存,這是個非常依賴數(shù)據表結構及SQL語句優(yōu)化的功能,若數(shù)據表結構和SQL語句都針對查詢緩存進行過優(yōu)化,它的效果還是很不錯的。
6、創(chuàng)建臨時表到磁盤
(圖1)中創(chuàng)建臨時表到磁盤的比例是0.42%,這說明大部分臨時表創(chuàng)建到內存了,不會過多增加磁盤IO的開銷,建議,當比例大于2%時適當增加(圖1)中的tmp_cache_size,建議每次增加32,當比例大于60%時,放棄吧,有些開源程序并沒有專門優(yōu)化過SQL語句,所以在運行過程中會開啟大量臨時表,加多少緩存都是不夠用的。
7、已打開的表
當(圖1)中的已打開的表接近或等于(圖2)中的table_open_cache時,可以適當增加table_open_cache,但若設置過大可能導致您的程序頻繁中斷MySQL連接,建議在1024以內,最大不要超過2048。
8、沒有使用索引的量、沒有使用索引的JOIN量
若不為0,就檢查下數(shù)據表索引吧,其實只要沒有瘋漲,比如一天增漲幾千,一般可以忽略,必竟優(yōu)化索引還是程序員或DBA去干比較合適。
9、排序后的合并次數(shù)
如果這個值在緩慢增張,建議適當增加(圖2)中的sort_buffer_size,建議每次增加512,但最大不要超過8192,如果這個值一直在瘋漲,增加sort_buffer_size也沒用,就放棄這個選項吧,這個鍋還是給程序開發(fā)者背。
10、鎖表次數(shù)
如果服務器CPU開銷不大的情況下,瘋狂鎖表,建議你將所有數(shù)據表轉換成innodb,記得轉換前備份哦。
11、優(yōu)化方案
這個是我們根據內存大小給的一個推薦優(yōu)化方案,僅是建議僅用于基礎參考值,還是要根據實據情況來調整每一個配置項。
注意:保存參數(shù)配置后不會立即生效,記得要重啟MySQL服務。