国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MySQL事務(wù)已提交,數(shù)據(jù)卻丟了,趕緊檢查下這個配置!!!

數(shù)據(jù)庫 MySQL
既然redo log能保證事務(wù)的ACID特性,那為什么還會出現(xiàn),水友提問中出現(xiàn)的“數(shù)據(jù)庫崩潰,丟數(shù)據(jù)”的問題呢?一起看下redo log的實現(xiàn)細節(jié)。

有個水友提問:

沈老師,我們有一次MySQL崩潰,重啟后發(fā)現(xiàn)有些已經(jīng)提交的事務(wù)對數(shù)據(jù)的修改丟失了,不是說事務(wù)能保證ACID特性么,想問下什么情況下可能導致“事務(wù)已經(jīng)提交,數(shù)據(jù)卻丟失”呢?

這個問題有點復(fù)雜,得先從redo log說起。

為什么要有redo log?

事務(wù)提交后,必須將事務(wù)對數(shù)據(jù)頁的修改刷(fsync)到磁盤上,才能保證事務(wù)的ACID特性。

這個刷盤,是一個隨機寫,隨機寫性能較低,如果每次事務(wù)提交都刷盤,會極大影響數(shù)據(jù)庫的性能。

隨機寫性能差,有什么優(yōu)化方法呢?

架構(gòu)設(shè)計中有兩個常見的優(yōu)化方法:

  • 先寫日志(write log first),將隨機寫優(yōu)化為順序?qū)懀?/li>
  • 將每次寫優(yōu)化為批量寫;

這兩個優(yōu)化,數(shù)據(jù)庫都用上了。

先說第一個優(yōu)化,將對數(shù)據(jù)的修改先順序?qū)懙饺罩纠铮@個日志就是redo log。

假如某一時刻,數(shù)據(jù)庫崩潰,還沒來得及將數(shù)據(jù)頁刷盤,數(shù)據(jù)庫重啟時,會重做redo log里的內(nèi)容,以保證已提交事務(wù)對數(shù)據(jù)的影響被刷到磁盤上。

一句話,redo log是為了保證已提交事務(wù)的ACID特性,同時能夠提高數(shù)據(jù)庫性能的技術(shù)。

既然redo log能保證事務(wù)的ACID特性,那為什么還會出現(xiàn),水友提問中出現(xiàn)的“數(shù)據(jù)庫崩潰,丟數(shù)據(jù)”的問題呢?一起看下redo log的實現(xiàn)細節(jié)。

redo log的三層架構(gòu)?

畫了一個丑圖,簡單說明下redo log的三層架構(gòu):

  • 粉色,是InnoDB的一項很重要的內(nèi)存結(jié)構(gòu)(In-Memory Structure),日志緩沖區(qū)(Log Buffer),這一層,是MySQL應(yīng)用程序用戶態(tài);
  • 屎黃色,是操作系統(tǒng)的緩沖區(qū)(OS cache),這一層,是OS內(nèi)核態(tài);
  • 藍色,是落盤的日志文件。

redo log最終落盤的步驟如何?

首先,事務(wù)提交的時候,會寫入Log Buffer,這里調(diào)用的是MySQL自己的函數(shù)WriteRedoLog;

接著,只有當MySQL發(fā)起系統(tǒng)調(diào)用寫文件write時,Log Buffer里的數(shù)據(jù),才會寫到OS cache。注意,MySQL系統(tǒng)調(diào)用完write之后,就認為文件已經(jīng)寫完,如果不flush,什么時候落盤,是操作系統(tǒng)決定的;

畫外音:有時候打日志,明明printf了,tail -f卻看不到,就是這個原因,操作系統(tǒng)還沒有刷盤。

最后,由操作系統(tǒng)(當然,MySQL也可以主動flush)將OS cache里的數(shù)據(jù),最終fsync到磁盤上。

操作系統(tǒng)為什么要緩沖數(shù)據(jù)到OS cache里,而不直接刷盤呢?

這里就是將“每次寫”優(yōu)化為“批量寫”,以提高操作系統(tǒng)性能。

數(shù)據(jù)庫為什么要緩沖數(shù)據(jù)到Log Buffer里,而不是直接write呢?

這也是“每次寫”優(yōu)化為“批量寫”思路的體現(xiàn),以提高數(shù)據(jù)庫性能。

