mysql的存儲引擎

  1. 什麼是存儲引擎?

         比如:一個視頻可以是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表的索引,數據,插入數據時的緩衝。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章