MYSQL 存儲引擎概述

1、存儲引擎前端

      Mysql中的數據用各類不一樣的技術存儲在文件(或者內存)中。這些技術中每一種技術都使用了不一樣的存儲機制,索引技巧、鎖定水平而且最終提供普遍的不一樣功能和能力。經過選擇不一樣的技術,你可以得到額外的速度或功能,從而改善你的應用的總體功能。算法

2、分類sql

1.MYISAM存儲引擎:數據庫

不支持事務,也不支持外鍵,優點是訪問速度快,對事務完整性沒有要求或者以SELECT,INSERT爲主的應用基本能夠用這個引擎建立表。緩存

(1)數據存儲形式多線程

MyISAM採用的是索引與數據分離的形式,將數據保存在三個文件中.frm.MYD,.MYIs。併發

.frm存儲表結構異步

.MYD存儲表的數據函數

.MYI存儲表索引高併發

(2)鎖的粒度 

MYISAM只支持表鎖不支持行鎖,因此讀取時對錶加上共享鎖,在寫入是對錶加上排他鎖。因爲是對整張表加鎖,相比INNODB,在併發寫入時效率很低。

(3)數據的存儲的特色

MYISAM是基於非聚簇索引進行存儲的。

(4)表的存儲格式

表的存儲格式分紅三種表 靜態表,動態表,壓縮表。

靜態表:表中的字段都是非變長字段。這樣每一個記錄都是固定長度的,優勢存儲很是迅速,容易緩存,出現故障容易恢復;缺點是佔用的空間一般比動態表多(由於存儲時會按照死的寬大度定義補足空格)ps:在取數據的時候,默認會把字段後面的空格去掉,若是不注意會把數據自己帶的空格也會忽略。

動態表:

   記錄不是固定長度的,這樣存儲的優勢是佔用的空間相對較少;缺點:頻繁的更新、刪除數據容易產生碎片,須要按期執行OPTIMIZE TABLE或者myisamchk-r命令來改善性能。

壓縮表:由於每一個記錄是被單獨壓縮的,因此只有很是小的訪問開支

(5)其餘

MyISAM提供了大量的特性,包括全文索引,壓縮,空間函數,延遲更新索引鍵等。

進行壓縮後的表是不能進行修改的,可是壓縮表能夠極大減小磁盤佔用空間,所以也能夠減小磁盤IO,從而提供查詢性能。

全文索引,是一種基於分詞建立的索引,能夠支持複雜的查詢。

延遲更新索引鍵,不會將更新的索引數據當即寫入到磁盤,而是會寫到內存中的緩衝區中,只有在清除緩衝區時候纔會將對應的索引寫入磁盤,這種方式大大提高了寫入性能。

2.INNODB存儲引擎

   INNODB存儲是MYSQL默認事務引擎,也是目前重要、使用最普遍的存儲引擎。 

概述:

   支持事務,行鎖設計,支持MVCC(多版本併發控制)來支持高併發,支持外鍵,提供一致性非鎖定讀設計。

優勢:

   DML操做遵循ACID模型(原子性、一致性、隔離性和持久性),支持事務,支持CRASH-RECOVERY特性(當MYSQL發生故障重啓後,對於INNODB表,沒有完成的事務將經過REDO日誌從新進行,已經提交可是沒有寫到數據文件中的數據,將從doublewrite buffer中從新構建)以保護數據。

二、InnoDB buffer pool 緩存被訪問的表和索引信息,常用的數據直接從內存中讀取。

三、inserts,update,deletes操做被一種稱爲change buffering的機制所優化。InnoDB不只容許多併發讀寫同一張表,它還會緩存發生改變的數據,優化磁盤I/O。

四、當數據庫運行大表的長時間查詢且反覆訪問相同表的相同行時,一種叫作Adaptive Hash Index的特性使這些查詢更快,就像數據從哈希表中查詢出來同樣。

五、能夠壓縮表和相關的索引。

六、能夠對性能和可用性形成很小影響地建立和刪除索引。

七、能夠很快TRUNCATE掉一個file_per_table表空間,釋放出磁盤空間供操做系統使用,而沒必要釋放出僅能供InnoDB所重用的系統表空間。

八、支持行級鎖和一致性讀,提升多用戶的併發性和性能。

九、支持主鍵,提升查詢性能。

十、爲了保持數據的完整性,InnoDB也支持外鍵。

十一、你能夠將InnoDB表與MySQL其餘存儲引擎的表自由組合在一塊兒使用。例如,在一個SQL中,你能夠關聯一張InnoDB表和一個內存表。

十二、在處理大量數據的時候,InnoDB引擎能夠有效的發揮CPU效率和提高性能。.

 

 INNODB體系結構

 

 

 

 

  • 後臺線程(多線程模型)
    • Master Thread
      負責將緩衝池中的數據異步刷新到磁盤,保證數據的一致性,包括髒頁的刷新、合併插入緩存、UNDO頁的回收。
    • IO Thread
      使用AIO處理寫請求,IO Thread負責IO請求的回調處理
    • Purge Thread
      事務提交後,回收已經使用而且分配的undo頁。
  • 內存
    • 緩衝池
      InnoDB是基於磁盤存儲的,並將其中的記錄按照頁的方式進行管理,使用緩衝池技術來提升數據庫的總體性能。(讀取頁的時候,將頁放到緩衝池中(FIX操做),下次讀緩衝池中的便可;修改頁時,先修改緩衝池中的頁,再以必定的頻率刷新到磁盤(CheckPoint機制))
      • 緩衝池管理
        數據庫中的緩衝池經過LRU算法進行管理(LRU List),使用最頻繁的頁在LRU List的前端,當緩衝池中不能存放新讀取到的頁時,首先釋放LRU列表尾端的頁。
    • 重作日誌緩衝
      InnoDB將重作日誌信息放入該緩衝區,而後按照必定的頻率將其刷新到重作日誌文件。
    • CheckPoint機制
      • 縮短數據庫恢復時間:
        數據庫宕機時,數據庫不須要重作全部的日誌由於CheckPoint以前的頁都已經刷新回磁盤。
      • 緩衝池不夠用時,將髒頁刷新到磁盤(Fuzzy CheckPoint 部分刷新)
        當緩衝池不夠用時,根據LRU算法,釋放list尾端的頁,若該頁爲髒頁,則強制執行CheckPoint,刷新回磁盤。
      • 重作日誌不可用時,刷新髒頁
        由於重作日誌不是無限增大的,當到達必定數量時,由第一條所述,數據庫恢復不須要這部分重作日誌,這部分就能夠被覆蓋重用,若此時重作日誌還有用,那麼強制產生CheckPoint,將緩衝池中的頁至少刷新到當前重作日誌的位置。
        總結一下:緩衝池不夠用時,將最少使用的髒頁刷新回磁盤,釋放該頁;當重作日誌不夠用時,將緩衝池刷新到當前重作日誌的位置,放棄一部分重作日誌,用於新的重作日誌;數據庫關閉時,發生Sharp CheckPoint,所有刷新
  • InnoDB 關鍵特性
    • 插入緩衝
    • 兩次寫
    • 自適應哈希索引
    • 異步IO
    • 刷新鄰接頁
3、其餘存儲引擎

MYSQL還有其餘存儲引擎,包括 MEMORY存儲引擎,MERGE存儲引擎,ARCHIVE,BDB,Federated,TOKUDB
相關文章
相關標籤/搜索