標籤:mysql innodb
什麼是儲存引擎?
比如:一個視頻可以是mp4格式或者avi格式,但是使用者看起來都是差不多的,直觀差別就是佔用系統的空間與清晰程度不一樣。儲存引擎差不多,對於mysql來說,無論採用的是什麼引擎來儲存,使用者看到的資料都市一樣的,不同的引擎存取,引擎功能,佔用的空間大小,讀取效能可能有區別。
mysql最常用的儲存引擎為MyISAM和InnoDB 。
MyISAM:在mysql5.5以前是預設的儲存引擎,在5.5以後修改為innodb,因為InnoDB引擎由於對事務參照完整性,以及高並發等優點。
事務:(不僅是針對mysql,所有的關係性資料庫都有事務特性)
事務就是指邏輯上的一組sql語句操作,組成這組操作的各個sql語句,執行時要麼全成功要麼全失敗。
事務的四大特性(ACID)
原子性(Atomicity):事務時一個不可分割的單位,事務中的所有sql等操作要麼都發生,要麼都不發生
一致性(Consistency):事務發生前和發生後,資料的完整性必須保持一直
隔離性(Isolation):當並發訪問資料庫時,一個正在執行的事務在執行完畢前,對於其他的會話時不可見的,多個並發事務之間的資料是相互隔離的
持久性(Durability):一個事務一旦被提交,它對資料庫中的資料改變是永久性的,如果出了錯誤不允許撤銷,只能通過“補償性事務”
事務的開啟
start transcation 開啟事務
rollback 復原事務,如果執行錯誤就執行復原
commit 提交事務 退出事務
Innodb引擎
最大的特性就是事務。
Innodb共用資料表空間,預設只有一個檔案,在這個檔案中在進行分類,也可以拆開,一個表一個為念
-rw-rw---- 1 mysql mysql 12582912 2月 22 20:37 ibdata1
InnoDB引擎 特點
1.支援事務
2.行級鎖定(更新是一般是鎖定當前行):通過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響
3.讀寫阻塞與事務隔離相關
4.具有非常高效的緩衝特性,能緩衝索引,也能快取資料
5.整個表和主鍵以cluster方式儲存,組成一顆平衡樹
6.所有Secondary Index都會儲存主鍵資訊
*7.支援分區,資料表空間,類似oracle
小結:支援事務,支援行級鎖,支援外鍵,資料表空間,對硬體要求比較高
innodb引擎調優精要
主鍵儘可能小,避免給Secondary index帶來過大的空間負擔
避免全表掃面,因為會使用表鎖
儘可能緩衝所有的索引和資料,提高響應速度,減少磁碟IO
在大批量小插入的時候,盡量自己控制事務而不要使用自動認可,有開關可以控制提交方式
合理設定innodb_flush_log_at_trx_commit的值為0,log buffer美妙就會被刷寫記錄檔到磁碟,提交事務的時候不要做任何操作
避免主鍵更新,因為這會帶來大量的資料移動。
關於innodb在設定檔中的部分參數:關於更多的最佳化參考
innodb_additional_mem_pool_size
用來存放Innodb的內部目錄,這個值不用分配太大,系統可以自動調。通常設定16M夠用了,如果表比較多,可以適當的增大。
設定方法,在my.cnf檔案裡:
innodb_additional_mem_pool_size = 16M
1)記憶體利用方面:
innodb_buffer_pool_size
這個是Innodb最重要的參數,和MyISAM的key_buffer_size有相似之處,但也是有差別的。
這個參數主要緩衝innodb表的索引,資料,插入資料時的緩衝。
mysql的儲存引擎