innodb存儲引擎優化
目前來講:InnoDB是爲Mysql處理巨大數據量時的最大性能設計。它的CPU效率多是任何其它基於磁盤的關係數據庫引擎所不能匹敵的。在數據量大 的網站或是應用中Innodb是倍受青睞的。另外一方面,在數據庫的複製操做中Innodb也是能保證master和slave數據一致有必定的做用。
設置內容:
1. 內存利用方面
參數:innodb_buffer_pool_size
默認分配只有8M。若是是一個專用DB服務器,那麼他能夠佔到內存的70%-80%。這個參數不能動態更改,因此分配需 多考慮。分配過大,會使Swap佔用過多,導致Mysql的查詢特慢。若是你的數據比較小,那麼可分配是你的數據大小+10%左右作爲這個參數的值。show innodb status,執行此命令,去確認大小。
例如:數據大小爲50M,那麼給這個值分配innodb_buffer_pool_size=64M
參數: innodb_additional_mem_pool
系統能夠自動調,不用設置過高。
2. 日值控制方面
參數:innodb_log_file_size
這個值分配的大小和數據庫的寫入速度,事務大小,異常重啓後的恢復有很大的關係。設置方法:innodb_log_file_size=256M
參數:innodb_log_files_in_group
指定你有幾個日值組。
分配原則: 通常咱們能夠用2-3個日值組。默認爲兩個。
設置方法:innodb_log_files_in_group=3
mysql
參數:innodb_log_buffer_size:
sql
做用:事務在內存中的緩衝。分配原則:控制在2-8M.這個值不用太多的。他裏面的內存通常一秒鐘寫到磁盤一次。具體寫入方式和你的事務提交方式有關。
參考:Innodb_os_log_written(show global status 能夠拿到)若是這個值增加過快,能夠適當的增長innodb_log_buffer_size另外若是你須要處理大理的TEXT,或是BLOB字段,能夠考慮增長這個參數的值。數據庫
設置方法:innodb_log_buffer_size=3M緩存
參數:innodb_flush_logs_at_trx_commit
做用:控制事務的提交方式分配原則:這個參 數只有3個值,0,1,2請確認一下自已能接受的級別。默認爲1,主庫請不要更改了。性能更高的能夠設置爲0或是2,但會丟失一秒鐘的事務。說明:這個參 數的設置對Innodb的性能有很大的影響,因此在這裏給多說明一下。當這個值爲1時:innodb 的事務LOG在每次提交後寫入日值文件,並對日值作刷新到磁盤。這個能夠作到不丟任何一個事務。當這個值爲2時:在每一個提交,日誌緩衝被寫到文件,但不對 日誌文件作到磁盤操做的刷新,在對日誌文件的刷新在值爲2的狀況也每秒發生一次。但須要注意的是,因爲進程調用方面的問題,並不能保證每秒100%的發 生。從而在性能上是最快的。但操做系統崩潰或掉電纔會刪除最後一秒的事務。當這個值爲0時:日誌緩衝每秒一次地被寫到日誌文件,而且對日誌文件作到磁盤操 做的刷新,可是在一個事務提交不作任何操做。mysqld進程的崩潰會刪除崩潰前最後一秒的事務。
從以上分析,當這個值不爲1時,能夠取得較好的性能,但遇到異常會有損失,因此須要根據自已的狀況去衡量。
設置方法:innodb_flush_logs_at_trx_commit=1服務器
3.文件IO分配,空間佔用方面
參數:innodb_file_per_table
做用:使每一個Innodb的表,有自已獨立的表空間。如刪除文件後能夠回收那部分空間。分配原則:只有使用不使用。但DB還須要有一個公共的表空間。設置方法:innodb_file_per_table=1
innodb_file_io_threads做用:文件讀寫IO數,這個參數只在Windows上起做用。在LINUX上只會等於4設置方法:innodb_file_io_threads=4
innodb_open_files做用:限制Innodb能打開的表的數據。分配原則:若是庫裏的表特別多的狀況,請增長這個。這個值默認是300。設置方法:innodb_open_files=800 請適當的增長table_cache
4. 其它相關參數
參數:innodb_flush_method
做用:Innodb和系統打交道的一個IO模型分配原則,Unix能夠設置:fsync() or O_SYNC/O_DSYNC若是系統能夠禁止系統的Cache那就把他禁了。Linux能夠選擇:O_DIRECT 直接寫入磁盤,禁止系統Cache了
設置方法:innodb_flush_method=O_DIRECT
參數:innodb_max_dirty_pages_pct
控制Innodb的髒頁在緩衝中在那個百分比之下,值在範圍1-100,默認爲90.這個參數的另外一個用處:當Innodb的內存分配過大,導致 Swap佔用嚴重時,能夠適當的減少調整這個值,使達到Swap空間釋放出來。建義:這個值最大在90%,最小在15%。太大,緩存中每次更新須要致換數據頁太多,過小,放的數據頁過小,更新操做太慢。設置方 法:innodb_max_dirty_pages_pct=90動態更改須要有Super權限:set global innodb_max_dirty_pages_pct=50; ide