msql事務與引擎

事務介紹

  簡單來講,事務就是指邏輯上的一組SQL語句操做,組成這組操做的各個SQL語句,執行時要麼全成功要麼全失敗。 
  MySQL5.5支持事務的引擎:Innodb/ndb
 1、事務四大特性(ACID)
1.原子性(Atomicity)
事務是一個不可分割的單位,事務中的全部SQL等操做要麼全都發生,要麼都不發生
2.一致性(Consistency)
事務發生前和發生後,數據的完整性必須保持一致
3.隔離性(Isolation)
當併發訪問訪問數據庫時,一個正在執行的事務在執行完畢前,對於其餘的會話是不可見的,多個併發事務之間的數據庫是相互隔離的。
4.持久性(Durability)
一個事務一旦被提交,它對數據庫中的數據改變就是永久性的。若是出了錯誤,事務也不容許撤銷,只能經過「補償性事務」
2、事務的開啓
  數據庫默認事務是自動提交的,也就是發一條sql它就執行一條。若是想多條sql放在一個事務中執行,則須要使用事務進行處理。當咱們開啓一個事務,而且沒有提交,mysql會自動回滾事務,或者咱們使用rolback命令回滾事務。
MySQL默認是自動提交的,也就是提交一個QUERY,它就直接執行!咱們能夠經過如下命令進行查詢:show variables like '%commit%'
mysql>set global autocommit=OFF
mysql>set global autocommit=NO 開啓自動提交
rolback回滾事務(oracle)
commit提交事務(oracle)

1.2 MySQL存儲引擎架構

  MySQL的存儲引擎是MySQL數據庫的重要組成部分,MySQL經常使用的表的引擎爲MyISAM和InnoDB兩種。MySQL的美中存儲引擎在MySQL裏經過插件的方式使用的。MySQL能夠同時支持多種存儲引擎。

MyISAM引擎介紹

1.1什麼是MyIASM引擎?

  MyIASM引擎是MySQL關係數據庫管理系統的默認存儲引擎(MySQL 5.5.5之前)這種MySQL表的存儲結構從舊的IASM代碼擴展出許多有用的功能。在新版本的MySQL中,InnoDB引擎因爲對事物參考完成行,以及更好的併發性等優勢開始逐漸的取代MyIASM引擎。
提示:MySQL5.5之前的數據庫的默認存儲引擎爲MyIASM
  每個MyIASM的表都對應與硬盤上的三個文件。這三個文件有同樣的文件名,可是有不一樣的擴展名指示其類型用途:frm文件保存表的定義,這個文件並非MyISAM引擎的一部分,而是服務器的一部分;MYD保存表的數據;MYI是表的索引文件。MYD和MYI是MyIASM的關鍵

1.2 MyISAM引擎特色(此處面試最好全說出來)

1.不支持事務
(事務是指邏輯上的一組操做,組成這組操做的各個單元,要麼全成功要麼全失敗)
2.表級鎖定,數據更新時鎖定整個表:其鎖表機制是表級鎖定,這雖然可讓鎖定的實現成本很小可是也同時大大下降了其併發性能。
3.讀寫互相阻塞:不只會在寫入的時候阻塞讀取,MyIASM還會在讀取的時候阻塞寫入,但讀自己並不會阻塞另外的讀。
4.只會緩存索引:MyIASM能夠經過key_buffer_size緩存索引,以大大提升訪問性能減小磁盤IO。可是這個緩存區只會緩存索引,而不會緩存數據。
5.讀取速度較快,佔用資源相對少
6.不支持外鍵約束,但支持全文索引
7.MyISAM引擎是MySQL5.5.5 前缺省的存儲引擎

1.3 MyIASM引擎適用的生產業務場景

