本書是一本指導(dǎo)DBA進(jìn)行數(shù)據(jù)庫開發(fā)和運(yùn)維的實(shí)用手冊(cè),本書共9章,包括漫談數(shù)據(jù)庫、如何提升數(shù)據(jù)庫性能、如何運(yùn)維好數(shù)據(jù)庫、如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)、如何做好數(shù)據(jù)庫之間的數(shù)據(jù)同步、認(rèn)識(shí)HTAP技術(shù)、認(rèn)識(shí)數(shù)據(jù)庫的功能原理、認(rèn)識(shí)數(shù)據(jù)庫中的數(shù)學(xué)(邏輯與算法),以及DBA的日常:數(shù)據(jù)庫管理及開發(fā)的最佳實(shí)踐。另有附錄DBA雜談。
本書內(nèi)容是資深DBA多年實(shí)踐經(jīng)驗(yàn)的歸納總結(jié),涵蓋DBA日常工作中的主要方面,通過剖析眾多的真實(shí)案例,并解讀原理、分享技巧、提供思路,內(nèi)容具備較強(qiáng)的啟發(fā)性和指導(dǎo)性。
本書的受眾包括但不限于想要了解如何提升數(shù)據(jù)庫性能的應(yīng)用開發(fā)人員、DBA、業(yè)務(wù)架構(gòu)師、IT架構(gòu)師、數(shù)據(jù)架構(gòu)師、數(shù)據(jù)分析師、系統(tǒng)架構(gòu)師、解決方案架構(gòu)師和企業(yè)高級(jí)管理人員。
DBA老兵薛曉剛及其團(tuán)隊(duì)奉獻(xiàn)給廣大同仁的數(shù)據(jù)庫實(shí)踐經(jīng)驗(yàn)集,內(nèi)容涵蓋數(shù)據(jù)庫性能調(diào)優(yōu)、故障處理、架構(gòu)設(shè)計(jì)、數(shù)據(jù)同步、SQL算法等諸多內(nèi)容,解讀廣大數(shù)據(jù)庫從業(yè)者普遍關(guān)心的技術(shù)問題。
本書由蓋國(guó)強(qiáng)、白鱔(徐戟)、賀仁龍傾情作序,周正中(德哥)、侯圣文、耿航、吳洋鼎力推薦。
全書采用全彩印刷,閱讀體驗(yàn)佳;全書內(nèi)容豐富,通過剖析眾多真實(shí)案例,解讀原理、分享技巧、提供思路,內(nèi)容具備較強(qiáng)的啟發(fā)性和指導(dǎo)性。
是廣大應(yīng)用開發(fā)人員、DBA、業(yè)務(wù)架構(gòu)師、IT架構(gòu)師、數(shù)據(jù)架構(gòu)師、數(shù)據(jù)分析師、系統(tǒng)架構(gòu)師、解決方案架構(gòu)師和企業(yè)高級(jí)管理人員值得一讀的實(shí)用手冊(cè)。
前言
為什么要寫這本書
數(shù)據(jù)庫是一個(gè)獨(dú)立的技術(shù)領(lǐng)域,幾乎所有的后端開發(fā)都要和數(shù)據(jù)庫(關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫)打交道,不讀寫數(shù)據(jù)庫的后端應(yīng)用程序幾乎不存在。而應(yīng)用程序中50%的代碼甚至極端情況下80%的代碼都是SQL。所以與其說應(yīng)用程序開發(fā)不如說是基于數(shù)據(jù)庫的應(yīng)用開發(fā)。
作為本書的第一作者,筆者一開始并沒有從事真正意義上的數(shù)據(jù)庫工作,而是從其他工作崗位轉(zhuǎn)到數(shù)據(jù)庫崗位的。在經(jīng)過前輩和名師指導(dǎo)后才慢慢了解了數(shù)據(jù)庫。后來還成為數(shù)據(jù)庫的認(rèn)證講師,培訓(xùn)過的學(xué)員來自各行各業(yè),有近千人之多。
在不斷深入了解數(shù)據(jù)庫的過程中,筆者發(fā)現(xiàn)很多研發(fā)問題歸根結(jié)底都是數(shù)據(jù)庫的問題,而且發(fā)現(xiàn)并解決這些數(shù)據(jù)庫的相關(guān)問題,可以幫助和指導(dǎo)研發(fā)人員更好地開展工作,于是就全身心地投入到了數(shù)據(jù)庫的應(yīng)用、運(yùn)維、設(shè)計(jì)、架構(gòu)、治理等相關(guān)工作中。在多年的工作和授課中,筆者還發(fā)現(xiàn),即便是有多年工作經(jīng)驗(yàn)的DBA也仍然對(duì)數(shù)據(jù)庫技術(shù)有很多誤解和錯(cuò)誤的認(rèn)知,很多基于數(shù)據(jù)庫技術(shù)的問題和教訓(xùn)反反復(fù)復(fù)地出現(xiàn),而且這些問題在全國(guó)范圍內(nèi)也具有很強(qiáng)的共性。
因此,筆者決定撰寫一本介紹數(shù)據(jù)庫管理與運(yùn)維、數(shù)據(jù)架構(gòu)以及數(shù)據(jù)庫開發(fā)技巧的書籍來為廣大DBA解惑,讓開發(fā)人員知道如何使用數(shù)據(jù)庫,讓DBA知道如何指導(dǎo)開發(fā)人員更好地進(jìn)行應(yīng)用的設(shè)計(jì)。希望開發(fā)人員和DBA都明白數(shù)據(jù)才是架構(gòu)的中心。具體來說,筆者希望這本書起到以下作用。
分享經(jīng)驗(yàn):筆者和筆者帶領(lǐng)的團(tuán)隊(duì)在實(shí)踐中積累了大量的經(jīng)驗(yàn)和實(shí)踐方法,這對(duì)于企業(yè)數(shù)據(jù)庫的開發(fā)、運(yùn)維、設(shè)計(jì)、架構(gòu)十分有價(jià)值。我們通過本書把這些經(jīng)驗(yàn)和方法加以總結(jié),供廣大DBA和開發(fā)人員參考,幫助他們更好地發(fā)揮出數(shù)據(jù)庫應(yīng)有的性能,解決或避免大部分在應(yīng)用開發(fā)層面出現(xiàn)的問題和故障,讓讀者少走一些彎路。
DBA重新定位:希望通過這本書,讓廣大DBA明確自己的職業(yè)規(guī)劃和定位,認(rèn)識(shí)想運(yùn)維好數(shù)據(jù)庫就要從幕后走到臺(tái)前,不是單純地去應(yīng)對(duì)需求,而是指導(dǎo)開發(fā)人員編寫好的SQL,一方面提升工作效率,另一方面提升自身價(jià)值。從運(yùn)維小工成長(zhǎng)為更具價(jià)值的架構(gòu)師。
降低企業(yè)IT成本:本書分享的經(jīng)驗(yàn)、實(shí)施方法論和案例,可以為廣大企業(yè)提供非常有價(jià)值的借鑒。希望通過這本書,幫助廣大企業(yè)降低數(shù)據(jù)庫的故障率,提升系統(tǒng)的穩(wěn)定性。通過選擇合適的數(shù)據(jù)架構(gòu),避免因?yàn)閿?shù)據(jù)庫導(dǎo)致的架構(gòu)復(fù)雜而產(chǎn)生的高昂的IT成本。
開發(fā)人員能力提升:希望通過本書給開發(fā)崗位的讀者一些思路,不再做CRUD工程師,而是成為可以集設(shè)計(jì)和開發(fā)于一身、從事企業(yè)智能化應(yīng)用建設(shè)和咨詢的專家,更好地幫助企業(yè)實(shí)現(xiàn)數(shù)字化轉(zhuǎn)型和智能化應(yīng)用的建設(shè)。
構(gòu)建生態(tài)圈:我們希望通過這本書可以廣結(jié)朋友,無論是DBA、開發(fā)者,還是從事企業(yè)數(shù)字化建設(shè)的朋友。希望廣大讀者朋友可以通過這本書加入到DBA交流群中(掃描封面勒口二維碼加入),能夠相互學(xué)習(xí)、相互啟發(fā)、共同進(jìn)步。
本書的內(nèi)容
本書內(nèi)容具體介紹如下。
第 1 章 漫談數(shù)據(jù)庫。介紹了數(shù)據(jù)庫的概念和數(shù)據(jù)庫的分類,通過本章,讀者將了解到主流的數(shù)據(jù)庫種類以及數(shù)據(jù)庫技術(shù)的發(fā)展趨勢(shì),包括大數(shù)據(jù)、區(qū)塊鏈這些數(shù)據(jù)庫技術(shù)棧和DBA與數(shù)據(jù)庫的關(guān)系。
第 2 章 如何提升數(shù)據(jù)庫性能。介紹數(shù)據(jù)庫性能優(yōu)化技術(shù),并對(duì)不同類型的索引進(jìn)行了分類和介紹,還介紹了從優(yōu)化需求和設(shè)計(jì)兩個(gè)方面來提升數(shù)據(jù)庫性能的具體案例。
第 3 章 如何運(yùn)維好數(shù)據(jù)庫。介紹數(shù)據(jù)庫的主要故障類型和現(xiàn)象,列舉了十幾種各式各樣的數(shù)據(jù)庫故障案例及故障原因分析。
第 4 章 如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)。介紹了數(shù)據(jù)庫選型、數(shù)據(jù)庫架構(gòu)設(shè)計(jì)以及數(shù)據(jù)庫分開與合并的優(yōu)缺點(diǎn)。
第 5 章 如何做好數(shù)據(jù)庫之間的數(shù)據(jù)同步。介紹了數(shù)據(jù)庫同步的各種場(chǎng)景和技術(shù)棧。其中有同構(gòu)數(shù)據(jù)庫的同步,也有異構(gòu)數(shù)據(jù)庫之間的同步。尤其是OGG的微服務(wù)版的實(shí)踐,包括官方文檔中沒有全面覆蓋(或者疏漏)的知識(shí)點(diǎn)。
第 6 章 認(rèn)識(shí)HTAP技術(shù)。介紹了HTAP技術(shù)架構(gòu)的原理以及對(duì)中小企業(yè)的意義,結(jié)合國(guó)內(nèi)大多數(shù)企業(yè)現(xiàn)狀,HTAP技術(shù)是去除Hadoop技術(shù)棧的最佳實(shí)踐,可以使企業(yè)在滿足業(yè)務(wù)的前提下降低成本。
第 7 章 認(rèn)識(shí)數(shù)據(jù)庫的功能原理。介紹了數(shù)據(jù)庫優(yōu)化器和執(zhí)行器的一些底層原理。有助于讀者了解數(shù)據(jù)庫的運(yùn)行機(jī)制。
第 8 章 認(rèn)識(shí)數(shù)據(jù)庫中的數(shù)學(xué)(邏輯與算法)。介紹了數(shù)據(jù)庫優(yōu)化中涉及的一些邏輯和算法的知識(shí)。從邏輯和算法上切入,讓讀者明白優(yōu)化的核心是邏輯和算法。
第 9 章 DBA的日常:數(shù)據(jù)庫管理及開發(fā)的最佳實(shí)踐。集中介紹了若干筆者在工作中總結(jié)積累的數(shù)據(jù)庫管理及應(yīng)用開發(fā)的實(shí)踐案例,示范性和啟發(fā)性很強(qiáng),通過這些案例可以解決讀者在數(shù)據(jù)庫開發(fā)、運(yùn)維、構(gòu)建上的許多問題。
除以上內(nèi)容之外,本書還有附錄1篇:DBA雜談,分享了包括DBA的職業(yè)規(guī)劃以及筆者總結(jié)的SQL開發(fā)規(guī)范等的六個(gè)話題。本書另將部分限于篇幅沒有在正文中體現(xiàn)的內(nèi)容以在線的擴(kuò)展閱讀文檔加以呈現(xiàn),主要內(nèi)容包括介紹各類型數(shù)據(jù)庫的應(yīng)用場(chǎng)景、若干提升數(shù)據(jù)庫性能的實(shí)踐案例。讀者可以通過掃描二維碼訪問筆者的微信公眾號(hào)閱讀這部分內(nèi)容。
本書的價(jià)值創(chuàng)新
筆者認(rèn)為,本書分享的眾多實(shí)踐案例是最具價(jià)值的內(nèi)容。這些案例具備很強(qiáng)的啟發(fā)性,例如:從對(duì)SQL進(jìn)行優(yōu)化、提升數(shù)據(jù)庫性能的案例中可以看出,即使不了解業(yè)務(wù),憑借基本的邏輯和算法也可以對(duì)數(shù)據(jù)庫進(jìn)行優(yōu)化,提升數(shù)據(jù)庫性能。對(duì)于數(shù)據(jù)庫設(shè)計(jì)的案例,可以引導(dǎo)讀者認(rèn)真思考應(yīng)該怎么做數(shù)據(jù)庫的架構(gòu)設(shè)計(jì),因?yàn)榱己玫募軜?gòu)設(shè)計(jì)所獲收益遠(yuǎn)大于對(duì)SQL本身優(yōu)化獲得的收益。在一些案例中強(qiáng)調(diào)了DBA應(yīng)當(dāng)認(rèn)真考慮如何控制需求、引導(dǎo)需求方提出合理的需求,而不是一味執(zhí)行,因?yàn)椴缓侠淼男枨蠡蛘呤菬o意義的需求帶來的問題是很多的,技術(shù)人員是可以指導(dǎo)業(yè)務(wù)方開展工作的。對(duì)于數(shù)據(jù)庫故障的案例則側(cè)重強(qiáng)調(diào)了分析解決問題的思路,如果讀者按照本書給出的思路去管理、運(yùn)維、設(shè)計(jì)數(shù)據(jù)庫,那么由應(yīng)用開發(fā)層面出現(xiàn)的問題,基本是可以得到控制的。
本書適合的讀者人群
本書適合對(duì)數(shù)據(jù)庫開發(fā)和運(yùn)維有一定興趣和基礎(chǔ)的讀者,包括但不限于以下人群:
-后端基于數(shù)據(jù)庫的Java開發(fā)人員。
-使用SQL語言從事數(shù)據(jù)分析的分析師。
-從事數(shù)據(jù)庫運(yùn)維的DBA。
-企業(yè)研發(fā)主管、企業(yè)運(yùn)維主管。
致謝
在完成本書的過程中,我獲得了許多支持和幫助。首先要感謝我的家人,他們?cè)谡麄(gè)寫作過程中一直給予我勇氣、支持和鼓勵(lì)。在寫作期間,我家中發(fā)生了很多事情,但家人們?nèi)匀蝗χС治胰ネ瓿蓵。沒有他們的支持和幫助,我不可能完成這本書。
我還要感謝本書的其他合作者,他們是:王明杰博士,現(xiàn)擔(dān)任歐冶云商物聯(lián)網(wǎng)技術(shù)首席師,負(fù)責(zé)撰寫本書物聯(lián)網(wǎng)場(chǎng)景和時(shí)序數(shù)據(jù)庫的相關(guān)內(nèi)容;宋希,現(xiàn)擔(dān)任歐冶云商資深算法工程師,負(fù)責(zé)撰寫本書的動(dòng)態(tài)規(guī)劃相關(guān)內(nèi)容;李歡,來自字節(jié)跳動(dòng),作為資深的移動(dòng)開發(fā)者,他撰寫了移動(dòng)端數(shù)據(jù)庫的相關(guān)內(nèi)容。唐政、馮元泊、唐永金三位同事幫助歸納整理了我的案例、文章和想法。感謝張博參與書中的配圖制作,還有朱盈易后期幫助筆者解決了一些配圖問題。幾位合作者貢獻(xiàn)良多,也在此表示感謝!
我還要感謝本書的策劃編輯王斌,他為我們提供了很多有益的建議,他的專業(yè)知識(shí)和經(jīng)驗(yàn)對(duì)我們來說是寶貴的。
由于筆者水平有限,書中難免出現(xiàn)錯(cuò)誤和不足之處,敬請(qǐng)廣大讀者批評(píng)指正。
薛曉剛
2024年6月24日
薛曉剛,現(xiàn)任歐冶云商股份有限公司數(shù)據(jù)庫首席師,曾服務(wù)于政府、公安、交通、安防、金融、支付等行業(yè)。擁有Oracle、MySQL、PostgreSQL、TiDB、OceanBase、達(dá)夢(mèng)等數(shù)據(jù)庫認(rèn)證,是Oracle ACE-Pro ( Database )、PostgreSQL ACE Partner、騰訊云TVP、阿里云MVP、TiDB MVA、墨天輪MVP;Oracle OCP認(rèn)證講師,MySQL OCP認(rèn)證講師;ITPUB論壇內(nèi)存數(shù)據(jù)庫版主、核心專家、金牌顧問。ITPUB培訓(xùn)專家百人團(tuán)成員,國(guó)內(nèi)數(shù)據(jù)庫風(fēng)云百人團(tuán)成員,OceanBase數(shù)據(jù)庫觀察團(tuán)團(tuán)長(zhǎng),TiDB布道師、布道師組委會(huì)會(huì)員。中國(guó)信息通信研究院創(chuàng)新實(shí)驗(yàn)室成員,開放原子開源基金會(huì)OpenTenBase工委會(huì)委員,機(jī)械工業(yè)出版社專家委員會(huì)委員。
王明杰,德國(guó)布倫瑞克工業(yè)大學(xué)工學(xué)博士,現(xiàn)任職于歐冶云商股份有限公司,擔(dān)任物聯(lián)網(wǎng)技術(shù)一級(jí)首席,致力于物聯(lián)感知、機(jī)器視覺、智能自動(dòng)化等新技術(shù)在鋼鐵行業(yè)供應(yīng)鏈體系中的應(yīng)用融合。負(fù)責(zé)編寫本書物聯(lián)網(wǎng)場(chǎng)景及時(shí)序數(shù)據(jù)庫的相關(guān)內(nèi)容。
宋希,波爾多大學(xué)數(shù)學(xué)系博士,現(xiàn)任職于歐冶云商股份有限公司,資深算法工程師,主持搭建綜合平臺(tái)智能推薦系統(tǒng),參與需求預(yù)測(cè)、用戶畫像、在線交易壓力測(cè)試等多個(gè)項(xiàng)目,獲得多項(xiàng)專利。負(fù)責(zé)編寫本書的動(dòng)態(tài)規(guī)劃的相關(guān)內(nèi)容。
李歡,現(xiàn)任職于字節(jié)跳動(dòng),作為移動(dòng)端音視頻開發(fā)工程師負(fù)責(zé)抖音直播連線架構(gòu)設(shè)計(jì),優(yōu)化抖音音視頻用戶體驗(yàn),提升直播連線的性能。負(fù)責(zé)本書移動(dòng)端數(shù)據(jù)庫部分相關(guān)內(nèi)容的編寫。
目錄
序言1
序言2
序言3
前言
第1章 漫談數(shù)據(jù)庫1
1.1 什么是數(shù)據(jù)庫2
1.2 數(shù)據(jù)庫發(fā)展史2
1.2.1 國(guó)外數(shù)據(jù)庫的歷史2
1.2.2 國(guó)內(nèi)數(shù)據(jù)庫的歷史4
1.3 數(shù)據(jù)庫的主要分類6
1.3.1 關(guān)系數(shù)據(jù)庫:傳統(tǒng)交易數(shù)據(jù)庫6
1.3.2 鍵值數(shù)據(jù)庫:基于KV鍵值對(duì)的內(nèi)存數(shù)據(jù)庫7
1.3.3 列式數(shù)據(jù)庫:列式存儲(chǔ)的分析型數(shù)據(jù)庫9
1.3.4 文檔型數(shù)據(jù)庫:松散型數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)庫10
1.3.5 圖數(shù)據(jù)庫:用于社交圖譜的數(shù)據(jù)庫11
1.3.6 時(shí)序數(shù)據(jù)庫:適用于物聯(lián)網(wǎng)場(chǎng)景的數(shù)據(jù)庫12
1.3.7 搜索引擎數(shù)據(jù)庫:全文索引的數(shù)據(jù)庫14
1.3.8 多模數(shù)據(jù)庫:具有多種數(shù)據(jù)庫模式的融合數(shù)據(jù)庫17
1.3.9 最容易忽視的數(shù)據(jù)庫移動(dòng)端數(shù)據(jù)庫19
1.4 數(shù)據(jù)庫應(yīng)用的發(fā)展趨勢(shì)22
1.4.1 國(guó)外數(shù)據(jù)庫應(yīng)用發(fā)展趨勢(shì)22
1.4.2 國(guó)內(nèi)數(shù)據(jù)庫應(yīng)用發(fā)展趨勢(shì)24
1.5 數(shù)據(jù)庫與新興數(shù)字技術(shù)30
1.5.1 數(shù)據(jù)庫與大數(shù)據(jù)技術(shù)30
1.5.2 數(shù)據(jù)庫的延伸:區(qū)塊鏈、物聯(lián)網(wǎng)32
1.6 與數(shù)據(jù)庫長(zhǎng)相廝守的DBA33
1.6.1 DBA的定義與內(nèi)涵33
1.6.2 DBA的工作職責(zé)34
1.6.3 DBA需要具備的能力35
1.6.4 DBA的價(jià)值35
1.6.5 DBA是可以做一輩子的職業(yè)36
第2章 如何提升數(shù)據(jù)庫性能38
2.1 通過索引提升性能39
2.1.1 索引的概念及原理39
2.1.2 索引的種類44
2.1.3 規(guī)避索引使用的誤區(qū)68
2.1.4 通過索引實(shí)現(xiàn)海量數(shù)據(jù)中的高效查詢70
2.1.5 自動(dòng)化索引:數(shù)據(jù)庫自治的趨勢(shì)71
2.2 通過SQL優(yōu)化提升性能78
2.2.1 SQL優(yōu)化實(shí)現(xiàn)高速執(zhí)行任務(wù)79
2.2.2 慎用分頁有效提升性能86
2.2.3 從認(rèn)知上杜絕低效SQL89
2.3 避免數(shù)據(jù)庫對(duì)象設(shè)計(jì)失誤91
2.3.1 避免不必要的多表關(guān)聯(lián)導(dǎo)致的低效查詢91
2.3.2 避免動(dòng)態(tài)計(jì)算結(jié)果沒有單獨(dú)存儲(chǔ)導(dǎo)致的低效查詢93
2.3.3 避免沒有明確需求查詢條件導(dǎo)致的低效查詢97
2.3.4 避免過度分表98
2.4 從識(shí)別需求的合理性提升性能101
2.4.1 拒絕無效需求101
2.4.2 正確理解開發(fā)需求104
2.4.3 拒絕不合理的需求106
2.4.4 引導(dǎo)業(yè)務(wù)改善需求107
2.5 減少IO操作提升數(shù)據(jù)庫性能108
2.5.1 正確認(rèn)識(shí)數(shù)據(jù)庫的性能108
2.5.2 減少IO交互批量寫入數(shù)據(jù)(MySQL)110
2.5.3 減少IO交互批量寫入數(shù)據(jù)(Oracle)122
2.5.4 減少IO交互批量寫入數(shù)據(jù)(PostgreSQL)123
2.5.5 精簡(jiǎn)架構(gòu)127
第3章 如何運(yùn)維好數(shù)據(jù)庫130
3.1 運(yùn)維好數(shù)據(jù)庫的關(guān)鍵:處理故障131
3.1.1 常見的數(shù)據(jù)庫故障類型131
3.1.2 數(shù)據(jù)庫故障的危害132
3.2 分析處理數(shù)據(jù)庫故障的關(guān)鍵點(diǎn)133
3.2.1 分析數(shù)據(jù)庫故障的主要原因SQL133
3.2.2 分析SQL的主要問題處理速度慢134
3.2.3 分析數(shù)據(jù)庫參數(shù)對(duì)數(shù)據(jù)庫的影響134
3.2.4 分析硬件短板帶來的問題IO吞吐能力與CPU計(jì)算能力135
3.3 數(shù)據(jù)庫故障處理的典型案例分析138
3.3.1 一次Elasticsearch誤刪除的故障分析139
3.3.2 一次配置文件丟失導(dǎo)致的MySQL數(shù)據(jù)庫故障分析141
3.3.3 一次In-Memory丟失引起的故障分析146
3.3.4 一次疑似分區(qū)查詢異常的故障分析150
3.3.5 一次數(shù)據(jù)庫歸檔導(dǎo)致的故障分析159
3.3.6 一次數(shù)據(jù)庫binlog寫入失敗的故障分析163
3.3.7 一次兩表關(guān)聯(lián)導(dǎo)致的故障分析165
3.3.8 數(shù)據(jù)庫連接數(shù)與連接復(fù)用不當(dāng)?shù)墓收戏治?66
3.3.9 一次數(shù)據(jù)庫CPU使用率100%的故障分析168
3.3.10 一次數(shù)據(jù)庫索引不當(dāng)引起的故障分析169
3.3.11 一次數(shù)據(jù)庫主從延遲過大的故障分析172
3.3.12 一次數(shù)據(jù)庫主從不一致的故障分析174
3.3.13 一次Redis數(shù)據(jù)庫無法啟動(dòng)的故障分析182
3.3.14 一次MySQL數(shù)據(jù)庫數(shù)據(jù)類型不恰當(dāng)導(dǎo)致的故障183
3.3.15 一次數(shù)據(jù)庫全表查詢的優(yōu)化187
第4章 如何進(jìn)行數(shù)據(jù)庫設(shè)計(jì)197
4.1 數(shù)據(jù)庫都有哪些架構(gòu)198
4.1.1 集中式架構(gòu)198
4.1.2 分布式架構(gòu)200
4.1.3 數(shù)據(jù)庫內(nèi)部的體系架構(gòu)201
4.1.4 煙囪式的數(shù)據(jù)庫架構(gòu)201
4.1.5 獨(dú)立業(yè)務(wù)線的數(shù)據(jù)庫架構(gòu)202
4.2 根據(jù)實(shí)際場(chǎng)景選擇數(shù)據(jù)庫架構(gòu)203
4.3 五個(gè)維度談數(shù)據(jù)庫選型203
4.3.1 從業(yè)務(wù)場(chǎng)景特征維度204
4.3.2 從數(shù)據(jù)規(guī)模大小維度204
4.3.3 從用戶自身開發(fā)團(tuán)隊(duì)能力維度205
4.3.4 從用戶自身運(yùn)維團(tuán)隊(duì)能力維度205
4.3.5 從公司管理能力維度206
4.4 數(shù)據(jù)庫拆分的利與弊206
4.4.1 數(shù)據(jù)庫拆分的背景207
4.4.2 數(shù)據(jù)庫拆分的三大問題:一致性、數(shù)據(jù)關(guān)聯(lián)、數(shù)據(jù)同步208
4.4.3 分表帶來的問題:一致性、聚合、排序、擴(kuò)縮容208
4.5 如何看待數(shù)據(jù)庫的合并210
4.5.1 為何要做數(shù)據(jù)庫合并210
4.5.2 數(shù)據(jù)庫合并的意義:降成本、提升穩(wěn)定性211
4.5.3 數(shù)據(jù)庫合并帶來的問題:雞蛋放在一個(gè)籃子里211
4.5.4 數(shù)據(jù)庫合并的前提:高質(zhì)量SQL、硬件的進(jìn)步、穩(wěn)定的基礎(chǔ)環(huán)境212
4.6 CAP理論與分布式數(shù)據(jù)庫212
4.6.1 CAP理論概述213
4.6.2 CAP理論的延展213
4.6.3 分庫分表不是分布式數(shù)據(jù)庫214
4.7 如何看待數(shù)據(jù)庫與中間件215
4.7.1 數(shù)據(jù)庫與中間件:上下游的難兄難弟215
4.7.2 中間件內(nèi)存溢出的原因:源頭還是數(shù)據(jù)庫215
4.7.3 適當(dāng)減少數(shù)據(jù)庫與中間件的數(shù)量:避免不必要的故障節(jié)點(diǎn)216
第5章 如何做好數(shù)據(jù)庫之間的數(shù)據(jù)同步217
5.1 數(shù)據(jù)同步的作用218
5.1.1 實(shí)現(xiàn)數(shù)據(jù)傳輸218
5.1.2 實(shí)現(xiàn)數(shù)據(jù)匯聚218
5.1.3 實(shí)現(xiàn)數(shù)據(jù)遷移219
5.2 數(shù)據(jù)庫同步的分類219
5.2.1 同構(gòu)數(shù)據(jù)庫的同步219
5.2.2 異構(gòu)數(shù)據(jù)庫的同步219
5.2.3 數(shù)據(jù)庫到消息隊(duì)列的同步219
5.2.4 數(shù)據(jù)庫到Hadoop的數(shù)據(jù)同步219
5.3 同構(gòu)數(shù)據(jù)庫數(shù)據(jù)同步的示例220
5.3.1 使用dblink實(shí)現(xiàn)Oracle數(shù)據(jù)庫之間的數(shù)據(jù)同步220
5.3.2 使用物化視圖實(shí)現(xiàn)遠(yuǎn)程Oracle數(shù)據(jù)庫之間的數(shù)據(jù)同步226
5.3.3 使用插件實(shí)現(xiàn)MySQL數(shù)據(jù)庫之間的數(shù)據(jù)同步231
5.3.4 利用數(shù)據(jù)同步實(shí)現(xiàn)MySQL的版本升級(jí)234
5.3.5 采用多源復(fù)制的功能實(shí)現(xiàn)MySQL數(shù)據(jù)庫之間的數(shù)據(jù)同步239
5.3.6 采用主從模式實(shí)現(xiàn)PostgreSQL主從數(shù)據(jù)同步242
5.4 異構(gòu)數(shù)據(jù)庫同步的實(shí)例基于OGG248
5.4.1 CDC簡(jiǎn)介248
5.4.2 OGG概述249
5.4.3 OGG微服務(wù)版的安裝部署249
5.4.4 使用OGG for Oracle實(shí)現(xiàn)Oracle數(shù)據(jù)庫之間的數(shù)據(jù)同步251
5.4.5 使用OGG for MySQL實(shí)現(xiàn)MySQL與異構(gòu)數(shù)據(jù)庫的同步279
5.4.6 使用OGG for BigData實(shí)現(xiàn)大數(shù)據(jù)組件與異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)同步284
第6章 認(rèn)識(shí)HTAP技術(shù)294
6.1 HTAP的概念及其價(jià)值295
6.1.1 HTAP:混合事物/分析處理295
6.1.2 HTAP的價(jià)值295
6.2 HTAP的幾種實(shí)現(xiàn)方式297
6.2.1 垂直方向的實(shí)現(xiàn):以O(shè)racle數(shù)據(jù)庫為例297
6.2.2 水平方向的實(shí)現(xiàn):以MySQL、TiDB數(shù)據(jù)庫為例298
6.2.3 其他類型數(shù)據(jù)庫的實(shí)現(xiàn)方式298
第7章 認(rèn)識(shí)數(shù)據(jù)庫的功能原理300
7.1 優(yōu)化器基于統(tǒng)計(jì)學(xué)原理301
7.2 數(shù)據(jù)庫的查詢火山模型316
7.3 數(shù)據(jù)庫AI向量化319
7.4 編譯執(zhí)行323
第8章 認(rèn)識(shí)數(shù)據(jù)庫中的數(shù)學(xué)(邏輯與算法)326
8.1 數(shù)據(jù)庫中的典型邏輯與算法327
8.1.1 從斐波那契數(shù)列到數(shù)據(jù)分析327
8.1.2 增加數(shù)據(jù)維度處理減少關(guān)聯(lián)332
8.1.3 多表關(guān)聯(lián)算法一對(duì)多與多對(duì)多336
8.1.4 排除處理算法笛卡兒積341
8.1.5 函數(shù)算法對(duì)SQL的影響348
8.2 動(dòng)態(tài)規(guī)劃法在數(shù)據(jù)庫中的應(yīng)用351
8.2.1 動(dòng)態(tài)規(guī)劃原理1:爬樓梯351
8.2.2 動(dòng)態(tài)規(guī)劃原理2:背包問題355
8.2.3 動(dòng)態(tài)規(guī)劃的五部曲361
8.3 數(shù)據(jù)庫開發(fā)中的邏輯思維362
8.3.1 元數(shù)據(jù)的空與非空362
8.3.2 優(yōu)化器處理極值和極限:加速查詢速度369
8.3.3 并發(fā)處理熱點(diǎn)的邏輯:避免鎖371
8.3.4 減庫存的邏輯:從設(shè)計(jì)出發(fā)防止超賣373
第9章 DBA的日常:數(shù)據(jù)庫管理及開發(fā)的最佳實(shí)踐375
9.1 七個(gè)針對(duì)數(shù)據(jù)庫特性的最佳實(shí)踐376
9.1.1 Oracle的DML重定向376
9.1.2 Oracle的資源隔離381
9.1.3 MySQL的延遲復(fù)制挽救誤刪除389
9.1.4 PostgreSQL的延遲復(fù)制395
9.1.5 數(shù)據(jù)庫對(duì)于磁盤IO吞吐的要求402
9.2 面向執(zhí)行器和優(yōu)化器的最佳實(shí)踐403
9.2.1 主流數(shù)據(jù)庫的事務(wù)異常處理機(jī)制對(duì)比(MySQL、PostgreSQL、Oracle)403
9.2.2 MySQL和達(dá)夢(mèng)兩個(gè)數(shù)據(jù)庫優(yōu)化器的對(duì)比406
9.2.3 SQL語句的解析過程分析407
9.2.4 優(yōu)化器的多表關(guān)聯(lián)411
9.2.5 SQL使用in進(jìn)行子查詢412
9.2.6 數(shù)據(jù)歸檔和數(shù)據(jù)遷移419
9.3 數(shù)據(jù)庫的復(fù)制(克隆)與高可用受控切換的最佳實(shí)踐424
9.3.1 Oracle的PDB數(shù)據(jù)庫克隆425
9.3.2 MySQL克隆的關(guān)鍵點(diǎn)428
9.3.3 MySQL的MGR架構(gòu)以及受控切換431
9.3.4 PostgreSQL的高可用切換434
9.3.5 Redis的高可用切換440
9.4 三個(gè)SQL編寫的最佳實(shí)踐445
9.4.1 關(guān)于MyBatis開發(fā)框架使用綁定變量的實(shí)踐445
9.4.2 使用exists的SQL語句的改寫451
9.4.3 設(shè)計(jì)上出發(fā)減少SQL的標(biāo)量子查詢458
9.5 時(shí)序數(shù)據(jù)庫使用的最佳實(shí)踐463
9.5.1 時(shí)序數(shù)據(jù)庫的數(shù)據(jù)庫表設(shè)計(jì)463
9.5.2 時(shí)序數(shù)據(jù)庫的數(shù)據(jù)分析466
附錄 DBA雜談468