bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

mysql怎么保持原子性 mysql怎么存儲的

mysql的四大特性

1、原子性:在整個操作的事務中,要么全部成功,要么全部失敗。

創新互聯云計算的互聯網服務提供商,擁有超過13年的服務器租用、成都服務器托管、云服務器、虛擬主機、網站系統開發經驗,已先后獲得國家工業和信息化部頒發的互聯網數據中心業務許可證。專業提供云主機、虛擬主機域名注冊、VPS主機、云服務器、香港云服務器、免備案服務器等。

2、隔離性:所謂隔離性,就是每個事務執行的時候,相互之間不會受到影響,都是單獨的事務。

3、一致性:也就是說事務在執行之后,必須和之前的數據保持一致。

4、持久性:事務一旦提交,就會持久化到數據庫中,不能回滾。

undolog實現事務原子性,redolog實現事務的持久性

undolog可以實現事務的原子性,還可以用來實現MVCC。其原理是,(開啟事務后)在操作任何數據前,先將原數據備份到undolog,然后對數據進行修改,如果此過程中出現異常,或執行了rollback語句,可利用undolog中備份的數據恢復到事務開始之前的狀態。

假設有A、B兩個數據,值分別為1,2。 進行+2的事務操作。

A.事務開始.

B.記錄A=1到undo log.

C.修改A=3.

D.記錄B=2到undo log.

E.修改B=4.

F.將undo log寫到磁盤。

G.將數據寫到磁盤。

H.事務提交

對于數據的操作,都是先讀到內存中,然后在內存中修改,最后將數據寫到磁盤。

之所以能保證原子性,是因為:

A. 更新數據前記錄Undo log。

B. 為了保證持久性,必須將數據在事務提交前寫到磁盤。只要事務成功提交,數據必然已經持久化。

C. Undo log必須先于數據持久化到磁盤。如果在G,H之間系統崩潰,undo log是完整的,可以用來回滾事務。

D. 如果在A-F之間系統崩潰,因為數據沒有持久化到磁盤。所以磁盤上的數據還是保持在事務開始前的狀態。

缺點:每個事務提交前將數據和Undo Log寫入磁盤,這樣會導致大量的磁盤IO,因此性能很低。

所以,為了提升性能,可以在寫數據到磁盤前,先寫redolog,這就是wal預寫日志機制,這樣先寫redolog日志,數據只需先寫到內存,因為redolog是順序寫,而數據落盤則是隨機寫,要慢得多。 這樣,當系統崩潰時,雖然數據沒有持久化,但有redolog撐著,數據也不會丟。(innodb_flush_log_at_trx_commit? 這個參數設置為2時,那么redolog每次不需落盤,而是寫到os cache中(一定時間后再flush到磁盤),這樣性能又大大提升,只要操作系統不宕,即便mysql宕了,數據也不會丟)

Undo + Redo事務的簡化過程

A.事務開始.

B.記錄A=1到undo log.

C.修改A=3.

D.記錄A=3到redo log.

E.記錄B=2到undo log.

F.修改B=4.

G.記錄B=4到redo log.

H.將redo log寫入磁盤。

I.事務提交

通過undo保證事務的原子性,redo保證持久性。

但是!!!基于以上的過程,mysql一個事務操作依舊十分繁瑣,這也就是其在并發場景下需借助于nosql來提升性能

redolog和undolog屬于innodb,而在mysql的server層還有一個binlog,其作用是誤操作后需要靠它來恢復數據以及主從復制, mysql在update一行數據的時候:

1.執行器先找引擎取id=n這一行,id是主鍵,引擎直接用樹搜索到這一行

2.執行器拿到引擎給的行數據,把這個值加1,得到新的一行數據,再調用引擎接口寫入這行新數據

3.引擎將這行數據更新到內存中,同時將這個更新操作記錄到redolog中,此時redolog處于prepare狀態,然后告知執行器執行完成,隨時可以提交事務

4.執行器生成這個操作的binlig,并寫入磁盤

5.執行器調用引擎的提交事務接口,引擎吧剛剛寫入的redolog改成提交(commit)狀態,更新完成

將redolog的寫入拆成兩個步驟,prepare和commit,這就是兩階段提交,其目的是為了讓兩份日志(redolog和binlog)之間的邏輯一致

這兩個日志有三點不同:

1.redolog是innodb特有,binlog是mysql server層實現的,所有引擎都可以使用,

2.redolog是物理日志,記錄的是在某個數據頁上做了什么修改,binlog是邏輯日志,記錄的是這個語句的原始邏輯,

3.redolog是循環寫的,空間固定會用完,binlog是可以追加寫入的,追加寫是指binlog文件寫到一定大小后會切換到下一個,并不會覆蓋以前的日志。

redolog和binlog互相是不可替代的,redolog的作用是提升數據寫入時的性能,并保證事務的持久化特性,以及崩潰恢復的能力,而binlog 是無法支持崩潰恢復,因為它沒有能力恢復“數據頁”。? 而binlog也有著redolog無法替代的功能,一個是歸檔。redo log 是循環寫,寫到末尾是要回到開頭繼續寫的。這樣歷史日志沒法保留,redolog 也就起不到歸檔的作用。還有很多公司有異構系統中使用到的組件(比如es,redis等),這些系統就靠消費 MySQL 的 binlog 來更新自己的數據。關掉 binlog 的話,這些下游系統就沒法輸入了。總之,由于現在包括 MySQL 高可用在內的很多系統機制都依賴于 binlog,所以“鳩占鵲巢”redo log 還做不到。

mysql 事務能保證原子性嗎

原子性, 一個事務 要么完全提交 要么完全回滾,不會介于2者之間。 一致性,一個查詢發起后,不管數據發生了多少變化 多少事務,查詢結果應當為發起查詢時間一致的數據

當前題目:mysql怎么保持原子性 mysql怎么存儲的
當前鏈接:http://vcdvsql.cn/article46/doisgeg.html

成都網站建設公司_創新互聯,為您提供外貿網站建設云服務器自適應網站網頁設計公司營銷型網站建設網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

搜索引擎優化