轉載請註明原文出處: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% |