MySQL InnoDB常見引數詳解

chenfeng發表於2016-10-19
一、檔案(資料檔案、日誌檔案)
     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.

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

相關文章