這一篇博客還不能超過8萬字符,因此只能接着上一篇再寫一篇了。
InnoDB啓動選項
這一節敘述InnoDB相關的服務器選項,全部這些選項能夠以--opt_name=value的形式在命令行或在選項文件裏被指定。
· innodb_additional_mem_pool_size
InnoDB用來存儲數據目錄信息&其它內部數據結構的內存池的大小。你應用程序裏的表越多,你須要在這裏分配越多的內存。若是InnoDB用光了這個池內的內存,InnoDB開始從操做系統分配內存,而且往MySQL錯誤日誌寫警告信息。默認值是1MB。
· innodb_autoextend_increment
當自動擴展表空間被填滿之時,爲擴展而增長的尺寸(MB爲單位)。默認值是8。這個選項能夠在運行時做爲全局系統變量而改變。
· innodb_buffer_pool_awe_mem_mb
若是緩衝池被放在32位Windows的AWE內存裏,這個參數就是緩衝池的大小(MB爲單位)。(僅在32位Windows上相關)若是你的32位Windows操做系統使用所謂的「地址窗口擴展(AWE)」支持超過4GB內存,你能夠用這個參數把InnoDB緩衝池分配進AWE物理內存。這個參數最大的可能值是64000。若是這個參數被指定了,innodb_buffer_pool_size是在32位地址空間的mysqld內的窗口,InnoDB把那個AWE內存映射上去。對innodb_buffer_pool_size參數,一個比較好的值是500MB。
· innodb_buffer_pool_size
InnoDB用來緩存它的數據和索引的內存緩衝區的大小。你把這個值設得越高,訪問表中數據須要得磁盤I/O越少。在一個專用的數據庫服務器上,你能夠設置這個參數達機器物理內存大小的80%。儘管如此,仍是不要把它設置得太大,由於對物理內存的競爭可能在操做系統上致使內存調度。
· innodb_checksums
InnoDB在全部對磁盤的頁面讀取上使用校驗和驗證以確保額外容錯防止硬件損壞或數據文件。儘管如此,在一些少見的狀況下(好比運行標準檢查之時)這個額外的安全特徵是沒必要要的。在這些狀況下,這個選項(默認是容許的)能夠用--skip-innodb-checksums來關閉。
· innodb_data_file_path
到單獨數據文件和它們尺寸的路徑。經過把innodb_data_home_dir鏈接到這裏指定的每一個路徑,到每一個數據文件的完整目錄路徑可被得到。文件大小經過給尺寸值尾加M或G以MB或者GB(1024MB)爲單位被指定。文件尺寸的和至少是10MB。在一些操做系統上,文件必須小於2GB。若是你沒有指定innodb_data_file_path,開始的默認行爲是建立一個單獨的大小10MB名爲ibdata1的自擴展數據文件。在那些支持大文件的操做系統上,你能夠設置文件大小超過4GB。
· innodb_data_home_dir
目錄路徑對全部InnoDB數據文件的共同部分。若是你不設置這個值,默認是MySQL數據目錄。你也能夠指定這個值爲一個空字符串,在這種狀況下,你能夠在innodb_data_file_path中使用絕對文件路徑。
· innodb_doublewrite
默認地,InnoDB存儲全部數據兩次,第一次存儲到doublewrite緩衝,而後存儲到確實的數據文件。這個選項能夠被用來禁止這個功能。相似於innodb_checksums,這個選項默認是容許的;由於標準檢查或在對頂級性能的須要超過對數據完整性或可能故障的關注之時,這個選項用--skip-innodb-doublewrite來關閉。
· innodb_fast_shutdown
若是你把這個參數設置爲0,InnoDB在關閉以前作一個徹底淨化和一個插入緩衝合併。這些操做要花幾分鐘時間,設置在極端狀況下要幾個小時。若是你設置這個參數爲1,InnoDB在關閉之時跳過這些操做。默認值爲1。若是你設置這個值爲2 (在Netware無此值), InnoDB將刷新它的日誌而後冷關機,彷彿MySQL崩潰同樣。已提交的事務不會被丟失,但在下一次啓動之時會作一個崩潰恢復。
· innodb_file_io_threads
InnoDB中文件I/O線程的數量。正常地,這個參數是用默認的,默認值是4,可是大數值對Windows磁盤I/O有益。在Unix上,增長這個數沒有效果,InnoDB老是使用默認值。
· innodb_file_per_table
這個選項導致InnoDB用本身的.ibd文件爲存儲數據和索引建立每個新表,而不是在共享表空間中建立。
· innodb_flush_log_at_trx_commit
當innodb_flush_log_at_trx_commit被 設置爲0,日誌緩衝每秒一次地被寫到日誌文件,而且對日誌文件作到磁盤操做的刷新,可是在一個事務提交不作任何操做。當這個值爲1(默認值)之時,在每一個事務提交時,日誌緩衝被寫到日誌文件,對日誌文件作到磁盤操做的刷新。當設置爲2之時,在每一個提交,日誌緩衝被寫到文件,但不對日誌文件作到磁盤操做的刷新。儘管如此,在對日誌文件的刷新在值爲2的狀況也每秒發生一次。咱們必須注意到,由於進程安排問題,每秒一次的刷新不是100%保證每秒都發生。你能夠經過設置這個值不爲1來得到較好的性能,但隨之你會在一次崩潰中損失二分之一價值的事務。若是你設置這個值爲0,那麼任何mysqld進程的崩潰會刪除崩潰前最後一秒的事務,若是你設置這個值爲2,那麼只有操做系統崩潰或掉電纔會刪除最後一秒的事務。儘管如此,InnoDB的崩潰恢復不受影響,並且由於這樣崩潰恢復開始做用而不考慮這個值。注意,許多操做系統和一些磁盤硬件會欺騙刷新到磁盤操做。儘管刷新沒有進行,你能夠告訴mysqld刷新已經進行。即便設置這個值爲1,事務的持久程度不被保證,且在最壞狀況下掉電甚至會破壞InnoDB數據庫。在SCSI磁盤控制器中,或在磁盤自身中,使用有後備電池的磁盤緩存會加速文件刷新而且使得操做更安全。你也能夠試着使用Unix命令hdparm來在硬件緩存中禁止磁盤寫緩存,或使用其它一些對硬件提供商專用的命令。這個選項的默認值是1。