MySQL與MSSQL 有一個區別在於MySQL建表的時候須要選擇存儲引擎,經常使用的存儲引擎有MyISAM和InnoDB數據庫
而因爲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表時推薦此設置緩存