1)不須要事務支持的業務(例如轉帳就不行)
2)通常爲讀數據比較多的應用,讀寫都頻繁場景不適合,讀多或者寫多的都適合。
3)讀寫併發訪問相對較低的業務(純讀純寫高併發也能夠)(鎖定機制問題)
4)數據修改相對較少的業務(阻塞問題)
5)以讀爲主的業務,例如:數據庫系統表、www、blog圖片信息數據庫,用戶數據庫。商品庫等業務
6)對硬件一致性要求不是很是高的業務(不支持事務)
7)硬件資源比較差的機器能夠用MySAM(佔用資源少)
8)使用讀寫分離的MySQL從庫可使用MyIASM
小結:單一對數據庫的操做均可以使用MyIASM,因此單一就是儘可能純讀,或純寫(insert,update,delete)等

1.4 MyIASM引擎調優精要

1.設置合適的索引(緩存機制)
2.調整讀寫優先級,根據實際需求確保重要操做更優先執行。
3.啓用延遲插入改善大批量寫入性能(下降寫入頻率,儘量多條數據一次性寫入)
4.儘可能順序操做讓insert數據都寫入到尾部,減小阻塞
5.分解大的時間長的SQL操做,下降單個操做的阻塞時間。
6.下降併發數(減小對MySQL訪問),某些高併發場景經過應用進行排隊隊列機制
7.對於相對靜態(更改不頻繁)的數據庫數據,充分利用Query Cache或memcached緩存服務能夠極大的提升訪問效率,網站動態內容靜態化,減小對數據庫的訪問。

InnoDB引擎

1.1 什麼是InnoDB引擎?

  InnoDB引擎是MySQL數據庫的另外一個重要的存儲引擎,整成爲目前MySQL AB所發行新版的標準,被包含在全部二進制安裝包裏。和其餘的存儲引擎相比,InnoDB引擎的優勢是支持兼容ACID的事務(相似於PostgerSQL)以及參數完整性(即對外鍵的支持)
  Oracle公司2005年10月收購了Innobase。Innobase採用雙認證受權,它使用GUN發行,也容許其餘想將InnoDB結合到商業軟件的團體得到受權。
  MySQL5.5.5之後數據庫的默認存儲引擎爲InnoDB

InnoDB引擎特色

1.支持事務:支持4個事務隔離級別,支持多版本讀。
2.行級鎖定(更新時必定是鎖定當前行):經過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響。
3.讀寫阻塞與事務隔離級別相關。
4.具備很是搞笑的緩存特性:能緩存索引,也能緩存數據。
5.整個表和主鍵以Cluster方式存儲,組成一顆平衡樹。
6.全部Secondary Index都會保存主鍵信息
7.支持分區,表空間,相似oracle數據庫
8.支持外鍵約束 5.5 之後不支持全文索引,之後支持了。
9.和MyIASM引擎相比,InnoDB對硬件資源要求比較高。

InnoDB特色:面試必答題

1.Row-level locking        #行級鎖
2.Full-text search indexs  #全文索引
3.Data caches              #緩存數據
4.Index caches            #索引緩存
5.Transactions            #支持事務
6.佔用資源多
7.讀寫阻塞與事務隔離級別相關。
8.外鍵

InnoDB引擎使用的生產業務場景

一、須要事務支持的業務(具備較好的事務特性)
二、行級鎖定對高併發有很好的適應能力,但須要確保查詢是經過索引完成
三、數據讀寫及更新都較爲頻繁的場景,如:BBS。SNA。微博,微信等。
四、數據一致性要求較高的業務,例如:充值轉帳、銀行卡轉帳。
五、硬件設備內存較大,能夠利用InnoDB較好的緩存能力來提升內存利用率,儘量減小磁盤IO

InnoDB引擎調優精要

一、主鍵儘量小,避免給Secondary index 帶來過大的空間負擔
二、創建有索引避免全表掃描,由於會使用表鎖。
三、儘量緩存全部的索引和數據,提升響應速度,減小磁盤IO消耗
四、在大批量小插入的視乎,儘可能本身控制事務而不要使用autocommit自動提交,有開關能夠控制提交方式:
五、合理設置innodb_flush_log_at_trx_commit參數值,不要過分追求安全性。
  若是Innodb_flush_log_at_trx_commit的值爲0,log buffer每秒就會被刷寫日誌文件到磁盤,提交事務的時候不會任何操做。
六、避免主鍵更新,由於這會帶來大量的數據移動
相關文章
相關標籤/搜索