MySQL參數調優最佳實踐
來自: http://www.monkeyp.cn/show-10851.html
前言
很多時候,RDS用戶經常會問如何調優RDS MySQL的參數,為了回答這個問題,寫一篇blog來進行解釋:
哪一些參數不能修改,那一些參數可以修改;
這些提供修改的參數是不是已經是最佳設置,如何才能利用好這些參數;
哪些參數可以改
細心的用戶在購買RDS的時候都會看到,不同規格能夠提供的最大連接數以及內存是不同的,所以這一些產品規格的限制參數:連接數、內存用戶是不能夠修改的,如果內存或者連接數出現了瓶頸:
內存瓶頸:實例會出現OOM,然后導致主備發生切換
連接數瓶頸:應用不能新建立連接到數據庫
則需要進行應用優化、慢SQL優化或者進行彈性升級實例規格來解決。
還有一些涉及主備數據安全的參數比如innodb_flush_log_at_trx_commit、sync_binlog、gtid_mode、semi_sync、binlog_format等為了保證主備的數據安全,目前還暫不提供給用戶進行修改。
除上述的這些參數外,絕大部分的參數都已經由DBA團隊和源碼團隊優化過,用戶不需要過多調整線上的參數就可以把數據庫比較好的運行起來。但這些參數只是適合大多數的應用場景,個別特殊的場景還是需要個別對待,比如使用了tokudb引擎,這個時候就需要調整tokudb引擎能使用的內存比例(tokudb_buffer_pool_ratio);又比如我的應用特點本身需要很大的一個鎖超時時間,那么則需要調整innodb_lock_wait_timeout參數的大小以適應應用等等。
如何調參數
下面我將把控制臺中能夠修改的一些比較重要的參數給大家介紹一下,這些參數如果設置不當,則可能會出現性能問題或應用報錯。
open_files_limit
作用:該參數用于控制MySQL實例能夠同時打開使用的文件句柄數目。
原因:當數據庫中的表(MyISAM 引擎表在被訪問的時候需要消耗文件描述符,InnoDB引擎會自己管理已經打開的表 table_open_cache)打開越來越多后,會消耗分配給每個實例的文件句柄數目,RDS在起初初始化實例的時候設置的open_files_limit為8192,當打開的表數目超過該參數則會導致所有的數據庫請求報錯誤。
現象:如果參數設置過小可導致應用報錯
/mysqld: Can't open file: './mysql/user.frm' (errno: 24 -Too many open files);
建議:提高open_files_limit的值,RDS目前可以支撐最大為65535,,同時建議替換MyISAM存儲引擎為InnoDB引擎。
back_log
作用:MySQL每處理一個連接請求的時候都會對應的創建一個新線程與之對應,那么在主線程創建新線程期間,如果前端應用有大量的短連接請求到達數據庫,MySQL 會限制此刻新的連接進入請求隊列,由參數back_log控制,如果等待的連接數量超過back_log,則將不會接受新的連接請求,所以如果需要MySQL能夠處理大量的短連接,需要提高此參數的大小。
</div>