畫外音:這個優(yōu)化思路,非常常見,高并發(fā)的MQ落盤,高并發(fā)的業(yè)務(wù)數(shù)據(jù)落盤,都可以使用。 redo log的三層架構(gòu),MySQL做了一次批量寫優(yōu)化,OS做了一次批量寫優(yōu)化,確實能極大提升性能,但有什么副作用嗎?

畫外音:有優(yōu)點,必有缺點。

這個副作用,就是可能丟失數(shù)據(jù):

  • 事務(wù)提交時,將redo log寫入Log Buffer,就會認為事務(wù)提交成功;
  • 如果寫入Log Buffer的數(shù)據(jù),write入OS cache之前,數(shù)據(jù)庫崩潰,就會出現(xiàn)數(shù)據(jù)丟失;
  • 如果寫入OS cache的數(shù)據(jù),fsync入磁盤之前,操作系統(tǒng)崩潰,也可能出現(xiàn)數(shù)據(jù)丟失;

畫外音:如上文所說,應(yīng)用程序系統(tǒng)調(diào)用完write之后(不可能每次write后都立刻flush,這樣寫日志很蠢),就認為寫成功了,操作系統(tǒng)何時fsync,應(yīng)用程序并不知道,如果操作系統(tǒng)崩潰,數(shù)據(jù)可能丟失。

任何脫離業(yè)務(wù)的技術(shù)方案都是耍流氓:

  • 有些業(yè)務(wù)允許低效,但不允許一丁點數(shù)據(jù)丟失;
  • 有些業(yè)務(wù)必須高性能高吞吐,能夠容忍少量數(shù)據(jù)丟失。

MySQL是如何折衷的呢?

MySQL有一個參數(shù):

innodb_flush_log_at_trx_commit

能夠控制事務(wù)提交時,刷redo log的策略。

目前有三種策略:

策略一:最佳性能(innodb_flush_log_at_trx_commit=0)

  • 每隔一秒,才將Log Buffer中的數(shù)據(jù)批量write入OS cache,同時MySQL主動fsync。
  • 這種策略,如果數(shù)據(jù)庫崩潰,有一秒的數(shù)據(jù)丟失。

策略二:強一致(innodb_flush_log_at_trx_commit=1)

  • 每次事務(wù)提交,都將Log Buffer中的數(shù)據(jù)write入OS cache,同時MySQL主動fsync。
  • 這種策略,是InnoDB的默認配置,為的是保證事務(wù)ACID特性。

策略三:折衷(innodb_flush_log_at_trx_commit=2)

  • 每次事務(wù)提交,都將Log Buffer中的數(shù)據(jù)write入OS cache;
  • 每隔一秒,MySQL主動將OS cache中的數(shù)據(jù)批量fsync。

畫外音:磁盤IO次數(shù)不確定,因為操作系統(tǒng)的fsync頻率并不是MySQL能控制的。

  • 這種策略,如果操作系統(tǒng)崩潰,最多有一秒的數(shù)據(jù)丟失。

畫外音:因為OS也會fsync,MySQL主動fsync的周期是一秒,所以最多丟一秒數(shù)據(jù)。

講了這么多,回到水友的提問上來,數(shù)據(jù)庫崩潰,重啟后丟失了數(shù)據(jù),有很大的可能,是將innodb_flush_log_at_trx_commit參數(shù)設(shè)置為0了,這位水友最好和DBA一起檢查一下InnoDB的配置。

可能有水友要問,高并發(fā)的業(yè)務(wù),InnoDB運用哪種刷盤策略最合適?

高并發(fā)業(yè)務(wù),行業(yè)最佳實踐,是使用第三種折衷配置(=2),這是因為:

  • 配置為2和配置為0,性能差異并不大,因為將數(shù)據(jù)從Log Buffer拷貝到OS cache,雖然跨越用戶態(tài)與內(nèi)核態(tài),但畢竟只是內(nèi)存的數(shù)據(jù)拷貝,速度很快;
  • 配置為2和配置為0,安全性差異巨大,操作系統(tǒng)崩潰的概率相比MySQL應(yīng)用程序崩潰的概率,小很多,設(shè)置為2,只要操作系統(tǒng)不崩潰,也絕對不會丟數(shù)據(jù)。

總結(jié)

