而由於InnoDB是一個健壯的事務型儲存引擎,已經有10多年的曆史,一些重量級的互連網公司(Yahoo,Google Netease ,Taobao)也經常使用
我的日常工作也經常接觸InnoDB,現在就InnoDB一部分可以改善效能的參數列舉
1. innodb_additional_mem_pool_size
除了緩衝表資料和索引外,可以為操作所需的其他內部項分配緩衝來提升InnoDB的效能。這些記憶體就可以通過此參數來分配。推薦此參數至少設定為2MB,實際上,是需要根據項目的InnoDB表的數目相應地增加
2.innodb_data_pool_size
此參數類似於MySQL的key_buffer參數,但特定用於InnoDB表.這個參數確定了要預留多少記憶體來緩衝表資料和索引。與key_buffer一樣,更高的設定會提升效能,可以是伺服器的記憶體70-80%
3.innodb_data_file_path
參數的名字和實際的用途有點出入,它不僅指定了所有InnoDB資料檔案的路徑,還指定了初始大小分配,最大分配以及超出起始分配界線時是否應當增加檔案的大小。此參數的一般格式如下:
path-to-datafile:size-allocation[:autoextend[:max-size-allocation]]
例如,假設希望建立一個資料檔案sales,初始大小為100MB,並希望在每次達到當前大小限制時,自動增加8MB(8MB是指定autoextend時的預設擴充大小).但是,不希望此檔案超過1GB,可以使用如下配置:
innodb_data_home_dir =
innodb_data_file_path = /data/sales:100M:autoextend:8M: max:1GB
如果此檔案增加到預定的1G的限制,可以再增加另外一個資料檔案,如下:
innodb_data_file_path = /data/sales:100M:autoextend:8M: max:1GB;innodb_data_file_path = /data2/sales2:100M:autoextend:8M: max:2GB
要注意的是,在這些樣本中,inndb_data_home_dir參數開始設定為空白,因為最終資料檔案位於單獨的位置(/data/和/data2/).如果希望所有 InnoDB資料檔案都位於相同的位置,就可以使用innodb_data_home_dir來指定共同位置,然後在通過 inndo_data_file_path來指定檔案名稱即可。如果沒有定義這些值,將在datadir中建立一個sales。
4 innodb_data_home_dir
此參數指定建立InnoDB資料表空間的路徑的公用部分,預設情況下,這是MySQL的預設資料,由MySQL參數datadir指定
5. innodb_file_io_threads
此參數指定InnoDB表可用的檔案I/O線程數,MySQL開發人員建議在非Windows平台中這個參數設定為4
6. innodb_flush_log_at_trx_commit
如果將此參數設定為1,將在每次提交事務後將日誌寫入磁碟。為提供效能,可以設定為0或2,但要承擔在發生故障時遺失資料的風險。設定為0表示交易記錄寫入記錄檔,而記錄檔每秒重新整理到磁碟一次。設定為2表示交易記錄將在提交時寫入日誌,但記錄檔每次重新整理到磁碟一次。
7.innodb_log_archive
因為MySQL目前使用自己的記錄檔恢複InnoDB表,此參數可設定為0
8.innodb_log_arch_dir
MySQL目前忽略此參數,但會在未來的版本中使用。目前,應當將其設定為與innodb_log_group_home_dir相同的值
9.innodb_log_buffer_size
此參數確定些記錄檔所用的記憶體大小,以M為單位。緩衝區更大能提高效能,但意外的故障將會遺失資料.MySQL開發人員建議設定為1-8M之間
10. innodb_log_file_size
此參數確定資料記錄檔的大小,以M為單位,更大的設定可以提高效能,但也會增加恢複故障資料庫所需的時間
11.innodb_log_files_in_group
為提高效能,MySQL可以以迴圈方式將記錄檔寫到多個檔案。推薦設定為3M
12. innodb_log_group_home_dir
此參數確定記錄檔組中的檔案的位置,日誌組中檔案的個數由innodb_log_files_in_group確定,此位置設定預設為MySQL的datadir
13.innodb_lock_wait_timeout
InnoDB 有其內建的死結檢測機制,能導致未完成的交易回復。但是,如果結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB無法識別死結。為消除這種可能性,可以將innodb_lock_wait_timeout設定為一個整數值,指示 MySQL在允許其他事務修改那些最終受交易回復的資料之前要等待多長時間(秒數)
14.skip-innodb
啟用此參數能防止夾雜InnoDB表驅動程式,不使用InnoDB表時推薦此設定