91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql innodb存儲引擎中一個事務的完整流程分析

發布時間:2021-11-11 16:19:00 來源:億速云 閱讀:209 作者:iii 欄目:MySQL數據庫

這篇文章主要講解了“mysql innodb存儲引擎中一個事務的完整流程分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“mysql innodb存儲引擎中一個事務的完整流程分析”吧!

首先說下innodb的事務日志概念:

ib_logfile文件就是innodb的事務日志,可以理解是INNODB的REDO日志,當數據庫異常關閉的時候,innodb存儲引擎下的mysql借助事務日志來完成實例恢復,即前滾和回滾來保證數據庫一致性;

區別于binlog日志又叫二進制日志文件,它會將mysql中所有修改數據庫數據的Query以二進制的形式記錄到日志文件中,如:create,insert,drop,update等;(對于select操作則不會被記錄到binlog里,因為它并沒有修改數據庫的數據),binlog主要是用于保證數據完整的,如主從備份,通過從binlog文件中讀取操作Query來在salve機上進行同樣的操作,保證主從同步,同時也可以作為恢復數據的工具。

Innodb還有另外一個日志Undo log,但Undo log是存放在共享表空間里面的(ibdata*文件,存儲的是check point日志序列號)。

InnoDB 日志緩沖區(InnoDB Log Buffer):這是 InnoDB 存儲引擎的事務日志所使用的緩沖區。類似于 Binlog Buffer,InnoDB 在寫事務日志的時候,為了提高性能,也是先將信息寫入 Innofb Log Buffer 中,當滿足 innodb_flush_log_trx_commit 參數所設置的相應條件(或者日志緩沖區寫滿)之后,才會將日志寫到文件(或者同步到磁盤)中。可以通過 innodb_log_buffer_size 參數設置其可以使用的最大內存空間;

下面重點講解 innodb_flush_log_trx_commit 參數:下圖可以清楚的展現出該參數設置成不同值時log刷新的不同過程;

mysql innodb存儲引擎中一個事務的完整流程分析

針對這張圖第一個箭頭代表著每次commit的時候,事務日志到達的地方, 然后第二個箭頭,代表刷新到磁盤永久保存的過程,  后面的fsync every commit、fsync every second 、fsync every second 是在分別形容第二個箭頭刷新的條件。

然后還需要注意的:宏觀上寫進logfile就是寫進磁盤了。但是微觀上寫進logfile是先寫進了os cahce,然后再刷新到raid cache(前提是做了raid)最后到磁盤。

具體分析innodb_flush_log_at_trx_commit=N的意義:

innodb_flush_log_at_trx_commit=0,每次commit時,事務日志寫進了innodb  log buffer ,然后每秒Log Thread 會將事務日志從innodb log  buffer刷新到ib_ogfile(也就刷新到了磁盤)。當innodb_flush_log_at_trx_commit設置為0,mysqld進程的崩潰會導致上一秒鐘所有事務數據的丟失,這是因為每次commit,事務日志只是寫進了innodb log buffer 中,然后是每秒才將innodb log buffer 中的事務日志刷新到磁盤永久保存,所以mysqld進程的崩潰時,innodb log buffer可能會有一秒的日志沒有刷新出來,但是在這種情況下,MySQL性能最好;

innodb_flush_log_at_trx_commit=2,每次commit時,事務日志寫進了innodb  log buffer,并同時接著寫進os cache, 也就是說每次commit,事務日志寫進了os cache中, 然后每秒從os cache刷新到ib_logfile(也就是刷新到了磁盤)。當innodb_flush_log_at_trx_commit設置為2,只有在操作系統崩潰或者系統掉電的情況下,上一秒鐘所有事務數據才可能丟失,因為每次commit,事務日志已經進入了os cache,所以mysqld崩潰,事務日志是不會丟失的;

innodb_flush_log_at_trx_commit設置為1,這是最安全的設置,同時由于頻繁的io操作,導致效率是最差的,這時候不管是mysqld,還是操作系統崩潰,都不會丟數據,這是因為每次commit,事務日志都刷新到了磁盤永久保存了;

選取的原則:

對于一些數據一致性和完整性要求不高的應用,配置為 2 就足夠了;如果為了最高性能,可以設置為 0。有些應用,如支付服務,對一致性和完整性要求很高,所以即使最慢,也最好設置為 1.。

然后介紹參數sync_binlog :

sync_binlog =  N: 控制的是從binlog buffer中刷新binlog到底層binlog文件(也就是刷新到底層磁盤)

N>0    每向二進制日志文件寫入N條SQL或N個事務后,則把二進制日志文件的數據刷新到磁盤上; 

N=0    不主動刷新二進制日志文件的數據到磁盤上,而是由操作系統決定; 

推薦配置組合: 

1)innodb_flush_log_at_trx_commit=1同時sync_binlog =1

這就是所謂的雙1設置:這種配置適合數據安全性要求非常高,而且磁盤IO寫能力足夠支持業務,比如充值消費系統,銀行業務; 

2)innodb_flush_log_at_trx_commit=1同時sync_binlog =0

這種設置:保證了事務日志是全的,也就保證可以實例恢復,即前滾和回滾,適合數據安全性要求高,磁盤IO寫能力不太富余;

3))innodb_flush_log_at_trx_commit=2或者0同時sync_binlog =2或者m(0<m<100) </m<100)<>

這種設置:適合數據安全性有要求,允許丟失一點事務日志;

4)innodb_flush_log_at_trx_commit=0同時sync_binlog =0

這種配置適合 :磁盤IO寫能力有限,對數據安全要求較低,例如:日志性登記業務; 

感謝各位的閱讀,以上就是“mysql innodb存儲引擎中一個事務的完整流程分析”的內容了,經過本文的學習后,相信大家對mysql innodb存儲引擎中一個事務的完整流程分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仙桃市| 衡东县| 武川县| 临沭县| 图片| 彭水| 汉寿县| 武强县| 汶川县| 高安市| 乌兰察布市| 麦盖提县| 屯昌县| 汉寿县| 敦煌市| 清流县| 德格县| 军事| 周口市| 青铜峡市| 通州区| 大宁县| 霞浦县| 南充市| 织金县| 巫溪县| 弥勒县| 咸宁市| 宁津县| 岫岩| 凤庆县| 台前县| 浦江县| 西藏| 阿坝县| 镇赉县| 科技| 连州市| 乌审旗| 曲水县| 滕州市|