背景 回顧人們在開始工作之前,都會問自己這樣一個問題:給你一臺16G記憶體的Innodb專用資料庫伺服器,如何配置才能讓其穩定、高效地給典型的Web應用提供服務? 硬體 記憶體:記憶體對於Innodb資料庫至關重要!16 32G記憶體 CPU:雖然CPU配置依賴於應用,但一般來說,就CPU來說,2 Du ...
背景
回顧人們在開始工作之前,都會問自己這樣一個問題:給你一臺16G記憶體的Innodb專用資料庫伺服器,如何配置才能讓其穩定、高效地給典型的Web應用提供服務?
硬體
記憶體:記憶體對於Innodb資料庫至關重要!16-32G記憶體
CPU:雖然CPU配置依賴於應用,但一般來說,就CPU來說,2*Dual Core CPUs已是非常好的配置,若使用two Quad Core CPUs 會增加一些擴展性的問題。
硬碟:一般來說,硬碟需要使用6-8個硬碟做成一個RAID就足夠了。RAID10比RAID5的效果要好。
軟體
操作系統
- 操作系統採用64位的,切勿在64位的機器上使用32位的操作系統。
- linux操作系統使用LVM將更高效
- 大多數情況下EXT3文件系統就足夠了,但一些特殊項目中會使用XFS文件系統。
- 如果使用參數innodb_file_per_table,雖然作用很小,還是建議使用選項noatime和nodiratime。
- 確保swap充足
MySQL資料庫設置
innodb_buffer_pool_size :70-80%可用記憶體。
innodb_log_file_size :取決於您的恢復速度需求,一般來說256M已經足夠。
innodb_log_buffer_size :4M能滿足大多數情景,若使用很多大欄位需適當增加該值,目前看到的狀況8M即可。
innodb_flush_log_at_trx_commit=2 :若不關心事物的ACID特性的話,在系統崩潰時,設置這個值可以在1~2秒中釋放事務。特別是在有較多短連接的情況下,該參數尤為重要。
innodb_thread_concurrency=8:即使當前的InnoDB可擴展性修複具有有限的併發性也有幫助。8這個數據能滿足大多數情況,但實際運用起來可能比這個值大也有可能比這個值小。
innodb_flush_method=O_DIRECT :大多數情況下可提高性能,但沒有RAID的話,會影響寫速度。
參考文獻
- 《Innodb Performance Optimization Basics》
- 《InnoDB performance optimization basics (redux)》
- 《InnoDB Startup Options and System Variables》