程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> my.cnf參數配置實現InnoDB引擎性能優化

my.cnf參數配置實現InnoDB引擎性能優化

編輯:MySQL綜合教程

my.cnf參數配置實現InnoDB引擎性能優化。本站提示廣大學習愛好者:(my.cnf參數配置實現InnoDB引擎性能優化)文章只能為提供參考,不一定能成為您想要的結果。以下是my.cnf參數配置實現InnoDB引擎性能優化正文


my.cnf參數配置實現InnoDB引擎性能優化

作者:linux_c_coding_man

目前來說:InnoDB是為Mysql處理巨大數據量時的最大性能設計。它的CPU效率可能是任何其它基於磁盤的關系數據庫引擎所不能匹敵的。在數據量大的網站或是應用中Innodb是倍受青睐的。另一方面,在數據庫的復制操作中Innodb也是能保證master和slave數據一致有一定的作用。

在網上看了無數的my.cnf的配置,大多數提到的配置無外乎這幾個:

1. innodb_buffer_pool_size
2. innodb_log_file_size
3. innodb_log_buffer_size
4. innodb_flush_log_at_trx_commit

然後自己寫了兩個例子,一個單線程的,一個多線程的來通過改變配置參數來測試是否提高了性能。結果是只有innodb_flush_log_at_trx_commit可以提高性能,對於1,2,3參數無論是開其中某一個,還是三個同時調節都沒有影響到測試性能。我想了下,可能是我的測試數據量還不夠大造成的,後續有條件了再更大的數據量測試一下這3個參數。

這裡詳細說一下innodb_flush_log_at_trx_commit:

如果innodb_flush_log_at_trx_commit設置為0,log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁盤)操作同時進行。該模式下,在事務提交的時候,不會主動觸發寫入磁盤的操作。
如果innodb_flush_log_at_trx_commit設置為1,每次事務提交時MySQL都會把log buffer的數據寫入log file,並且flush(刷到磁盤)中去。
如果innodb_flush_log_at_trx_commit設置為2,每次事務提交時MySQL都會把log buffer的數據寫入log file。但是flush(刷到磁盤)操作並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁盤)操作。

結果:

當設置為0,該模式速度最快,但不太安全,mysqld進程的崩潰會導致上一秒鐘所有事務數據的丟失。
當設置為1,該模式是最安全的,但也是最慢的一種方式。在mysqld 服務崩潰或者服務器主機crash的情況下,binary log 只有可能丟失最多一個語句或者一個事務。
當設置為2,該模式速度較快,也比0安全,只有在操作系統崩潰或者系統斷電的情況下,上一秒鐘所有事務數據才可能丟失。

注意:由於進程調度策略問題,這個“每秒執行一次 flush(刷到磁盤)操作”並不是保證100%的“每秒”。

結論:innodb_flush_log_at_trx_commit設置為0或者2的時候速度差不多,兩者都比設置為1的時候快很多。

這裡又讓我想到了InnoDB和MyISAM引擎的區別,InnoDB的優勢在於並發處理情況下比MyISAM快。而我的線程池數量是根據cpu的線程數來設定的,然後我把線程池的數量設置比cpu線程數大,更大,再大,結果我的測試程序性能又提高了,我醉了,原來是我對線程池的理解太淺薄了。線程池的最優大小

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved