InnoDB給MySQL提供了具有提交,回滾和崩潰恢復能力的事務安全(ACID兼容)存儲引擎。InnoDB鎖定在行級並且也在SELECT語句 提供一個Oracle風格一致的非鎖定讀。這些特色增加了多用戶部署和性能。沒有在InnoDB中擴大鎖定的需要,因為在InnoDB中行級鎖定適合非常 小的空間。InnoDB也支持FOREIGN KEY強制。在SQL查詢中,你可以自由地將InnoDB類型的表與其它MySQL的表的類型混合起來,甚至在同一個查詢中也可以混合。
Innodb 的創始人:Heikki Tuuri
Heikki Tuuri在Innodb的Bug社區裡也是很活躍的,如果遇到Bug也可以直接提到社區,得到作者的解答。
為什麼要學習Innodb的調優:
目前來說:InnoDB是為Mysql處理巨大數據量時的最大性能設計。它的CPU效率可能是任何其它基於磁盤的關系數據庫引擎所不能匹敵的。在數據量大的網站或是應用中Innodb是倍受青睐的。
另一方面,在數據庫的復制操作中Innodb也是能保證master和slave數據一致有一定的作用。
參數調優內容:
1. 內存利用方面
2. 日志控制方面
3.文件IO分配,空間占用方面
4. 其它相關參數
1.內存利用方面:
首先介紹一個Innodb最重要的參數:
innodb_buffer_pool_size
這個參數和MyISAM的key_buffer_size有相似之處,但也是有差別的。這個參數主要緩存innodb表的索引,數據,插入數據時的緩沖。為Innodb加速優化首要參數。
該參數分配內存的原則:這個參數默認分配只有8M,可以說是非常小的一個值。如果是一個專用DB服務器,那麼他可以占到內存的70%-80%。這個參 數不能動態更改,所以分配需多考慮。分配過大,會使Swap占用過多,致使Mysql的查詢特慢。如果你的數據比較小,那麼可分配是你的數據大小+10% 左右做為這個參數的值。例如:數據大小為50M,那麼給這個值分配innodb_buffer_pool_size=64M
設置方法:
innodb_buffer_pool_size=4G
這個參數分配值的使用情況可以根據show innodb statusG;中的
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 4668764894;
去確認使用情況。
第二個:
innodb_additional_mem_pool:
作用:用來存放Innodb的內部目錄
這個值不用分配太大,系統可以自動調。不用設置太高。通常比較大數據設置16M夠用了,如果表比較多,可以適當的增大。如果這個值自動增加,會在error log有中顯示的。
分配原則:
用show innodb statusG;去查看運行中的DB是什麼狀態(參考BUFFER POOL AND MEMORY段中),然後可以調整到適當的值。
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 4668764894; in additional pool allocated 16777216
參考:in additional pool allocated 16777216
根據你的參數情況,可以適當的調整。
設置方法:
innodb_additional_mem_pool=16M