標籤:
一、主要儲存引擎
5.5以後的版本,預設儲存引擎從myisam改成了innodb;線上推薦都用innodb
二、innodb儲存引擎(一)結構
INNODB儲存引擎大致分三部分,圖中已經(1)(2)(3)標出。至於MYSQL Server層暫不管它,就是SQL介面、解析器、最佳化器、緩衝池的那層組件。
中:
(1)是緩衝層,由一個大的innodb buffer pool和很多個其他小的記憶體組件組成,用來緩衝資料的,innodb的資料讀取寫入不是直接操作檔案,而是從檔案載入到緩衝,在緩衝裡做操作,再flush到磁碟檔案‘;
(2)是各種後台線程,例如IO線程、日誌線程、監控線程等;
(3)是各種資料檔案層,例如innodb的資料檔案、redo log等;
(二)innodb的特點
1、innodb支援事務,事務ACID特性完整支援:
(1)原子性(A):通過復原段失敗復原來保證原子性,也就是unlog log日誌復原保證原子性;
(2)一致性(C):通過支援主外鍵來保證一致性;
(3)隔離性(I):通過事務版本+復原段=MVCC(多版本並發),也即是通過MVCC(多版本並發)機制來保證隔離性;
(4)持久性(D):通過交易記錄(redo log)來保證持久性;
(三)交易隔離等級
1、支援四種不同的交易隔離等級,預設的交易隔離等級是REPEATABLE-READ(可重複讀):
(四)INNODB儲存引擎的鎖
1、支援行級鎖,寫不阻塞讀;不同行間的寫相互不阻塞;並發效能好
2、行鎖是加在索引上的(或者說行級鎖是在索引上實現的),如果更新欄位上沒有索引則行鎖會轉換為表級鎖。
(五)INNODDB資料區塊緩衝池
1、資料的讀寫需要經過緩衝(資料的讀寫不是直接讀寫磁碟檔案,而是先將檔案資料載入到記憶體,再進行讀寫(更新後產生髒頁),再根據配置的策略定期將髒頁重新整理到磁碟)
2、innodb的資料是以整頁(page,16K)為單位,讀取到緩衝中;
3、緩衝中的資料以LRU策略換出;
4、IO效率高
(六)INNODB資料檔案儲存結構
1、innodb儲存類型的表,是索引組織表(聚簇表),它的整個表資料就是一個索引表。表資料是根據主鍵排序,如果沒有索引則檢查唯一索引鍵,用唯一鍵做索引;如果沒有主鍵也沒有唯一索引鍵,則會自動內部分配一個rowID來做索引。
2、innodb結構的表是索引結構的,資料節點每頁是16K。
3、innodb結構的表是索引組織表(聚簇表),根據主鍵定址速度很快。
主索引值遞增的insert插入效率較好,主鍵隨機insert插入操作效率差。因此,innodb表必須制定主鍵,建議使用自增數字。
(七)INNODB資料持久化與交易記錄
1、交易記錄(redo log)即時持久化,
2、記憶體變化資料(髒資料)增量非同步刷出到磁碟檔案;
3、執行個體故障靠重放日誌恢複;
4、效能好,可靠,恢複快
二、MYISAM儲存引擎(一)特點
1、前身叫ISAM儲存引擎;
2、MYISAM儲存引擎的資料群組織形式是一種堆表,和索引組織表相區別(innodb的資料群組織形式是索引組織表)。
例如插入一條資料id=2(id為主鍵,表裡已經存在id=1和id=3資料),
(1)myisam儲存引擎:如果插入id=2,資料的插入位置和id=1 id=3無關係,也就是無序的;
堆表的插入特性是無序的,其他的資料庫例如oracle PostgreSQL都是以堆表形式插入資料的;
(2)INNODB儲存引擎:如果插入id=2,會插入到id=1和id=3之間,因為innodb是索引組織表是有有序的;
索引組織表的最大特點是根據主鍵去查詢效率非常快。
3、MYISAM儲存引擎不支援事務;
4、myisam儲存引擎的緩衝()不快取資料,只緩衝索引。資料緩衝是交給作業系統的記憶體來緩衝的。
這種會有問題:如果查詢一個大表,會消耗大量作業系統記憶體,如果表中片段很大可能會浪費大量作業系統記憶體。
5、鎖粒度較大:使用的是讀寫鎖(讀的時候不允許寫,寫的時候不允許讀,只有讀的時候允許讀)
6、資料檔案可以直接 拷貝,偶爾可能會用上。但是線上現在不建議使用該引擎了
因為:
a、不支援事務;
b、鎖粒度太大並發效能差;
c、只緩衝索引不快取資料,對系統記憶體影響較大有風險;
d、8.0取消了MYISAM引擎;
三、MEMORY儲存引擎
1、資料全記憶體存放,無法持久化;
2、效能較高;
3、不支援事務;
4、適合偶爾作為暫存資料表使用;
create tmpporary table tmp(…)
四、BLACLHOLD儲存引擎
1、資料不作任何儲存;
2、利用mysql replicate,充當Log Service器,在mysql replicate環境裡充當代理主。
一般用BLACKHOLD作為Log Service器,記錄資料庫的所有變更。向其他從伺服器分發日誌。
五、TOKUDB儲存引擎
1、分形樹儲存結構;
2、支援事務;
3、行鎖;
4、壓縮效率較高;
5、適合大批量insert的情境(輸送量/io效率高)
6、備份比較麻煩,只有企業版有線上備份工具,社區版沒有線上備份工具;
六、MYSQL CLUSTER
1、多主分布式叢集;
2、資料節點間冗餘,高可用;
3、支援事務;
4、設計上易於擴充;
5、面向未來,線上慎用;
來自為知筆記(Wiz)
20160924-1——mysql儲存引擎