翻譯原文:http://www.cnblogs.com/glon/p/6484912.html
英文原文:https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation/html
在本文中,咱們將探討在安裝好 MySQL 以後,能夠進行調整的影響性能的前 10 個配置選項。mysql
當咱們做爲一名 MySQL 性能審計人員被錄用時,他們(公司)會但願咱們從新檢查 MySQL 的配置文件,而且給出一些改進的建議。不少人感到很驚訝,由於在大多數狀況下,咱們對已安裝的實例僅僅對少數的 MySQL 性能配置項建議進行調整,即便這個實例已經啓用了幾百個選項。本文的目的是給出一份列舉了一些關鍵性配置項的清單。redis
幾年前,咱們曾經在這篇博文中給出了一些建議,但從那之後,MySQL 有了很大的改變。sql
即使是經驗豐富的人也會失誤,也引發不少麻煩。因此在盲目的應用本文推薦的配置項以前,請牢記下面的幾項:數據庫
你應該常常會查看或調整的 3 個 MySQL 性能配置項。若是沒有,你可能很快就會遇到問題。緩存
innodb_buffer_pool_size:這是任何使用 InnoDB 存儲引擎的 MySQL 在安裝時第一個應該要查看的配置。Buffer pool 是用來緩存數據和索引的:儘量地設置大一點,以確保在進行大多數讀操做時是讀內存而不是讀磁盤。通常設置值爲 5-6GB(8GB RAM),20-25G(32GB RAM),100-120GB(128GB RAM)。安全
啓動的時候設置 innodb_log_file_size = 512M(也就是 1GB 大小的 redo 日誌),這樣能夠提供充足的寫空間。若是你知道你的應用是頻繁寫入的,而且你使用的 MySQL 版本是 MySQL 5.6,你能夠設置 innodb_log_file_size = 4G。服務器
從 MySQL 5.5 開始,InnoDB 成爲了默認的存儲引擎,而且它的使用頻率比其餘存儲引擎的要多得多。這就是要當心配置它的緣由。併發
在 MySQL 5.6 中,這個配置項是默認開啓的,所以多數狀況下,你無需操做。對於早期的 MySQL 版本,須要在加載數據以前把它設置成 ON ,由於它只對新建立的表有影響。async
innodb_flush_log_at_trx_commit:默認值爲 1,表示 InnoDB 徹底支持 ACID 特性。例如在在一個主節點上,你主要關注數據安全性,這是最好的設置值。然而它會對速度緩慢的磁盤系統形成很大的開銷,由於每次將改變刷新到 redo 日誌的時候,都須要額外的 fsync 操做。設置爲 2,可靠性會差一點,由於已提交的事務只會 1 秒鐘刷新一次到 redo 日誌,但在某些狀況下,對一個主節點而言,這仍然是能夠接受的,並且對於複製關係的從庫來講,這是一個很好的值。設置爲 0,速度更快,可是在遇到崩潰的時候極可能會丟失一些數據,這隻對從庫是一個好的設置值。
innodb_flush_method:這個設置項決定了數據和日誌刷新到磁盤的方式。當服務器硬件有 RAID 控制器、斷電保護、採起 write-back 緩存機制的時候,最經常使用的值是 O_DIRECT;其餘大多數場景使用默認值 fdatasync。sysbench 是一個幫助你在這兩個值之間作出選擇好工具。
query_cache_size:Query Cache(查詢緩存)是一個衆所周知的瓶頸位,即便在併發量不高的時候也會出現。最好的選擇是從一開始就禁用它,經過設置 query_cache_size = 0 (MySQL 5.6 中如今已經默認禁用),並經過其它途徑去提升讀查詢:合適的索引,增長從庫去分散讀壓力,或者使用一個額外的緩存(例如 memcache 或者 redis)。若是你的 MySQL 已經開啓了查詢緩存,而且沒有發現有任何錯誤,開啓查詢緩存多是有利的,若是要禁用它,就須要謹慎了。
記錄二進制日誌不是沒有開銷的。因此,例如是一個複製關係中的從節點,建議禁用二進制日誌。
固然,根據你的負載和硬件的實際狀況,還有其餘的設置可以起到調優的做用:例如在小內存、高速磁盤,高併發,寫密集型的負載下,須要特定的調優。不過本文的目的是給出幾個 MySQL 的性能調優配置項,讓你能夠快速獲得一個穩健的配置文件,而不用花費大量的時間去調整一些沒那麼重要的 MySQL 配置項,或者去查閱官方文檔來找出哪些配置項對你而言是相當重要的。