mysql innodb相關引數說明

datapeng發表於2014-11-12
--innodb or --skip-innodb
啟動/禁用innodb引擎的支援,預設情況下引擎是啟動的。而innodb一般作為預設儲存引擎支援,這兩個選項都是不必要的。


--innodb_buffer_pool_size=32G
這個值是儲存表資料和索引的記憶體緩衝區buffer_pool的大小,在一個OLTP系統中,這個值往往高達60%-80%的記憶體或者1.1 * 熱資料的大小。一味加大buffer_pool_size不一定起到最佳化的效果,可以參考:http://blog.csdn.net/yang1982_0907/article/details/20123055


--innodb_additional_mem_pool_size=60M
設定innodb中使用者儲存資料字典或者其他記憶體結構的記憶體pool容量,預設為1MB。如果這個pool記憶體不足的時候,innodb會向MySQL error log中寫入警告資訊。


--innodb_max_dirty_pages_pct=90
進行flush前最大允許buffer pool中髒頁的百分比,預設為90。這個值太小會導致頻繁的checkpoint操作,降低效能。


--Innodb_fast_shutdown={0|1|2}
設定innodb在它關閉的時候該做什麼工作。預設為1有三個值可以選擇:
0表示在innodb關閉的時候,需要purge all, merge insert buffer,flush dirty pages。這是最慢的一種關閉方式,但是restart的時候也是最快的。後面將介紹purge all,merge insert buffer,flush dirty pages這三者的含義。
1表示在innodb關閉的時候,它不需要purge all,merge insert buffer,只需要flush dirty page。
2表示在innodb關閉的時候,它不需要purge all,merge insert buffer,也不進行flush dirty page,只將log buffer裡面的日誌flush到log files。因此等下進行恢復的時候它是最耗時的。


--innodb_force_recovery={1|2|3|4|5|6}
這個選項讓innodb進入崩潰還原模式。關於引數的詳細解釋請參見:innodb_force_recovery對mysql 當機恢復影響 


--innodb_io_capacity=800
innodb每秒後臺程式處理IO操作的資料頁上限,即innodb_buffer_pool_size總的io處理能力上限,需要測試後給一個合適的大小。如果是SSD磁碟,這個值可以設定幾千甚至上萬。


--innodb_buffer_pool_instances
分割成多個記憶體塊時,每個記憶體塊的IO處理能力為:innodb_io_capacity/innodb_buffer_pool_instances


--innodb_buffer_pool_instances=4
將innodb_buffer_pool hash為不同的instance,每個instance獨立的LRU、FLUSH、FREE和獨立的mutex控制,提高並行讀寫的能力。 


--innodb_flush_method={ fdatasync | O_DIRECT | O_DSYNC }
這個選項設定InnoDB同步資料和重新整理日誌的方法。預設為fdatasync,innoDB會使用作業系統的fsync()呼叫來同步資料和日誌檔案。O_DIRECT會使用O_DIRECT引數的fsync來同步資料和日誌檔案,一般要使用這個引數,來避免雙快取。


--innodb_log_buffer_size=8M
設定innodb日誌緩衝區大小,innodb會向緩衝區寫入日誌。預設為1M


--innodb_log_file_size=256M
和Oracle中的redo定義類似,位於日誌中每一個日誌檔案的大小,預設為5M。該選項的值越小,日誌切換的越頻繁,從而導致日誌同步等I/O效能問題就越嚴重,但檔案恢復時間越短。一般綜合考慮可以設定為512M。


--innodb_log_in_group=4
這個選項確定了日誌日誌檔案的數量,預設值為2。


--innodb_log_group_home_dir= 
InnoDB日誌檔案的路徑。 如果沒有明確指定將預設在 MySQL 的 datadir 目錄下建立 ib_logfile… 檔案。
InnoDB 日誌檔案的路徑。必須與 innodb_log_arch_dir 設定相同值。 如果沒有明確指定將預設在 MySQL 的 datadir 目錄下建立兩個 5 MB 大小的 ib_logfile… 檔案。


--innodb_flush_log_at_trx_commit={0|1|2}
設定當事務提交操作時日誌重新整理行為。三個選項分別為:
0:每秒將log buffer的內容寫事務日誌並且重新整理到磁碟;
1:每個事務提交後,將log_buffer的內容寫事務日誌並資料磁碟;
2:每個事務提交,將log_buffer內容寫事務日誌,但不進行資料刷盤
為了保證高安全性,可以設定重新整理binlog的雙1模式,即:innodb_flush_log_at_trx_commit= 1,sync_binlog = 1,這樣主備的資料是一致的,不會丟失資料。


--innodb_mirrored_log_groups=value
設定innodb維護的映象日誌組的數量,預設為1。一般情況下不必修改這個值。


--innodb_max_purge_lag=value
對undo的pages進行purge類操作的延時,預設值為0,表示沒有延時。


