MySQL InnoDB常見參數詳解
一、文件(數據文件、日志文件)
1、相關參數:
innodb_data_home_dir
innodb_data_file_path=file_name:file_size[:autoextend[:max:max_file_size]]
注:
a、innodb_data_file_path的值應該為一個或多個 數據文件規格的列表。如果命名一個以上的數據文件,用 分號(‘;’)分隔它們
b、autoextend屬性和后面跟著的屬性只可被用來對innodb_data_file_path行里最后一個數據文件。
c、InnoDB不創建目錄,所以在啟動
服務器之前請確認/ibdata目錄的確存在
d、如果沒有指定innodb_data_home_dir,則默認為
mysql數據目錄
e、如果你指定innodb_data_home_dir為一個空字符串,你可以為列在innodb_data_file_path值里的數據文件指定絕對路徑。
[mysqld]
innodb_data_home_dir =
innodb_data_file_path=/ibdata/ibdata1:50M;/ibdata/ibdata2:50M:autoextend
二、參數
1、innodb_autoextend_increment(動態,默認為8M)
當自動擴展表空間被填滿之時,為擴展而增加的尺寸(MB為單位)。
2、innodb_fast_shutdown(動態,默認為1)
0:在關閉之前做一個完全凈化、插入緩沖合并和刷臟頁,最慢,但重啟最快
1:InnoDB在關閉之時跳過purge和insert buffer merge,只刷臟頁
2:刷新日志并強制關閉,類似crash,數據不會丟,但在啟動時會做一次崩潰恢復
mysql在關閉的時候進行的操作:
1、purge all:刪除無用的undo頁
2、merge insert buffer
3、flush dirty page
3、innodb_flush_log_at_trx_commit(動態,默認為1)
0:最快,日志緩沖按默認每秒一次地刷到磁盤,但在事務提交時不做操作,mysql崩潰時會丟失最后一秒的事務
1:最安全,日志緩沖按默認每秒一次地刷到磁盤,并在事務提交時刷新到日志文件,同時調用fsync刷新到磁盤
2:折中,日志緩沖按默認每秒一次地刷到磁盤,并在事務提交時刷新到日志文件,但不調用fsync,只有在系統崩潰時才會丟失最后一秒的事務
4、innodb_force_recovery(靜態,默認為0),用于從損壞的DB轉儲數據
0:表示當需要恢復時執行所有的恢復操作(即校驗數據頁/purge undo/insert buffer merge/rolling back&forward).當不能進行有效的恢復操作時,mysql有可能無法啟動,并記錄下錯誤日志.
1.(SRV_FORCE_IGNORE_CORRUPT): 忽略檢查到的corrupt頁.
2.(SRV_FORCE_NO_BACKGROUND): 阻止主線程的運行,如主線程需要執行full purge操作,會導致crash.
3.(SRV_FORCE_NO_TRX_UNDO): 不執行事務回滾操作.
4.(SRV_FORCE_NO_IBUF_MERGE): 不執行插入緩沖的合并操作.
5.(SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志,InnoDB存儲引擎會將未提交的事務視為已提交.
6.(SRV_FORCE_NO_LOG_REDO): 不執行前滾的操作.
當設置參數值大于0后,可以對表進行select、create、drop操作,但insert、update、delete這類操作是不允許的
5、innodb_lock_wait_timeout
InnoDB事務在回滾之前可以等待一個鎖定的秒數
6、innodb_max_dirty_pages_pct
InnoDB中的主線程試著從緩沖池寫頁面,使得臟頁的百分比不超過這個值。
在show innodb status的log段中,可以查看Last checkpoint at與Log flushed up to的距離判斷當前臟頁的情況
在BUFFER POOL AND MEMORY中,查看Modified db pages與Buffer pool size的比例關系,該值約等于innodb_max_dirty_pages_pct
show innodb status\G;
LOG
---
Log sequence number 16 881655880
Log flushed up to 16 881649862
Last checkpoint at 16 546135914
可以看到檢查點與log sequence number,Log flushed up to都有相當大的差距。
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 19338953832; in additional pool allocated 13600768
Buffer pool size 1048576
Free buffers 17666
Database pages 1009478
Modified db pages 204553
修改的頁占到整個數據庫buffer pool頁將近20%,大小為204553*16k/1024=3.196G
7、innodb_max_purge_lag
8、innodb_mirrored_log_groups(默認為1,沒有鏡像)
為數據庫保持的日志組內同樣拷貝的數量。
9、innodb_open_files
在InnoDB中,這個選項僅與你使用多表空間時有關。它指定InnoDB一次可以保持打開的.ibd文件的最大數目。最小值是10。 默認值300。
對.ibd文件的文件描述符是僅對InnoDB的。它們獨立于那些由--open-files-limit服務器選項指定的描述符,且不影響表緩存的操作。
innodb_thread_concurrency
InnoDB試著在InnoDB內保持操作系統線程的數量少于或等于這個參數給出的限制。如果有性能問題,并
且SHOW INNODB STATUS顯示許多線程在等待信號,可以讓線程“thrashing” ,并且設置這個參數更小或更
大。如果你的計算機有多個處理器和磁盤,你可以試著這個值更大以更好地利用計算機的資源。一個推薦的值
是系統上處理器和磁盤的個數之和。值為500或比500大會禁止 調用并發檢查。默認值是20,并且如果設置大
于或等于20,并發檢查將被禁止。
· innodb_status_file
這個選項讓InnoDB為周期的SHOW INNODB STATUS輸出創建一個文件/innodb_status.