Mysql伺服器安裝完後的參數調整以及如何最佳化Mysql效能,直接使用預設的my.cnf參數,當然在大多數情況下是沒有問題的。想要通過調整參數獲得效能上的提升以及資源的合理利用,請關注下面這幾個參數:
key_buffer_size
這個參數對於MyISAM引擎來說是非常重要的,如果你的伺服器主要是用MyISAM引擎的,建議將該值設定為記憶體的30%-40%.很多最佳化工具是把系統當前的索引總大小計算得出的一個值,需要注意的是該值只緩衝索引資料,而MyISAM使用作業系統頁面緩衝來緩衝中繼資料,所以你要預留出足夠的記憶體空間給OS級緩衝,當然這個指不是越大越好,一般如果索引將近1G的時候可以分配4G左右的key_buffer_size,再多就浪費了,如果你的資料庫只是少量的表使用到MyISAM可以將該值保持在16-32M,看情況增加該值,一旦索引資料超出你的設定值Mysql將會在磁碟上建立暫存資料表來滿足它的需求。
innodb_buffer_pool_size
這個參數對於InnoDB引擎是相當重要的,跟MyISAM引擎的key_buffer_size相比InnoDB對這個參數可謂敏感的多,即便key_buffer_size設定錯了也無傷大雅,MyISAM還是能正常工作,InnoDB可比它難伺候多了,主要是因為InnoDB把資料和索引緩衝都放在了Buffer Pool,可以儘可能的大,比如總空餘記憶體的70-80%。Mysql會自動將滿足條件的髒頁合并寫入磁碟,tps會有些許波動。
innodb_additional_mem_pool_size
這玩意對效能提升不是那麼明顯,記憶體實在寬裕的話給個20MB的吧。
innodb_log_file_size
很重要,redo log檔案的大小,建議設定為innodb_buffer_pool_size的1/4,並非越大越好,太大了會導致Mysql崩潰重啟的時候恢復超級長…我一般設定為64-512M。
innodb_log_buffer_size
預設是8M,不建議將該值調整的過大,一般資料在這裡停留頂多就是1秒鐘就被刷到磁碟了,如果事務普遍涉及的資料區塊較大,可以適當增加該值,一般8-16M。
innodb_flush_log_at_trx_commit
有三個值0、1、2,預設是1,0是指在事務提交的時候不刷資料到log buffer,1是指強制刷到log buffer同時調用OS的fsync()強制刷到磁碟,2是指只調用write()不調用fsync(),0是不可取的,除非這個表不重要,1和2相當於魚和熊掌,1能夠確保資料庫在崩潰的時候事務的完整性,因為log buffer是在記憶體中的,1是強制fsync()到磁碟上,2隻推送到記憶體由系統自行選擇什麼時候寫入磁碟;所以1對磁碟造成的壓力可想而知,在木有SSD或者Raid10的系統上還是磁碟IO和資料完整二者選其一吧。
table_cache
開啟一個表的系統開銷是很龐大的,例如MyISAM表需要頻繁開啟MYI檔案並在其頭部標識該表正在被使用中,當你的系統有大量的表被同時訪問的時候,你一定不希望每次都從磁碟中開啟這個表吧?設定table_cache的意義在於儘可能的把表緩衝,減少磁碟壓力的同時提高系統效能,這個值一般設定為1024或更高,如果設定成1024更高的值時要注意系統的最大開啟檔案描述符的數量,設定open_files_limit以及系統的ulimit -SHn 65535。
thread_cache
不多說,一般是一個邏輯CPU讓他負責兩個線程,cores * 2
innodb_doublewrite
doublewrite buffer,是innodb資料表空間在物理磁碟上的一塊地區,InnoDB每次同步dirty pages是先從記憶體同步到doublewrite buffer,再同步到物理磁碟的實際位置,不建議關閉,對系統效能損失不大。
其他諸如query_cache_size,sync_binlog等按預設來就好了。