Undo Log,Redo Log和Binlog
- MySQL隔離級別,一致性視圖,undo log浦徊,redo log和binglog MySQL索引結(jié)構(gòu),回表天梧,最左前綴原則
- Mysql相關(guān) 1盔性、innoDB跟myisam的區(qū)別; 2呢岗、InnoDB的索引實現(xiàn)冕香,唯一索引、覆蓋索引后豫、前綴索引悉尾、聯(lián)合索引、最左匹配原則挫酿; 3构眯、什么時候需要索引,以及如何選擇索引早龟; 4惫霸、MVCC的原理猫缭、redo、undo它褪、回滾段饵骨; 5翘悉、自增鎖茫打、共享鎖、排他鎖妖混、意向鎖老赤、插入意向鎖、記錄鎖制市、間隙鎖是什么抬旺;
- 說一下undolog, redolog 9祥楣、MySQL如何保證redo log和binlog的數(shù)據(jù)是一致的开财,如果一個sql執(zhí)行很慢,你能分析一下原因嗎误褪? 10责鳍、為什么數(shù)據(jù)庫會選錯了索引
- 5、MVCC,binlog,redolog,undolog都是什么兽间,起什么作用历葛? (1)undolog 也就是我們常說的回滾日志文件 主要用于事務(wù)中執(zhí)行失敗,進行回滾嘀略,以及MVCC中對于數(shù)據(jù)歷史版本的查看恤溶。由引擎層的InnoDB引擎實現(xiàn),是邏輯日志,記錄數(shù)據(jù)修改被修改前的值,比如"把id='B' 修改為id = 'B2' ,那么undo日志就會用來存放id ='B'的記錄”帜羊。當一條數(shù)據(jù)需要更新前,會先把修改前的記錄存儲在undolog中,如果這個修改出現(xiàn)異常,則會使用undo日志來實現(xiàn)回滾操作,保證事務(wù)的一致性咒程。當事務(wù)提交之后,undo log并不能立馬被刪除,而是會被放到待清理鏈表中,待判斷沒有事物用到該版本的信息時才可以清理相應(yīng)undolog讼育。它保存了事務(wù)發(fā)生之前的數(shù)據(jù)的一個版本帐姻,用于回滾,同時可以提供多版本并發(fā)控制下的讀(MVCC)窥淆,也即非鎖定讀卖宠。 (2)redoLog 是重做日志文件是記錄數(shù)據(jù)修改之后的值,用于持久化到磁盤中忧饭。redo log包括兩部分:一是內(nèi)存中的日志緩沖(redo log buffer)扛伍,該部分日志是易失性的;二是磁盤上的重做日志文件(redo log file)词裤,該部分日志是持久的刺洒。由引擎層的InnoDB引擎實現(xiàn),是物理日志,記錄的是物理數(shù)據(jù)頁修改的信息,比如“某個數(shù)據(jù)頁上內(nèi)容發(fā)生了哪些改動”鳖宾。當一條數(shù)據(jù)需要更新時,InnoDB會先將數(shù)據(jù)更新,然后記錄redoLog 在內(nèi)存中逆航,然后找個時間將redoLog的操作執(zhí)行到磁盤上的文件上鼎文。不管是否提交成功我都記錄,你要是回滾了因俐,那我連回滾的修改也記錄拇惋。它確保了事務(wù)的持久性。 (3)MVCC多版本并發(fā)控制是MySQL中基于樂觀鎖理論實現(xiàn)隔離級別的方式抹剩,用于讀已提交和可重復讀取隔離級別的實現(xiàn)撑帖。在MySQL中,會在表中每一條數(shù)據(jù)后面添加兩個字段:最近修改該行數(shù)據(jù)的事務(wù)ID澳眷,指向該行(undolog表中)回滾段的指針胡嘿。Read View判斷行的可見性,創(chuàng)建一個新事務(wù)時钳踊,copy一份當前系統(tǒng)中的活躍事務(wù)列表衷敌。意思是,當前不應(yīng)該被本事務(wù)看到的其他事務(wù)id列表拓瞪。 (4)binlog由Mysql的Server層實現(xiàn),是邏輯日志,記錄的是sql語句的原始邏輯缴罗,比如"把id='B' 修改為id = ‘B2’。binlog會寫入指定大小的物理文件中,是追加寫入的,當前文件寫滿則會創(chuàng)建新的文件寫入吴藻。 產(chǎn)生:事務(wù)提交的時候,一次性將事務(wù)中的sql語句,按照一定的格式記錄到binlog中瞒爬。用于復制和恢復在主從復制中,從庫利用主庫上的binlog進行重播(執(zhí)行日志中記錄的修改邏輯),實現(xiàn)主從同步沟堡。業(yè)務(wù)數(shù)據(jù)不一致或者錯了侧但,用binlog恢復。
- 8.mysql的索引結(jié)構(gòu)和優(yōu)點 9.覆蓋索引航罗,事務(wù)acid如何實現(xiàn)(mvcc)禀横,如何回滾(根據(jù)undolog) 10.什么是回表(講覆蓋索引的時候提到不用回表)
- binlog 日志和 redolog 日志清楚嗎? 說了兩個日志的作用以及兩階段提交 mysql 有那些存儲引擎粥血,有哪些區(qū)別 mysql 索引在什么情況下會失效 mysql 主從同步怎么搞的柏锄?分哪幾個過程?如果有一臺新機器要加到從機里复亏,怎么個過程趾娃。 樂觀鎖與悲觀鎖的區(qū)別? binlog 日志是 master 推的還是 salve 來拉的缔御?
- 4抬闷、Spring的@Transactional如何實現(xiàn)的? (1)配置文件開啟注解驅(qū)動,在相關(guān)的類和方法上通過注解@Transactional標識笤成。 (2)spring 在啟動的時候會去解析生成相關(guān)的bean评架,這時候會查看擁有相關(guān)注解的類和方法,并且為這些類和方法生成代理炕泳,并根據(jù)@Transaction的相關(guān)參數(shù)進行相關(guān)配置注入纵诞,這樣就在代理中為我們把相關(guān)的事務(wù)處理掉了(開啟正常提交事務(wù),異撑嘧瘢回滾事務(wù))浙芙。 (3)真正的數(shù)據(jù)庫層的事務(wù)提交和回滾是通過binlog或者redo log實現(xiàn)的
- 隔離級別 慢查詢?nèi)绾味ㄎ唬咳绾蝺?yōu)化荤懂?遇見過什么樣的case茁裙,怎么解決的塘砸? 項目用到了分庫分表节仿,分庫一定會提升性能呢?分庫分表的設(shè)計掉蔬? 分布式事務(wù)出現(xiàn)過不一致嗎廊宪?為什么?怎么解決女轿?有什么方法避免箭启?怎么監(jiān)控?監(jiān)控到怎么處理蛉迹?什么時候需要人工接入?mysql innodb下傅寡,能不能不設(shè)置主鍵?主鍵可以為空嗎北救?可以允許幾個荐操?主鍵跟非主鍵的區(qū)別?索引存儲形式珍策? 聯(lián)合索引失效問題托启?索引失效問題? mysql索引攘宙,覆蓋索引屯耸?回表?B+樹葉子節(jié)點存儲什么蹭劈?為什么不用AVL樹疗绣? 數(shù)據(jù)庫鎖,樂觀铺韧,悲觀多矮,record lock?next-key lock祟蚀? mysql mvcc 雙寫機制工窍?binlog跟redo log先后順序割卖?一個寫不成功怎么處理?當前讀和快照讀患雏?事務(wù)隔離級別鹏溯?線上sql優(yōu)化經(jīng)驗? 分布式事務(wù)淹仑?用過哪些方式丙挽?還知道哪些方式?怎么實現(xiàn)匀借?有沒有想過自己實現(xiàn)颜阐?避免哪些坑? 跨庫聚合怎么實現(xiàn)吓肋?分頁凳怨?第幾頁?下一頁是鬼? 分庫分表 聚合查詢 limit怎么實現(xiàn) top的實現(xiàn) 不停機擴容肤舞?分表避免冷熱?不停機擴庫均蜜?不停機擴表李剖?跨庫事務(wù)? 分庫分表為什么這么設(shè)計囤耳?數(shù)據(jù)增長怎么做篙顺?怎么擴容?數(shù)據(jù)不均勻怎么辦充择?冷熱數(shù)據(jù)怎么分離德玫?聚合怎么做?跨庫聚合怎么做聪铺,查詢怎么做化焕?跨庫分頁怎么做? mysql 線上的組群模式铃剔?一主多從撒桨?為什么這樣?強一致性如何保證键兜?為了解決讀寫分離嗎凤类?是為了一主多備嗎?主庫crash掉怎么辦普气?從庫呢谜疤? 分布式事務(wù)怎么做?什么原理?怎么實現(xiàn)的夷磕?出現(xiàn)過事務(wù)不一致性嗎履肃?為什么?怎么解決的坐桩? 訪問請求暴增怎么做尺棋?怎么緩解壓力?
- MySQL做過哪些優(yōu)化绵跷?覆蓋索引膘螟?limit兩個參數(shù)區(qū)別?MySQL分頁優(yōu)化的其他方法 SQL調(diào)優(yōu)你會怎么做碾局?索引的數(shù)據(jù)結(jié)構(gòu)荆残?MYSQL的事務(wù)有哪些?比較常用的是哪些净当? 關(guān)鍵SQL優(yōu)化怎么優(yōu)化的内斯?為什么性能不好?主鍵必須有嗎蚯瞧? MySQL有哪幾種索引嘿期?聚簇索引和輔助索引的區(qū)別?索引數(shù)據(jù)結(jié)構(gòu)埋合?為什么用B+樹? MVCC萄传?版本號怎么變化的甚颂?更新的數(shù)據(jù)的時候怎么確定版本的?幻讀怎么解決的秀菱? 一個SQL怎么走的索引振诬?MYSQL會怎么選的?MySQL哪些不正規(guī)的寫法無法命中索引衍菱? MySQL有哪幾種日志赶么?redo log主要有什么用?提交之后100%落盤嗎脊串?為什么MySQL要寫到redo log buff內(nèi)存辫呻?
- mysql 自動提交事物:autocommit=20,binlog記錄 5琼锋、mysql幾種鎖放闺,區(qū)別? 3種缕坎,行(單行)怖侦,表(單表),頁(一組數(shù)據(jù))。 6匾寝、100萬頁數(shù)據(jù)搬葬,分頁查詢:從100萬跳轉(zhuǎn)到100萬01頁最快,還是直接輸入100萬最快艳悔,為什么踩萎? 7、如何使用避免最小粒度的行鎖:參數(shù)很钓?
- 5香府、訂閱分庫分表的 Binlog 怎么訂閱? 6码倦、分庫分表的數(shù)據(jù)源中假如存在主鍵沖突要怎么解決企孩? 7、怎么保證下游對 Binlog 的消費順序袁稽?
- 1勿璃、MySQL中常用存儲引擎有哪些?它們相互之間有什么區(qū)別推汽? 2补疑、MySQL 索引在什么情況下會失效? (1)當使用like關(guān)鍵字時歹撒,如果查詢條件以%開頭莲组,索引無效;當like前綴沒有%暖夭,后綴有%時锹杈,索引依然有效。 (2)當使用or關(guān)鍵字時迈着,or語句前后沒有同時使用索引或當or關(guān)鍵字左右查詢字段只有一個是索引竭望,該索引失效,只有當or左右查詢字段均為索引時裕菠,才會生效咬清。 (3)使用組合索引時,如果查詢條件不包括該組合索引全部字段或查詢條件不是該組合索引左邊第一個字段時奴潘,索引失效旧烧。 (4)數(shù)據(jù)類型出現(xiàn)隱式轉(zhuǎn)化。如某個索引字段的數(shù)據(jù)類型為varchar萤彩,查詢內(nèi)容為123粪滤,如不加引號的話可能會自動轉(zhuǎn)換為int型,使索引無效雀扶,產(chǎn)生全表掃描杖小。 (5)在索引字段上使用not及運算符 (6)對索引字段進行計算操作肆汹、字段上使用函數(shù),索引失效予权。 3昂勉、innodb 與myisam 的區(qū)別? 4扫腺、MySQL 的索引模型岗照; 5、MySQL 主從同步怎么搞的笆环?分哪幾個過程攒至?如果有一臺新機器要加到從機里,怎么個過程躁劣。 6迫吐、樂觀鎖與悲觀鎖的區(qū)別? 7账忘、binlog 日志是 master 推的還是 salve 來拉的志膀?
- 數(shù)據(jù)庫,MVCC的實現(xiàn)講一下鳖擒?多版本體現(xiàn)在哪里實現(xiàn)上是怎樣的溉浙?B+樹索引有了解嗎?怎么解決不可重復讀的問題蒋荚? MySQL 的主從同步機制戳稽?幻讀是什么? 使用 MySQL 的心得圆裕?加 limit广鳍, 執(zhí)行計劃,是否有排序吓妆,是否可以使用覆蓋索引解決排序,不要將自增主鍵給外部
歡迎關(guān)注和點贊吨铸,以及總結(jié)的分類面試題https://github.com/zhendiao/JavaInterview