




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 新硬件環(huán)境下的數(shù)據(jù)庫系統(tǒng)發(fā)展趨勢本次分享大綱:現(xiàn)代處理器及新型存儲的發(fā)展現(xiàn)代處理器下的數(shù)據(jù)庫技術(shù)面向新型存儲的數(shù)據(jù)庫系統(tǒng)總結(jié)現(xiàn)代處理器及新型存儲的發(fā)展1、現(xiàn)代處理器先給大家介紹一下現(xiàn)代處理器及新型存儲的發(fā)展。大概從2005年開始,CPU的生產(chǎn)商就不再追求CPU的頻率而轉(zhuǎn)向多核技術(shù)研究,這里一個很重要的原因就是能耗和制造工藝上的問題,使得他們不能再單純地追求提升頻率。在當(dāng)前普通的服務(wù)器上,配備幾十個處理核心的處理器已相當(dāng)常見,眾核的概念也開始流行起來。那什么是眾核?眾核,是在英文上有一個專門的詞,叫做many-core,跟單核是對應(yīng)的,主要是指集成了成百上千個處理核心的處理器。多核處理器大家可
2、能很熟悉了,但大家有沒注意到memory-wall效應(yīng)這個現(xiàn)象呢?以前CPU訪問一個內(nèi)存,大概只要一個時間周期的時間,現(xiàn)在需要上百個時間周期,訪問內(nèi)存成了一個比較昂貴的操作,特別是在如今大內(nèi)存和內(nèi)存計(jì)算這個環(huán)境下,memory-wall的效應(yīng)更加嚴(yán)重,所以怎么樣去克服,使得程序具有局部性,成為了最重要的一件事情,即如何克服memory wall的問題。2、新型存儲設(shè)備大家是否聽過非易失性內(nèi)存?英特爾剛剛推出的3D XPoint技術(shù),就屬于這類范疇的技術(shù),即內(nèi)存掉電了以后,數(shù)據(jù)不會丟失。它兼具磁盤和內(nèi)存的特性,結(jié)合了兩者的優(yōu)點(diǎn),也就是具有磁盤的持久存儲特性和內(nèi)存的快速訪問,主要特點(diǎn)是非低失、低延
3、時、大容量,以及讀寫不對稱。大家可以想象一下,有了這種硬件以后,我們系統(tǒng)設(shè)計(jì)者需要考慮的東西就不再是所謂的I/O的問題了,而是可以專注地把注意力放在高性能計(jì)算上,通俗地講就是關(guān)注系統(tǒng)的擴(kuò)展性問題。原理介紹剛才所說的新型存儲非易失性內(nèi)存主要有以下四種實(shí)現(xiàn),其中最為成熟、最具市場前景的就是這個稱之為相變存儲的技術(shù)。相變存儲器:材料可以在結(jié)晶狀態(tài)與非結(jié)晶狀態(tài)轉(zhuǎn)變自旋磁矩:改變兩層磁性材料磁矩方向鐵電材料:材料所形成的電荷高低,二元狀態(tài)憶阻器:是一種有記憶功能的非線性電阻根據(jù)國外工程師的逆向工程,英特爾的3D XPoint(傲騰),采用的就是這種技術(shù)。它的技術(shù)特點(diǎn)是利用相變材料,具有結(jié)晶和非結(jié)晶兩種狀
4、態(tài),這兩種狀態(tài)對應(yīng)著低電阻和高電阻,對應(yīng)著1和0。相比存儲器的單元結(jié)構(gòu)主要有以下部件組成:雙層的導(dǎo)熱片,然后加熱絕緣體,以及相變材質(zhì)。通過加熱器,對這個相變材質(zhì)進(jìn)行加熱,它就會呈現(xiàn)結(jié)晶和非結(jié)晶兩種狀態(tài)。其它的技術(shù)實(shí)現(xiàn),有興趣可私下討論,這里就不多講了。相關(guān)參數(shù)主要還是PCM的技術(shù),是目前最為重要的一種技術(shù)。我們來看一下它的參數(shù),這里主要是一些相關(guān)文獻(xiàn)上摘取的數(shù)據(jù),其中我們比較關(guān)注的是讀寫延遲、帶寬、壽命,以及密度(容量)。從表格中可以看到,PCM和Flash相比,它的讀寫延遲要低兩個數(shù)量級,而它的壽命要高兩個數(shù)量級,并且容量的大小和Flash差不多,而跟內(nèi)存相比,它的讀延遲已經(jīng)是很接近了,但這
5、個寫延遲和帶寬上還有差距,所以目前而言,PCM代替內(nèi)存是不可能的事情,而在一段時間內(nèi)這兩種存儲是會共同存在于計(jì)算機(jī)體系結(jié)構(gòu)中。另外一個有意思的現(xiàn)象就是PCM的密度,它的容量要比內(nèi)存大2到4倍,而且在空閑功耗,即系統(tǒng)空閑的時候,這個功耗是內(nèi)存的1%。因?yàn)閮?nèi)存要不斷地去刷新,維護(hù)內(nèi)存單元里面的數(shù)據(jù),所以這是一個很耀眼的特性,特別是對于數(shù)據(jù)中心而言。DBMS的設(shè)計(jì)我們都知道系統(tǒng)的底層硬件決定著上層軟件的設(shè)計(jì),現(xiàn)在數(shù)據(jù)庫系統(tǒng)最主要的矛盾是飛速發(fā)展的硬件與始于上世紀(jì)70年代的數(shù)據(jù)庫系統(tǒng)的陳舊設(shè)計(jì)思想。眾所周知,磁盤I/O是那個時期系統(tǒng)性能的主要瓶頸,而該系統(tǒng)的設(shè)計(jì)者主要考慮的是自己怎樣把這個系統(tǒng)設(shè)計(jì)得更
6、好,以規(guī)避這個磁盤I/O的問題。在我們的數(shù)據(jù)庫系統(tǒng)里面,同樣隨處可見這種設(shè)計(jì)思想。針對這種磁盤時代而提出的算法思想,在大并發(fā)下將會呈現(xiàn)相當(dāng)嚴(yán)重的性能問題。這個研究是在2010年卡內(nèi)基梅隆大學(xué)的數(shù)據(jù)庫研究小組,對幾個開源數(shù)據(jù)庫的性能測試結(jié)果。可以看到,在多核處理器下這些數(shù)據(jù)庫系統(tǒng)的性能、擴(kuò)展性都不能夠令人滿意。這篇論文拉開了數(shù)據(jù)庫系統(tǒng)多核優(yōu)化的序幕,特別是開源軟件,例如MySQL、PG在該時期就開始重視多核擴(kuò)展性的問題,他們意識到原來在多核環(huán)境下,系統(tǒng)會有如此表現(xiàn)。時間都去哪兒了呢?那么,數(shù)據(jù)庫系統(tǒng)的事務(wù)執(zhí)行時間都耗費(fèi)到哪去了?下面是麻省理工大學(xué)的研究結(jié)論數(shù)據(jù)庫系統(tǒng)大部分的時間都耗費(fèi)在緩存池管理
7、、日志子系統(tǒng)上,只有12%左右的時間是耗費(fèi)在真正有用的工作上。這些模塊當(dāng)中存在著大量的臨界區(qū),這個臨界區(qū)設(shè)計(jì)得相當(dāng)粗糙,下面我們可通過分析一個代碼片段來進(jìn)行解析。在系統(tǒng)的設(shè)計(jì)上,經(jīng)常是一把大鎖,不假思索地加上去保護(hù)臨界區(qū),幾百行的代碼。正如剛才看到的,在這種情況下,當(dāng)系統(tǒng)并發(fā)度起來時,數(shù)據(jù)庫系統(tǒng)的性能是相當(dāng)差的。現(xiàn)代處理器下的數(shù)據(jù)庫技術(shù)James Gray大家是否聽過呢?在現(xiàn)在數(shù)據(jù)庫系統(tǒng)里,跟事務(wù)相關(guān)的技術(shù)基本都是James Gray提出來的。但可惜的是,在2007年,他駕著一艘帆船出海,然后消失了。美國出動了海軍陸戰(zhàn)隊(duì)都沒有找到他。作為一個神奇人物,他憑借著對數(shù)據(jù)庫事務(wù)的突出貢獻(xiàn)獲得圖靈獎。
8、為了克服剛才所謂的內(nèi)存墻技術(shù),James Gray曾說過這么一句話:RAM Locality Is King,就是說數(shù)據(jù)和程序行為的局部性才是克服CPU和內(nèi)存的速度不匹配的終極武器。RAM-Locality設(shè)計(jì)原則數(shù)據(jù)庫里面主要采用以下幾種技術(shù)優(yōu)化性能,一種是列存儲技術(shù)。列存儲技術(shù),主要用在OLAP,像MySQL、PG等OLTP型數(shù)據(jù)庫都是用行存儲技術(shù)。為什么要用列存儲技術(shù)呢?是因?yàn)檫M(jìn)行數(shù)據(jù)分析的時候,經(jīng)常會出現(xiàn)寬表或有幾百個字段的表,但通常只需要訪問表中的某一些字段,比如要訪問銷售字段,對銷售字段進(jìn)行累加,做一個聚集操作。采用列存儲,可以更好地優(yōu)化高速緩存的使用率,減少cache miss,
9、克服內(nèi)存墻問題。另外就是設(shè)計(jì)高速緩存友好的數(shù)據(jù)結(jié)構(gòu)或算法。像現(xiàn)在的數(shù)據(jù)庫采用一次一元組的查詢處理方式對程序局部性很不友好。什么叫一次一元組呢?數(shù)據(jù)庫系統(tǒng)的查詢語句,都是翻譯成操作樹。在樹的節(jié)點(diǎn)之間,操作符通過get_next函數(shù)驅(qū)動子節(jié)點(diǎn)獲取一條元組,遞歸調(diào)用下去,葉子節(jié)點(diǎn)將數(shù)據(jù)返回。函數(shù)的頻繁調(diào)用會產(chǎn)生嚴(yán)重的cache miss問題,所以現(xiàn)在新型的OLAP系統(tǒng)都是采用向量化查詢執(zhí)行引擎,上層操作符不再是一條一條數(shù)據(jù)地處理了,而是一批一批數(shù)據(jù)處理,減少函數(shù)調(diào)用的開銷和上下文的切換以最大化數(shù)據(jù)和程序指令的局部性。此外,hash join也針對cache大小將hash table進(jìn)行劃分以增強(qiáng)數(shù)據(jù)
10、與指令的數(shù)據(jù)性減少cache miss。一個例子這是針對Cache友好而設(shè)計(jì)算法的例子。在PG 9.5之前,系統(tǒng)判斷事務(wù)活躍性或獲取系統(tǒng)快照時,要用到事務(wù)的起始時間、事務(wù)ID等。這些字段都放在PGPROC這個結(jié)構(gòu)體里,這個結(jié)構(gòu)體有25個成員,但做可見性判斷時,只需要用到幾個成員就夠了。因此采用這種設(shè)計(jì)系統(tǒng)會把其它無關(guān)字段讀入,污染其它c(diǎn)ache line,造成嚴(yán)重的cache miss以及Cache浪費(fèi)問題。所以后面他們就把用于可見性判斷等經(jīng)常訪問的字段放在另一個結(jié)構(gòu)體里面叫做PGXACT。打了這個補(bǔ)丁之后,在大并發(fā)下這個性能收益是相當(dāng)客觀的,性能數(shù)據(jù)如圖中右上紅色數(shù)據(jù)所示。因此,針對Memo
11、ry Wall這個問題,設(shè)計(jì)cache友好的數(shù)據(jù)結(jié)構(gòu)與算法是一個很奏效的方法。避免熱點(diǎn)與簡化臨界區(qū)針對多核的問題,我們還要避免熱點(diǎn)的問題,簡化臨界區(qū)。就像我們經(jīng)??吹降?,并發(fā)一大,系統(tǒng)性能就掉了下來。這是微軟的內(nèi)存數(shù)據(jù)庫Hekaton的一個實(shí)驗(yàn)結(jié)果。截取了事務(wù)在提交時的一個時間戳。這個全局的原子操作都會導(dǎo)致這個性能的問題。但針對MySQL、PG這兩種數(shù)據(jù)庫,性能問題還遠(yuǎn)遠(yuǎn)輪不到像類似于這種原子操作來引發(fā)。這就是我剛才所提到的問題,我們的磁盤數(shù)據(jù)庫的設(shè)計(jì)原則是優(yōu)化磁盤IO。事務(wù)在提交時,不需要刷臟,以避免隨機(jī)IO。我們有一個專門的術(shù)語,叫做No force,也就是說事務(wù)提交時,不用去刷臟頁,但系
12、統(tǒng)會把日志先刷下去。它這種集中式的設(shè)計(jì),很容易導(dǎo)致性能的問題。針對更新密集型的工作負(fù)載,這個模塊的性能問題更加突出。傳統(tǒng)的先寫日志的算法(Write-ahead Logging),PG也好、MySQL也好,一般分為三個步驟,首先獲取一把大鎖,保護(hù)shared Log Buffer的這個數(shù)據(jù)結(jié)構(gòu);然后把日志記錄拷貝到相應(yīng)的日志緩沖區(qū);最后釋放這把鎖。這是最傳統(tǒng)的做法。我們現(xiàn)在也跟社區(qū)里面去探討了是否可以廢棄集中式設(shè)計(jì),采用分布式日志的問題。就是不采用一個日志管理器,轉(zhuǎn)而使用多個Log Buffer同時把日志序列號改成邏輯時間戳。在PG9.4版本以前,就采用剛才那么一個粗放的形式,加一把大鎖,然后
13、臨界區(qū)里面進(jìn)行搗鼓,例如長度計(jì)算、拷貝日志、一些邊界檢查等。這個臨界區(qū)的代碼大概有300行左右。但后來他們發(fā)現(xiàn)這個模塊的性能問題實(shí)在太嚴(yán)重了。解決的方法是把日志文件抽象成線性長度,寫入日志時把位置預(yù)留出來。位置確定以后就把鎖放掉,因?yàn)橄到y(tǒng)知道往哪里去寫入數(shù)據(jù),根本就不需要把日志拷過去再放鎖。并且事務(wù)之間可以并行地去拷貝日志。優(yōu)化以后,性能提升了大概20%到30%左右,PG社區(qū)里面有相應(yīng)的測試報告。注:更多分布式日志可讀我在社群發(fā)表過的另一篇文章 HYPERLINK /s?_biz=MzI4NTA1MDEwNg=&mid=2650763636&idx=1&sn=4661fff7910856eac
14、075ff22c86b231c&chksm=f3f9c4e1c48e4df7eaa8f9374cdb1fe1ce25fbafd4283c4985fbad23ee21e12075b3b261f20b&scene=21 l wechat_redirect t _blank 用分布式日志優(yōu)化單機(jī)數(shù)據(jù)庫系統(tǒng)將成未來標(biāo)配?鎖管理器(鎖申請)另外一種是數(shù)據(jù)庫里邏輯鎖的問題。數(shù)據(jù)庫里面的加鎖,是通過一個哈希表實(shí)現(xiàn)的,表里面的維護(hù)有很多鎖的信息。這個鎖其實(shí)就是一個標(biāo)記,例如要加一個行鎖,就把這個鎖的Table ID、Row ID拿過來作為key,然后哈希到這個鎖表里。同時標(biāo)記這個鎖屬于哪種類型,是共享鎖還是排
15、他鎖等。但在大并發(fā)或沖突比較嚴(yán)重的情況下,這個鎖表是會引發(fā)問題的。因?yàn)樗且粋€共享的數(shù)據(jù)結(jié)構(gòu),很多事務(wù)都要跟鎖表打交道,頻繁地加鎖以及釋放鎖引發(fā)熱點(diǎn)問題。PG 9.2采用了繼承鎖技術(shù),把共享表級鎖緩存在本地,然后在事務(wù)之間傳遞,不用把共享表鎖歸還給鎖管理器,減少跟共享的數(shù)據(jù)結(jié)構(gòu)的交互,提高系統(tǒng)的并發(fā)性。面向新型存儲的數(shù)據(jù)庫系統(tǒng)接下來我們來探討一下面向新型存儲的數(shù)據(jù)庫系統(tǒng)。底層的存儲變了,數(shù)據(jù)庫系統(tǒng)架構(gòu)各方面肯定都要去改變。這里我做了一下總結(jié),NVRAM具有的六個主要特性:一種是可字節(jié)尋址,它的行為模式就相當(dāng)于內(nèi)存,可以字節(jié)尋址,而不再像磁盤采用Block尋址了,然后是閑時低功耗、使用壽命長、非
16、易失性、存儲容量大、快速地隨機(jī)讀寫。目前而言,NVRAM接入DBMS主要有三種方式,最左邊的是我們傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)架構(gòu),維護(hù)兩個Buffer,一個是Log Buffer,另外一個是Data Buffer。Log Buffer是事務(wù)日志集中寫入的內(nèi)存區(qū)域;DATA Buffer用于緩存數(shù)據(jù)頁,事務(wù)訪問數(shù)據(jù)時首先在這個buffer里面尋找所需的數(shù)據(jù)。MySQL里面的Buffer Pull就是指這個DATA Buffer。第一種接入方式就是我們可以直接把它作為磁盤的替代直接拿過來,數(shù)據(jù)庫系統(tǒng)軟件不需要改動。這種方式當(dāng)然是可以獲得收益,因?yàn)榈讓覫/O速度變快了,但沒有發(fā)揮它最大的收益,軟件的復(fù)雜度還是
17、在那里,不多不少。第二種是作為日志的存儲,現(xiàn)在大家使用的機(jī)器內(nèi)存都很大了,我們的I/O基本上發(fā)生在一個地方,就是寫日志。為了不丟數(shù)據(jù),日志是必須落盤的。把NVRAM作為日志存儲的設(shè)備,可以用比較小的代價獲得比較好的收益,第二種接入方式就是把它作為日志存儲,而設(shè)計(jì)相應(yīng)的算法與優(yōu)化臨界區(qū)。第三種方式,是全系統(tǒng)接入的,系統(tǒng)經(jīng)過全面的改造,把數(shù)據(jù)放在NVRAM。這個可以跟第二種接入方式對比一下,系統(tǒng)不再維護(hù)Log Buffer這個數(shù)據(jù)結(jié)構(gòu),完全被廢棄掉。write-behind loggingCMU在VLDB 2017剛剛發(fā)表的研究稱之為,write-behind logging,就是NVRAM全系統(tǒng)
18、接入的一種方式。他們的idea是,write-ahead Logging是磁盤時代的算法,現(xiàn)在我不用先寫日志了。先寫日志的問題就是數(shù)據(jù)庫系統(tǒng)宕掉以后,可能需要很長時間地去恢復(fù)。它為了避免隨機(jī)IO不將數(shù)據(jù)刷盤,轉(zhuǎn)而順序?qū)懗鋈罩?。系統(tǒng)恢復(fù)時要先拿到一個檢查點(diǎn),然后從檢查點(diǎn)開始去掃描日志,把日志記錄拿出來,一條條地重放。數(shù)據(jù)量大的時候,這是相當(dāng)耗時的一個工作。他們針對NVRAM提出一個新算法稱之為write-behind Logging,就是事務(wù)提交的時候,直接把臟頁寫入NVRAM(因?yàn)镹VRAM的隨機(jī)IO也是相當(dāng)快的)。臟頁刷盤以后,再去寫日志。他們所設(shè)計(jì)的日志記錄是這樣子,不用再去構(gòu)造什么After-image,直接就寫上事務(wù)提交的時間區(qū)間(Cp,Cd)就行了。小于CP這個時間點(diǎn)的事務(wù)都已經(jīng)提交了,而落在這個時間區(qū)間(Cp,Cd)里面的事務(wù),就是還沒有提交的。在事務(wù)恢復(fù)的時候,系統(tǒng)知道這個時間區(qū)間的事務(wù)沒有提交,對其它事務(wù)不可見。系統(tǒng)沒有必要去進(jìn)行Redo操作了,因?yàn)閿?shù)據(jù)都已經(jīng)持久化。系統(tǒng)崩潰恢復(fù)時,需要一趟掃描日志,建立崩潰時候的時間區(qū)間(檢點(diǎn)可以減少需要掃描的日志量)。建立這個時間窗口相當(dāng)于undo操作。TPC-C benchmark他們對采用不用算法的系統(tǒng)的恢復(fù)時間做了一個比較,可以看到write-behind Logging的恢復(fù)時間,大概可以
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校老師打孩子處理協(xié)議書
- 綜述模具設(shè)計(jì)師資格考試的試題及答案
- 游泳救生員考試重要通知與試題答案
- 針對新技術(shù)的農(nóng)業(yè)植保員試題及答案
- 裁判員的自我評估與成長策略試題及答案
- 眼視光畢業(yè)考練習(xí)試題附答案
- 裁判員在比賽中的休息與恢復(fù)策略試題及答案
- 提高判罰準(zhǔn)確性的試題及答案
- 再接再厲農(nóng)業(yè)植保員資格考試試題及答案
- 籃球裁判員等級考試知識更新指南試題及答案
- 科學(xué)素養(yǎng)大賽題庫及答案(500題)
- 2023年綏濱縣社區(qū)工作者招聘考試筆試題庫及答案解析
- 雙心治療課件
- 廣東省肇慶市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名明細(xì)及行政區(qū)劃代碼
- 緩和醫(yī)療精品課件
- 2022國家自然科學(xué)基金委員會公開招聘應(yīng)屆畢業(yè)生9人模擬卷含答案
- 兒童功能性獨(dú)立評定量表(WeeFIM)
- 工程(產(chǎn)品)交付后顧客滿意度調(diào)查表
- 體育市場營銷(第三版)整套課件完整版電子教案課件匯總(最新)
- 新形勢下的處方審核工作-處方審核培訓(xùn)
- T∕CHAS 10-4-9-2019 中國醫(yī)院質(zhì)量安全管理 第4-9部分:醫(yī)療管理危急值管理
評論
0/150
提交評論