1. 程式人生 > >MyISAM引擎和InnoDB引擎介紹及應用場景

MyISAM引擎和InnoDB引擎介紹及應用場景

# 如果你的MySQL服務包含InnoDB支援但是並不打算使用的話,  

# 使用此選項會節省記憶體以及磁碟空間,並且加速某些部分  

#skip-innodb  

=======================================================================================================================================================

# 附加的記憶體池被InnoDB用來儲存 metadata 資訊  

# 如果InnoDB為此目的需要更多的記憶體,它會開始從OS這裡申請記憶體.  

# 由於這個操作在大多數現代作業系統上已經足夠快, 你一般不需要修改此值.  

# SHOW INNODB STATUS 命令會顯示當先使用的數量.  

innodb_additional_mem_pool_size = 64M  

=======================================================================================================================================================

# InnoDB使用一個緩衝池來儲存索引和原始資料, 不像 MyISAM.  

# 這裡你設定越大,你在存取表裡面數據時所需要的磁碟I/O越少.  

# 在一個獨立使用的資料庫伺服器上,你可以設定這個變數到伺服器實體記憶體大小的80%  

# 不要設定過大,否則,由於實體記憶體的競爭可能導致作業系統的換頁顛簸.  

# 注意在32位系統上你每個程序可能被限制在 2-3.5G 使用者層面記憶體限制,  

# 所以不要設定的太高.  

innodb_buffer_pool_size = 6G  

=======================================================================================================================================================

# InnoDB 將資料儲存在一個或者多個數據檔案中成為表空間.  

# 如果你只有單個邏輯驅動儲存你的資料,一個單個的自增檔案就足夠好了.  

# 其他情況下.每個裝置一個檔案一般都是個好的選擇.  

# 你也可以配置InnoDB來使用裸盤分割槽 – 請參考手冊來獲取更多相關內容  

innodb_data_file_path = ibdata1:10M:autoextend  

=======================================================================================================================================================

# 設定此選項如果你希望InnoDB表空間檔案被儲存在其他分割槽.  

# 預設儲存在MySQL的datadir中.  

#innodb_data_home_dir =  

=======================================================================================================================================================

# 用來同步IO操作的IO執行緒的數量. This value is  

# 此值在Unix下被硬編碼為4,但是在Windows磁碟I/O可能在一個大數值下表現的更好.  

innodb_file_io_threads = 4  

=======================================================================================================================================================

# 如果你發現InnoDB表空間損壞, 設定此值為一個非零值可能幫助你匯出你的表.  

# 從1開始並且增加此值知道你能夠成功的匯出表.  

#innodb_force_recovery=1  

=======================================================================================================================================================

# 在InnoDb核心內的允許執行緒數量.  

# 最優值依賴於應用程式,硬體以及作業系統的排程方式.  

# 過高的值可能導致執行緒的互斥顛簸.  

innodb_thread_concurrency = 16  

=======================================================================================================================================================

# 如果設定為1 ,InnoDB會在每次提交後重新整理(fsync)事務日誌到磁碟上,  

# 這提供了完整的ACID行為.  

# 如果你願意對事務安全折衷, 並且你正在執行一個小的食物, 你可以設定此值到0或者2來減少由事務日誌引起的磁碟I/O  

# 0代表日誌只大約每秒寫入日誌檔案並且日誌檔案重新整理到磁碟.  

# 2代表日誌寫入日誌檔案在每次提交後,但是日誌檔案只有大約每秒才會重新整理到磁碟上.  

innodb_flush_log_at_trx_commit = 2  

(說明:如果是遊戲伺服器,建議此值設定為2;如果是對資料安全要求極高的應用,建議設定為1;

設定為0效能最高,但如果發生故障,資料可能會有丟失的危險!

預設值1的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬碟,這是很費時的。

特別是使用電池供電快取(Battery backed up cache)時。

設成2對於很多運用,特別是從MyISAM錶轉過來的是可以的,它的意思是不寫入硬碟而是寫入系統快取。

日誌仍然會每秒flush到硬碟,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的資料。

而值2只會在整個作業系統掛了時才可能丟資料。)  

===============================================================================================================================

# 加速InnoDB的關閉. 這會阻止InnoDB在關閉時做全清除以及插入緩衝合併.  

# 這可能極大增加關機時間, 但是取而代之的是InnoDB可能在下次啟動時做這些操作.  

#innodb_fast_shutdown  

===============================================================================================================================

# 用來緩衝日誌資料的緩衝區的大小.  

# 當此值快滿時, InnoDB將必須重新整理資料到磁碟上.  

# 由於基本上每秒都會重新整理一次,所以沒有必要將此值設定的太大(甚至對於長事務而言)  

innodb_log_buffer_size = 16M  

================================================================================================================================

# 在日誌組中每個日誌檔案的大小.  

# 你應該設定日誌檔案總合大小到你緩衝池大小的25%~100%  

# 來避免在日誌檔案覆寫上不必要的緩衝池重新整理行為.  

# 不論如何, 請注意一個大的日誌檔案大小會增加恢復程序所需要的時間.  

innodb_log_file_size = 512M  

================================================================================================================================

# 在日誌組中的檔案總數.  

# 通常來說2~3是比較好的.  

innodb_log_files_in_group = 3  

================================================================================================================================

# InnoDB的日誌檔案所在位置. 預設是MySQL的datadir.  

# 你可以將其指定到一個獨立的硬碟上或者一個RAID1捲上來提高其效能  

#innodb_log_group_home_dir  

================================================================================================================================

# 在InnoDB緩衝池中最大允許的髒頁面的比例.  

# 如果達到限額, InnoDB會開始重新整理他們防止他們妨礙到乾淨資料頁面.  

# 這是一個軟限制,不被保證絕對執行.  

innodb_max_dirty_pages_pct = 90  

================================================================================================================================

# InnoDB用來重新整理日誌的方法.  

# 表空間總是使用雙重寫入重新整理方法  

# 預設值是 “fdatasync”, 另一個是 “O_DSYNC”.  

#innodb_flush_method=O_DSYNC  

================================================================================================================================

# 在被回滾前,一個InnoDB的事務應該等待一個鎖被批准多久.  

# InnoDB在其擁有的鎖表中自動檢測事務死鎖並且回滾事務.  

# 如果你使用 LOCK TABLES 指令, 或者在同樣事務中使用除了InnoDB以外的其他事務安全的儲存引擎  

# 那麼一個死鎖可能發生而InnoDB無法注意到.  

# 這種情況下這個timeout值對於解決這種問題就非常有幫助.  

innodb_lock_wait_timeout = 120