我愛學(xué)習(xí)網(wǎng)-上傳
當(dāng)前位置: 主頁 > 文庫 > MySQL >

SQL查詢與更新的執(zhí)行過程

時(shí)間:2020-09-10 17:26來源:我愛學(xué)習(xí)網(wǎng) 作者:apple 點(diǎn)擊: 735 次

內(nèi)容簡介

SQL查詢和更新語句的執(zhí)行過程,Mysql如何實(shí)現(xiàn)數(shù)據(jù)恢復(fù)。

 

腦圖

Mysql 執(zhí)行過程

 

Mysql 更新數(shù)據(jù)

 

筆記

Mysql執(zhí)行過程

連接器

權(quán)限管理

用戶名和密碼的校驗(yàn)

連接管理

  • show processlist;  查看當(dāng)前連接狀態(tài)
  • 默認(rèn)連接等待時(shí)間8小時(shí),超時(shí)斷線
  • 長連接使用太多太久,會(huì)使mysql 內(nèi)存占用太多(保存在連接對(duì)象中,只有連接斷開才會(huì)釋放)導(dǎo)致OOM被系統(tǒng)強(qiáng)殺
  • 定期斷開連接釋放內(nèi)存
  • Mysql5.7以后可以通過 mysql_reset_connection 初始化連接資源,不需要重連

 

查詢緩存

連接器之后會(huì)先去查詢緩存,如果命中緩存則直接返回結(jié)果(返回之前會(huì)有操作權(quán)限校驗(yàn))緩存的存在可以提高查詢語句的執(zhí)行效率。

但由于 數(shù)據(jù)更新的時(shí)候會(huì)導(dǎo)致清空緩存,對(duì)于更新比較頻繁的數(shù)據(jù),查詢緩存的命中率太低。

分析器

詞法分析

識(shí)別關(guān)鍵詞"select" 確定列 

判斷表是否存在,列是否存在。

語法分析

SQL語法判斷

 

優(yōu)化器

索引的選擇

執(zhí)行器

1:權(quán)限校驗(yàn)

sql執(zhí)行過程中可能會(huì)有觸發(fā)器這種在運(yùn)行時(shí)才能確定的過程,分析器工作結(jié)束后的precheck是不能對(duì)這種運(yùn)行時(shí)涉及到的表進(jìn)行權(quán)限校驗(yàn)的,所以需要在執(zhí)行器階段進(jìn)行權(quán)限檢查。

2:調(diào)用引擎接口查詢符合條件的結(jié)果

rows_examined 的字段,表示這個(gè)語句執(zhí)行過程中掃描了多少行。這個(gè)值就是在執(zhí)行器每次調(diào)用引擎獲取數(shù)據(jù)行的時(shí)候累加的。引擎掃描行數(shù)跟 rows_examined 并不是完全相同的

 

Mysql更新語句

InnoDB 引擎就會(huì)先把記錄寫到 redo log里面,并更新內(nèi)存。等適當(dāng)?shù)臅r(shí)候 寫入磁盤

 

redo log(重做日志)和 binlog(歸檔日志)

WAL 技術(shù),WAL 的全稱是 Write-Ahead Logging。

數(shù)據(jù)庫處理更新操作的時(shí)候,先記日志(redo log)再在空閑的時(shí)候?qū)⒉僮鲗懭氪疟P。

 

redolog 重做日志

 

  • redoLog 是 InnoDB 引擎特有的
  • redolog 是固定大小的,循環(huán)寫入
  • redolog 在commit之前寫入保證了 crash-safe (binlog的設(shè)計(jì)原因?qū)е缕錈o法保證crash-safe)

 

writePos  是記錄的位置,checkPoint是 擦除的位置。

writePos 和 checkPoint之間的空間就是 剩余的 redoLog可記錄的空間。

當(dāng)writePos 追上 checkPoint的時(shí)候意味著 redolog滿了,需要擦除一些,擦除之前 需要對(duì)數(shù)據(jù)進(jìn)行更新,并將checkPoint 后移。

 

因?yàn)閞edLog的存在所以 數(shù)據(jù)庫哪怕crash掉 也可以保留期間的更新記錄。crash-safe 

 

binlog 歸檔日志

  • binlog 是 MySQL 的 Server 層實(shí)現(xiàn)的,所有引擎都可以使用。
  • binlog有兩種模式,statement 格式的話是記sql語句, row格式會(huì)記錄行的內(nèi)容,記兩條,更新前和更新后都有。
  • binlog 是可以追加寫入的。“追加寫”是指 binlog 文件寫到一定大小后會(huì)切換到下一個(gè),并不會(huì)覆蓋以前的日志。
  • binlog 無法做到 crash-safe

 

 

歷史上的原因是,這個(gè)是一開始就這么設(shè)計(jì)的,所以不能只依賴binlog。

操作上的原因是,binlog是可以關(guān)的,你如果有權(quán)限,可以set sql_log_bin=0關(guān)掉本線程的binlog日志。 所以只依賴binlog來恢復(fù)就靠不住。

 

更新操作的執(zhí)行過程

 

 

redolog 和 binlog雖然是兩個(gè)獨(dú)立的處理邏輯,但是也需要 “兩階段提交” 保證 要失敗就一起失敗,要成功就一起成功。這樣做的原因是為了 保證 日志的一致性。

 

------分隔線----------------------------
    ?分享到??
看看啦
主站蜘蛛池模板: 亚洲AV无码一区二区乱子仑 | 国产成人一区二区三区电影网站| 欧美日韩一区二区成人午夜电影| 高清国产精品人妻一区二区| 99偷拍视频精品一区二区 | 狠狠色综合一区二区| 波多野结衣AV无码久久一区| 一区二区视频免费观看| 国产精品区一区二区三| 精品视频一区二区三区四区| 亚洲国产国产综合一区首页| 伊人久久精品无码av一区| 亚洲视频在线一区二区| 国产精品区AV一区二区| 精品国产一区二区三区久久蜜臀| 视频一区二区三区在线观看| 免费无码A片一区二三区| 中文字幕人妻第一区| 学生妹亚洲一区二区| 亚洲一区二区三区成人网站 | 日韩在线视频不卡一区二区三区| 亚洲AV无码一区二区三区电影 | 在线日产精品一区| 国产福利91精品一区二区| 亚洲狠狠狠一区二区三区| 91午夜精品亚洲一区二区三区| 少妇精品无码一区二区三区| 蜜臀AV一区二区| 亚洲欧美日韩国产精品一区| 亚洲乱色熟女一区二区三区蜜臀| 天堂va在线高清一区 | 亚洲午夜日韩高清一区| 伊人精品视频一区二区三区| 国产视频一区在线观看| 亚洲乱码一区av春药高潮| 麻豆精品人妻一区二区三区蜜桃| 日韩美女视频一区| 丰满人妻一区二区三区免费视频| 风间由美性色一区二区三区| 无码乱码av天堂一区二区| 日本精品一区二区三区视频|