(1) 為了保證事務(wù)的ACID特性,理論上每次事務(wù)提交都應(yīng)該刷盤,但此時效率很低,有兩種優(yōu)化方向:

  • 隨機寫優(yōu)化為順序?qū)?/li>
  • 每次寫優(yōu)化為批量寫

(2) redo log是一種順序?qū)懀腥龑蛹軜?gòu):

  • MySQL應(yīng)用層:Log Buffer
  • OS內(nèi)核層:OS cache
  • OS文件:log file

(3) 為了滿足不同業(yè)務(wù)對于吞吐量與一致性的需求,MySQL事務(wù)提交時刷redo log有三種策略:

  • 0:每秒write一次OS cache,同時fsync刷磁盤,性能好;
  • 1:每次都write入OS cache,同時fsync刷磁盤,一致性好;
  • 2:每次都write入OS cache,每秒fsync刷磁盤,折衷;

(4) 高并發(fā)業(yè)務(wù),行業(yè)內(nèi)的最佳實踐,是:

innodb_flush_log_at_trx_commit=2

知其然,知其所以然,希望大家有收獲。

責任編輯:趙寧寧 來源: 架構(gòu)師之路
相關(guān)推薦

2025-06-30 08:43:50

網(wǎng)關(guān)代碼

2022-04-28 09:02:55

Gitcommitlint配置

2013-03-22 09:04:11

施密特Google Now蘋果

2022-11-16 17:10:25

MySQL數(shù)據(jù)事務(wù)

2010-03-24 09:09:00

Opera MiniIphone

2025-12-15 09:11:57

2022-07-27 08:52:10

MySQL二階段提交

2023-02-02 07:06:10

2023-02-27 14:42:46

MySQLSQL

2022-01-03 07:18:05

臟讀幻讀 MySQL

2022-06-29 11:01:05

MySQL事務(wù)隔離級別

2024-05-21 14:12:07

2024-07-03 10:26:17

2024-01-02 07:55:26

MySQLRedolog緩存

2025-08-04 08:05:28

2023-02-14 22:14:10

2009-02-11 13:08:29

事務(wù)提交事務(wù)管理Spring

2020-05-25 09:45:47

開發(fā)技能代碼

2021-03-17 00:05:50

