20160924-1——mysql儲存引擎

來源:互聯網
上載者:User

標籤:

一、主要儲存引擎


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儲存引擎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.