1. 程式人生 > >mysql的存儲引擎

mysql的存儲引擎

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引擎調優精要

    1. 主鍵盡可能小,避免給Secondary index帶來過大的空間負擔

    2. 避免全表掃面,因為會使用表鎖

    3. 盡可能緩存所有的索引和數據,提高響應速度,減少磁盤IO

    4. 在大批量小插入的時候,盡量自己控制事務而不要使用自動提交,有開關可以控制提交方式

    5. 合理設置innodb_flush_log_at_trx_commit的值為0,log buffer美妙就會被刷寫日誌文件到磁盤,提交事務的時候不要做任何操作

    6. 避免主鍵更新,因為這會帶來大量的數據移動。


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