MySQL的幾個和innodb相關的主要引數設定總結

chenfeng發表於2017-03-14
1).innodb_buffer_pool_size
為了提升效能,可以把要寫的資料先在緩衝區buffer裡合併,然後再傳送給下一級儲存。這樣做可以提高I/O讀寫的效率。
InnoDB Buffer Pool就是InnoDB用來快取它的資料和索引的記憶體緩衝區,可由innodb_buffer_pool_size設定其大小。
理論上將這個值設定的越高,訪問資料需要的磁碟I/O就越少。常見的做法是讓這個值大於熱點資料,這樣可以獲得比較好的效能。建議將其值設定為機器實體記憶體大小的70%-80%之間。


2).innodb_log_file_size
日誌組裡每個日誌檔案的大小,在32位計算機上日誌檔案的合併大小必須小於4GB,預設大小是5MB,在生產環境下,這個值需要調整,官方文件推薦值為1MB到1/N的緩衝池大小,其中N是日誌組裡日誌檔案的數(由innodb_log_files_in_group變數來確定,一般
預設值為2)。值越大,在緩衝池中需要檢查點重新整理的行為就越少,因此也就越節約磁碟I/O,但更大的日誌檔案也意味著在崩潰時恢復的更慢。
建議將日誌檔案的大小設定為256MB或更大,這樣可以滿足一般情況下的需要。


3).innodb_flush_log_at_trx_commit,建議設定為2
這個選項的預設值是1,當設定為2時,在每個事務提交時,日誌緩衝被寫到檔案中,但不對日誌檔案做重新整理到磁碟的操作。對日誌檔案的重新整理每秒才發生一次。所以,理論上作業系統崩潰或掉電只會丟失最後一秒的事務。
以下是設定為0,1,2三個值的詳細解釋:
如果innodb_flush_log_at_trx_commit設定為0,log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁碟)操作同時進行.該模式下,在事務提交的時候,不會主動觸發寫入磁碟的操作。
如果innodb_flush_log_at_trx_commit設定為1,每次事務提交時MySQL都會把log buffer的資料寫入log file,並且flush(刷到磁碟)中去.
如果innodb_flush_log_at_trx_commit設定為2,每次事務提交時MySQL都會把log buffer的資料寫入log file.但是flush(刷到磁碟)操作並不會同時進行。
該模式下,MySQL會每秒執行一次 flush(刷到磁碟)操作。


4).sync_binlog,建議設定為0
sync_binlog=0,當事務提交之後,MySQL不做fsync之類的磁碟同步指令重新整理binlog_cache中的資訊到磁碟,而讓Filesystem自行決定什麼時候來做同步,或者cache滿了之後才同步到磁碟。
sync_binlog=n,當每進行n次事務提交之後,MySQL將進行一次fsync之類的磁碟同步指令來將binlog_cache中的資料強制寫入磁碟。

如果是autocommit模式,那麼每執行一個語句就會向binlog裡寫入一次,否則每個事務寫入一次。如果sync_binlog的值為正,那麼每當sync_binlog引數設定的語句或事務數被寫入binlog後,MySQL伺服器就會將它的二進位制日誌同步到硬碟上。預設值是0,不與硬碟同步。值為1是最安全的選擇,因為崩潰時,
你最多丟失binlog中的一個語句或事務。但是這也是最慢的選擇,成本昂貴。

innodb_flush_log_at_trx_commit和sync_binlog引數的區別:
innodb_flush_log_at_trx_commit 這個是控制的是 innodb 儲存的表的資料寫入方式, 是ib_logfile這個檔案的重新整理方式
sync_binlog 控制的是 binlog 的寫入,是mysql-bin.000的重新整理方式

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

相關文章