針對mysql innodb配置的優化

轉載請註明原文出處:http://blog.csdn.net/roddick621

針對mysql innodb配置的優化

測試環境

操作系統 Ubuntu13.04
CPU Intel(R) Core(TM)2 Duo CPU
內存 4G
硬盤 Seagate ST2000DM001-1CH164
mysql版本 5.5.32

測試工具

工具名稱 tpcc-mysql
倉庫數 10個(innodb數據大概爲1G)
測試線程數 2
測試前預熱 120秒
測試時間 600秒

測試結果分析

具體數據從下面下載excel文檔。

  • innodb_buffer_pool_size
    調整Innodb緩衝池的大小。根據官方文檔推薦,如果是專用服務器的話,可以把大小設置爲內存的50-80%。實際情況應該根據除去已用的內存來分配一個合適的大小。推薦大小爲Innodb實際數據的大小。
    innodb_buffer_pool_size大小 128M 512M 1G
    每10秒執行的次數 52.8 70.23 68.86
    提升 - 33.02% 30.43%

  • innodb_flush_method
    O_DIRECT:跳過了操作系統的文件系統Disk Cache,讓MySQL直接讀寫磁盤了。如果硬件沒有預讀功能,那麼使用O_DIRECT將極大降低InnoDB的性能。
    innodb_flush_method類型 fdatasync O_DIRECT
    每10秒執行的次數 52.8 29.033
    提升 - -45.01%

  • innodb_log_file_size
    innodb_log_file_size設置太大,會導致崩潰恢復時間很長。如果設置太小,日誌切換就更頻繁,也就直接導致更多的buffer flush,如果IO不夠快,Buffer寫不下去,那麼日誌就不能切換。官方推薦日誌文件的總大小加起來應該達到緩衝池的25%-100%。
    innodb_log_file_size大小 5M 256M
    每10秒執行的次數 52.8 29.033
    提升 - 8.21%

  • innodb_flush_log_at_trx_commit
    改變日誌寫入磁盤的策略。默認的策略1是每一次事務提交或事務外的指令都需要把日誌寫入硬盤。策略2是不寫入硬盤而是寫入系統緩存,日誌仍然會每秒寫入到硬盤。
    innodb_flush_log_at_trx_commit類型 1 2
    每10秒執行的次數 52.8 144.73
    提升 - 174.12%

  • innodb_buffer_pool_instances
    將InnoDB的buffer pool分隔爲多少個區域,增加併發能力。innodb_buffer_pool_size過小的時候增大innodb_buffer_pool_instances,會導致性能很不穩定。
    innodb_buffer_pool_instances個數 1 2 4
    每10秒執行的次數 52.8 58.43 58.55
    提升 - 10.67% 10.89%

綜合測試

配置如下:
變量名 變量取值
innodb_buffer_pool_size 1G
innodb_log_file_size 256M
innodb_flush_log_at_trx_commit 2
innodb_buffer_pool_instances 1
  優化前 優化後
每10秒執行事務次數 52.8 1509
提升 - 2758.52%

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章