分布式事務(wù)提交
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲国产精品成人综合| 欧美一区二区色| 在线中文字幕av| 岛国精品一区二区| 日韩成人av电影在线| 狠色狠色综合久久| 日本国产欧美一区二区三区| 日韩av超清在线观看| 精品不卡在线视频| yellow91字幕网在线| 在线免费精品视频| 97在线资源| 国产精品福利一区二区| 成人小视频在线看| 99国产精品视频免费观看| 激情图片qvod| 韩国女主播成人在线观看| 亚洲国产欧美日韩| 国产真实精品久久二三区| 一区二区三区的久久的视频| 三级在线观看一区二区| 日韩伦理一区二区三区av在线| 午夜亚洲福利在线老司机| 欧美日韩精品一区| 久久精品国产免费看久久精品| 一本久道久久综合狠狠爱亚洲精品| 久久人人97超碰国产公开结果| 欧美性色黄大片人与善| 日本人妖一区二区| 中文字幕人妻熟女人妻洋洋| 91原创在线视频| 国产小黄视频| 欧美日韩一二三四五区| 成人在线二区| 日韩久久久久久| 成人软件在线观看| 久久免费精品日本久久中文字幕| 亚洲美女久久| 92看片淫黄大片看国产片| 日韩视频一区| 真实国产乱子伦对白视频| 久久精品夜色噜噜亚洲a∨| 成年人黄色电影| 欧美艳星brazzers| 日本在线影院| 97激碰免费视频| 午夜久久黄色| 国产卡一卡二在线| 国产日韩三级在线| 欧美少妇另类| 亚洲成人精品久久| 成人短视频软件网站大全app| 日本久久久久久| 久久大逼视频| 午夜精品久久久内射近拍高清| 午夜精品久久久久久不卡8050| 超碰caoporn久久| 中文字幕精品久久| 成人无号精品一区二区三区| 蜜桃传媒视频麻豆第一区免费观看| 成人性视频网站| 在线视频手机国产| 日韩精品中文字| 欧美性感美女一区二区| 亚洲精品一卡二卡三卡四卡| 国产精品你懂的| 高潮毛片在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 欧美激情综合色综合啪啪| 国产一级黄色录像片| 亚洲国产综合色| 国产黄色大片在线观看| 欧美又大又粗又长| 久久精品72免费观看| 亚洲社区在线| 亚洲欧美制服丝袜| 天天做天天爱天天综合网| 国产 国语对白 露脸| 午夜精品久久久久久久久久久| 日韩免费电影| 国产伦精品一区二区三区| 国产视频亚洲色图| 亚洲奶水xxxx哺乳期| 国产精品成人播放| 国产成人免费视频网站高清观看视频| 国产无遮挡在线视频免费观看| 亚洲欧美国产日韩中文字幕| 精品一区电影| 国产av熟女一区二区三区| 日韩欧美国产一区二区| 欧美视频二区欧美影视| 欧美日韩视频在线一区二区观看视频| 国产精品美女久久久久久久久| www.综合网.com| 成人黄色免费网站在线观看| 久久夜色精品国产噜噜av| 女人黄色免费在线观看| 成人在线免费观看视视频| 国产亚洲自拍一区| 亚洲精品动漫| 久久99精品久久久久久久青青日本 | 品久久久久久久久久96高清| 亚洲欧洲国产专区| 日本免费在线一区| 色一情一乱一伦一区二区三欧美| 午夜在线成人av| 亚洲欧美日本国产| 我的公把我弄高潮了视频| 日韩国产高清污视频在线观看| 亚洲激情影院| 人人九九精品| 国产免费一区视频观看免费| 中文一区二区在线观看| 777午夜精品电影免费看| 午夜精品视频在线观看一区二区| 欧美日韩在线视频首页| 欧美日韩高清| 秋霞福利视频| 国产精品成熟老女人| 亚洲欧洲精品成人久久奇米网 | 亚洲欧洲中文天堂| 日韩高清电影一区| 黄色网在线看| 久久久www免费人成黑人精品| 色综合久久久久网| 中文字幕人成人乱码| 在线观看黄色| 91欧美视频网站| 欧美网站在线观看| 欧美国内亚洲| yourporn在线观看视频| 国产精品一区二区欧美| 欧美日韩黄视频| 在线日韩电影| 尤物视频在线看| 日韩一区二区三区高清| 日韩精品一区二区在线观看| 日韩国产精品大片| 国产va在线视频| 国产激情片在线观看| 国产一区二区日韩| 97精品久久久午夜一区二区三区| 亚洲a成人v| 制服丝袜影音先锋| 国产一区二区视频在线观看| 91久久人澡人人添人人爽欧美 | 成人h视频在线观看播放| 欧美日韩在线视频首页| 影音先锋久久| 丁香花在线观看完整版电影| 三年中文高清在线观看第6集| 中文字幕av一区中文字幕天堂 | 91精品国产高清一区二区三区 | 尤物视频一区二区| 色婷婷一区二区三区| 免费理论片在线观看播放老| 狠狠色综合网站久久久久久久| 日韩三级.com| 成人免费看的视频| 狼人精品一区二区三区在线| 最新在线观看av| 免费亚洲精品视频| 中文字幕在线视频日韩| 亚洲天堂免费在线观看视频| 一区二区三区四区电影| 久久青青色综合| 国内外成人激情视频| 国产精品中文久久久久久久| 欧美一区二区三区四区视频| 风流少妇一区二区| 日韩系列在线| av片在线观看| 无人在线观看的免费高清视频| 国产狼人综合免费视频| 日韩亚洲欧美成人一区| 久久综合九色综合欧美亚洲| 99久久精品费精品国产风间由美| free性欧美| 99在线免费观看| 久久艳妇乳肉豪妇荡乳av| 中文字幕亚洲一区二区三区| 性欧美疯狂xxxxbbbb| 天堂在线亚洲视频| 国产极品模特精品一二| 日韩子在线观看| 成人免费aaa| 国产精华一区二区三区| 亚洲网站在线看| 亚洲综合av网| 精品在线你懂的| 欧洲福利电影| 香蕉成人av| 中文字幕国内自拍| 日韩欧美精品一区二区| 久久久亚洲福利精品午夜| 欧美丰满少妇xxxxx高潮对白| 久久久久成人黄色影片| 午夜亚洲影视| 波多野结衣在线观看一区二区三区| 碰碰在线视频|