當我們被人雇來監測MySQL性能時,人們希望我們能夠檢視一下MySQL配置然后給出一些提高建議。許多人在事后都非常驚訝,因為我們建議他們僅僅改動幾個設置,即使是這里有好幾百個配置項。這篇文章的目的在于給你一份非常重要的配置項清單。
我們曾在幾年前在博客里給出了這樣的建議,但是MySQL的世界變化實在太快了!
寫在開始前…
即使是經驗老道的人也會犯錯,會引起很多麻煩。所以在盲目的運用這些推薦之前,請記住下面的內容:
一次只改變一個設置!這是測試改變是否有益的唯一方法。
大多數配置能在運行時使用SET GLOBAL改變。這是非常便捷的方法它能使你在出問題后快速撤銷變更。但是,要永久生效你需要在配置文件里做出改動。
一個變更即使重啟了MySQL也沒起作用?請確定你使用了正確的配置文件。請確定你把配置放在了正確的區域內(所有這篇文章提到的配置都屬于 [mysqld])
服務器在改動一個配置后啟不來了:請確定你使用了正確的單位。例如,innodb_buffer_pool_size的單位是MB而max_connection是沒有單位的。
不要在一個配置文件里出現重復的配置項。如果你想追蹤改動,請使用版本控制。
不要用天真的計算方法,例如”現在我的服務器的內存是之前的2倍,所以我得把所有數值都改成之前的2倍“。
基本配置
你需要經常察看以下3個配置項。不然,可能很快就會出問題。
innodb_buffer_pool_size:這是你安裝完InnoDB后第一個應該設置的選項。緩沖池是數據和索引緩存的地方:這個值越大越好,這能保證你在大多數的讀取操作時使用的是內存而不是硬盤。典型的值是5-6GB(8GB內存),20-25GB(32GB內存),100-120GB(128GB內存)。
innodb_log_file_size:這是redo日志的大小。redo日志被用于確保寫操作快速而可靠并且在崩潰時恢復。一直到MySQL 5.1,它都難于調整,因為一方面你想讓它更大來提高性能,另一方面你想讓它更小來使得崩潰后更快恢復。幸運的是從MySQL 5.5之后,崩潰恢復的性能的到了很大提升,這樣你就可以同時擁有較高的寫入性能和崩潰恢復性能了。一直到MySQL 5.5,redo日志的總尺寸被限定在4GB(默認可以有2個log文件)。這在MySQL 5.6里被提高。
一開始就把innodb_log_file_size設置成512M(這樣有1GB的redo日志)會使你有充裕的寫操作空間。如果你知道你的應用程序需要頻繁的寫入數據并且你使用的時MySQL 5.6,你可以一開始就把它這是成4G。
max_connections:如果你經常看到‘Too many connections'錯誤,是因為max_connections的值太低了。這非常常見因為應用程序沒有正確的關閉數據庫連接,你需要比默認的151連接數更大的值。max_connection值被設高了(例如1000或更高)之后一個主要缺陷是當服務器運行1000個或更高的活動事務時會變的沒有響應。在應用程序里使用連接池或者在MySQL里使用進程池有助于解決這一問題。
新聞熱點
疑難解答