--innodb-safe-binlog
這個選項保證了InnoDB表內容和二進位制日誌的一致性。


--innodb_data_home_dir=/var/data/mysql
指定innodb的資料檔案的路徑,預設使用datadir


--innodb_data_file_path=ibdata1:1024M;ibdata2:512M:autoextend
指定innodb表空間資料檔案的大小,可以指定多個資料檔案(路徑或檔名),並指定大小和autoextend選項(預設為10MB+autoextend)。


--innodb_autoextend_increment=value
設定innodb表空間檔案自動擴充套件的幅度,預設為8(8MB)


--innodb_open_files=300
設定innodb一次可以開啟.idb檔案的最大數量,最小值為10,預設為300。在存在多個表空間檔案時應該加大這個值。


--innodb_status_file
這個選項令innodb為SHOW ENGINE INNODB STATUS語句的結果維持一個狀態檔案。它偶爾會把結果寫入檔案中,該檔案位於資料檔案目錄下,命名為innodb_status.pid。


--innodb_file_per_table
如果啟動了這個引數,則innodb對每個表都會使用一個.idb資料檔案來取代使用預設的表空間檔案儲存資料。預設情況下這個選項是禁用的。


--innodb_checksums or --skip-innodb-checksums
預設情況下,MySQL啟用了這個選項,並在從檔案系統中讀取page時使用校驗和來進行驗證。這提供了可靠的安全性,一般情況沒有必要關閉


--innodb_doublewrite or --skip-innodb-doublewrite
 
開啟/關閉doublewrite功能,預設為開啟。這使得InnoDB將它接收到的資料寫入兩次,第一次寫入資料緩衝區(在共享表空間資料檔案中),第二次才會把資料寫入資料檔案上並校驗資料的完整性。目的是為了保證出現部分寫失效(partial page write)–即資料頁寫到一半時就出現故障–時的資料安全性。
相關參考:MySQL效能日誌(1): InnoDB Double Write


執行緒和並行


--innodb_thread_concurrency=0
設定併發使用InnoDB的最大執行緒最大數量,超過這個執行緒數訪問時,執行緒將處於等待狀態(不是拒絕使用者的連線)。該值取值範圍為0-1000,0表示沒有任何限制。


--innodb_commit_concurrency=0
設定併發提交事務的最大執行緒數量,其值為0將以移除對併發提交的限制。


--innodb_file_io_threads=12
--innodb_read_io_threads=8
--innodb_write_io_threads=4
設定I/O執行緒允許的檔案數量,在現在的MySQL發行版裡,不再使用innodb_file_io_threads來設定而是直接設定讀和寫的I/O執行緒數量。可以視系統開銷加大這個值。


--innodb_sync_spin_loops=value
設定當InnoDB中執行緒被掛起之前,等待執行緒資源的次數。一旦超過了這個次數,執行緒將被掛起。


--innodb_thread_sleep_depaly=10000
在進入InnoDB佇列之前,使用這個選項可以設定執行緒休眠時間。單位為微秒,預設為10000。設定為0表示禁用休眠。
表和鎖定


--innodb_lock_wait_timeout=value
設定InnoDB事務等待一個表鎖定的時候最大等待時間,單位是秒,預設為50.


--innodb_table_locks[={0|1}]
當啟用這個選項,當執行lock table語句並把autocommit設定為0時,將導致innodb給內部加一個表級鎖。


--innodb_autoinc_lock_mode={0|1|2}
當儲存引擎自動產生擴充套件值時,這個選項用於設定用到的鎖定模式。可能的值為0(傳統模式)、1(連續模式)和2(交叉存取模式)。越高的值表示速度越快,但是安全性越低。


--innodb_locks_unsafe_for_binlog
為了完成類似於行級鎖定,innodb鎖定了行上的索引。一般來說,這會阻止其他使用者寫入相鄰行間隔(gap)中。正因為這樣的鎖演算法,innodb在可重複讀這樣的預設隔離級別上,可以避免幻象的產生。innodb_locks_unsafe_for_binlog最主要的作用就是控制innodb是否對gap加鎖。注意該引數如果是enable的,則是unsafe的,此時gap不會加鎖;反之,如果disable掉該引數,則gap會加鎖。當然對於一些和資料完整性相關的定義,如外來鍵和唯一索引(含主鍵)需要對gap進行加鎖,那麼innodb_locks_unsafe_for_binlog的設定並不會影響gap是否加鎖。


--innodb_support_xa
這個選項令innodb在XA事務中支援二階段事務(可以對比MongoDB的二階段提交:MongoDB – Two-phase Commit),這個引數確保事務日誌寫入bin-log 的順序與是事務的time-line 是一致的。它被設定為預設值1啟用這個選項。可以設定為0來提高innodb的效能。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-1330148/,如需轉載,請註明出處,否則將追究法律責任。

相關文章