mysql innodb相關引數說明
--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的效能。
啟動/禁用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql relay log相關引數說明MySql
- 桌上型電腦電源相關引數說明
- MySQL效能相關引數MySql
- Mysql my.cnf部分引數說明MySql
- MySQL 連線相關引數MySql
- MySQL Galera cluster叢集常用引數說明MySql
- mysqldump引數說明MySql
- TOP引數說明
- 說說MySQL索引相關MySql索引
- 關於xtrabackup --slave-info引數的說明
- keycloak~token配置相關說明
- Oracle Table建立引數說明Oracle
- GoldenGate HANDLECOLLISIONS引數使用說明Go
- linux常用核心引數說明Linux
- pga相關引數
- MySQL:Innodb Handler_read_*引數解釋MySql
- 關於 navigator.mediaDevices.getUserMedia 的輸入引數說明dev
- mydumper和myloader引數使用說明
- Nginx的gzip配置引數說明Nginx
- DBA_HIST相關檢視說明
- JS object.innerHTML的相關說明JSObjectHTML
- MySQL索引統計資訊更新相關的引數MySql索引
- MySQL中Redo Log相關的重要引數總結MySql
- MySQL:Innodb:innodb_flush_log_at_trx_commit引數影響的位置MySqlMIT
- MySQL資料庫innodb_fast_shutdown引數MySql資料庫AST
- PostgreSQL AutoVacuum 相關引數SQL
- /etc/sysctl.conf部分引數說明
- Azure Blob (三)引數設定說明
- 所有初始化引數說明(轉)
- pytest(10)-常用執行引數說明
- KITTI資料集說明(檔案內容,標籤, calib 相機引數)
- MySQL change buffer介紹和相關引數調整建議MySql
- Dubbo23_Dubbo相關配置說明6
- mysql死鎖deadlock相關幾個系統變數innodb_lock_wait_timeoutMySql變數AI
- MySQL 5.6 innodb_io_capacity引數效能測試MySql
- Spark的相關引數配置Spark
- 關於MySQL中的8個 character_set 變數說明MySql變數
- MySQL:關於ICP特性的說明(未完)MySql
- JQuery Datatables Columns API 引數詳細說明jQueryAPI