溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

窺鏡下的OLTP以及我們的發(fā)現(xiàn)(一)

發(fā)布時(shí)間:2020-08-09 20:39:04 來源:ITPUB博客 閱讀:268 作者:VoltDB_China 欄目:關(guān)系型數(shù)據(jù)庫

作者:Stavros Harizopoulos, Daniel J. Abadi, Samuel Madden, Michael Stonebraker


聯(lián)機(jī)事務(wù)處理 (OLTP) 數(shù)據(jù)庫包含一系列針對(duì) 20 世紀(jì) 70 年代的計(jì)算機(jī)技術(shù)而優(yōu)化的功能 —— 磁盤 B 樹和堆文件、基于鎖的并發(fā)控制、多線程支持等等?,F(xiàn)代處理器、存儲(chǔ)器和網(wǎng)絡(luò)的進(jìn)步意味著,今天的計(jì)算機(jī)與 30 年前的計(jì)算機(jī)大為不同,以至于現(xiàn)在許多 OLTP 數(shù)據(jù)庫都可以放在主存儲(chǔ)器,并且大多數(shù) OLTP 事務(wù)可以在幾毫秒甚至更短的時(shí)間內(nèi)得到處理。然而,數(shù)據(jù)庫架構(gòu)幾乎沒有發(fā)生變化。

基于這一觀察,我們研究了傳統(tǒng)數(shù)據(jù)庫系統(tǒng)一些有趣的變體,人們可以構(gòu)建它們來利用最近的硬件趨勢(shì),然后我們使用一個(gè)事務(wù)處理數(shù)據(jù)庫系統(tǒng) (Shore) 來運(yùn)行 TPC-C 基準(zhǔn)程序的一個(gè)子集,并通過這個(gè)系統(tǒng)所涉及的主要組件的詳細(xì)指令級(jí)分解來推測(cè)它們的性能。我們沒有簡(jiǎn)單地剖析 Shore ,而是逐步地修改它,以便在每次功能刪除或優(yōu)化之后,我們都有一個(gè)(更快的)工作系統(tǒng)來完整運(yùn)行我們的工作負(fù)載??偟膩碚f,我們確定了可以解釋原始性能存在大約 20 倍差異的開銷和優(yōu)化。我們還證明,現(xiàn)代(內(nèi)存駐留)數(shù)據(jù)庫系統(tǒng)沒有單個(gè)的 瓶頸 ,但日志記錄、鎖存、封鎖、 B 樹和緩沖區(qū)管理操作上花費(fèi)了大量時(shí)間。

 

 

分類和主題詞

H.2.4 [ 數(shù)據(jù)庫管理 ] :系統(tǒng) —— 事務(wù)處理;并發(fā)。

通用術(shù)語

測(cè)量、性能、實(shí)驗(yàn)。

關(guān)鍵詞

聯(lián)機(jī)事務(wù)處理、 OLTP 、主存儲(chǔ)器事務(wù)處理、數(shù)據(jù)庫管理系統(tǒng)架構(gòu)。


 

1. 前言

現(xiàn)代通用在線事務(wù)處理 (OLTP) 數(shù)據(jù)庫系統(tǒng)包括一組標(biāo)準(zhǔn)功能:一系列用于表存儲(chǔ)的磁盤數(shù)據(jù)結(jié)構(gòu)(包括堆文件和 B 樹),通過基于鎖的并發(fā)控制支持多個(gè)并發(fā)查詢,基于日志的恢復(fù)和高效的緩沖區(qū)管理器。人們開發(fā)這些功能來支持 20 世紀(jì) 70 80 年代的事務(wù)處理,那時(shí)的 OLTP 數(shù)據(jù)庫比主存儲(chǔ)器大很多倍,而運(yùn)行這些數(shù)據(jù)庫的計(jì)算機(jī)成本高達(dá)數(shù)十萬到數(shù)百萬美元。

如今的情況則完全不同。首先,現(xiàn)代處理器運(yùn)行速度非常快,以至于很多 OLTP 事務(wù)的計(jì)算時(shí)間以微秒計(jì)算。人們只需幾千美元就可以購買到主存儲(chǔ)器容量為數(shù) GB 的系統(tǒng)。此外,組織機(jī)構(gòu)擁有由眾多此類工作站組成的網(wǎng)絡(luò)集群并不罕見,其中的存儲(chǔ)器總?cè)萘恳詳?shù)百 GB 來計(jì)算,這足以將許多 OLTP 數(shù)據(jù)庫放在隨機(jī)存取存儲(chǔ)器中。

其次,因特網(wǎng)的興起和用于眾多領(lǐng)域的各種數(shù)據(jù)密集型應(yīng)用程序?qū)е氯藗儗?duì)類似于數(shù)據(jù)庫的應(yīng)用程序的興趣越來越大,而這些應(yīng)用程序沒有全套的標(biāo)準(zhǔn)數(shù)據(jù)庫功能。如今,操作系統(tǒng)和網(wǎng)絡(luò)會(huì)議充滿了針對(duì) 類似于數(shù)據(jù)庫 的存儲(chǔ)系統(tǒng)的方案,這些存儲(chǔ)系統(tǒng)具有不同形式的一致性、可靠性、并發(fā)性、復(fù)制性和查詢能力 [DG04, CDG+06, GBH+00, SMK+01] 。

這種對(duì)類似于數(shù)據(jù)庫的服務(wù)的需求增長以及顯著的性能改善和硬件成本的下降表明,人們可以構(gòu)建大量有趣的替代系統(tǒng),這些替代系統(tǒng)具有與標(biāo)準(zhǔn)的 OLTP 引擎所提供的功能完全不同的功能集。

1.1 可供選擇的 DBMS 架構(gòu)

顯然,當(dāng)一個(gè)數(shù)據(jù)庫可以放在 RAM 時(shí),針對(duì)主存儲(chǔ)器優(yōu)化 OLTP 系統(tǒng)是一個(gè)好主意。但是眾多其他的數(shù)據(jù)庫變體是可能存在的;例如:

無日志數(shù)據(jù)庫。 無日志數(shù)據(jù)庫系統(tǒng)可能不需要恢復(fù),或者可能從集群中的其他站點(diǎn)執(zhí)行恢復(fù)(如在 Harp [LGG+91] Harbor [LM06] C-Store [SAB+05] 等系統(tǒng)中建議的那樣)。


單線程數(shù)據(jù)庫。 由于 OLTP 數(shù)據(jù)庫中的多線程在傳統(tǒng)上對(duì)于慢速磁盤寫入時(shí)的延遲隱藏十分重要,因此在內(nèi)存數(shù)據(jù)庫系統(tǒng)中,它并不那么重要。在某些情況下,一個(gè)單線程實(shí)現(xiàn)可能就已經(jīng)足夠了,尤其是在它能夠提供優(yōu)良性能的情況下。盡管人們需要

一種方法來利用相同硬件上的多個(gè)處理器內(nèi)核,但虛擬機(jī)技術(shù)的最新進(jìn)展提供了一種方法來使這些內(nèi)核看起來像是獨(dú)特的處理節(jié)點(diǎn),同時(shí)不會(huì)產(chǎn)生大量的性能開銷 [BDR97] ,這可能讓這些設(shè)計(jì)具有可行性。


無事務(wù)型數(shù)據(jù)庫。 很多系統(tǒng)并不需要事務(wù)支持。尤其是在分布式網(wǎng)絡(luò)應(yīng)用中,最終一致性通常比事務(wù)一致性更受歡迎 [Bre00, DHJ+07] 。而在其他情況下,例如,當(dāng)所有的讀取需要在寫入之前完成時(shí),輕量級(jí)事務(wù)可能是可以接受的 [AMS+07, SMA+07] 。

實(shí)際上,數(shù)據(jù)庫社區(qū)內(nèi)部已經(jīng)提出了幾個(gè)方案來構(gòu)建具有部分或全部上述特性的數(shù)據(jù)庫系統(tǒng) [WSA97, SMA+07] 。然而,一個(gè)待解決的問題是,如果這些不同的配置被實(shí)際構(gòu)建出來的話,它們的性能表現(xiàn)會(huì)有多好。這是本白皮書的中心問題。

1.2 測(cè)量 OLTP 的開銷

為了理解這個(gè)問題,我們選擇了一個(gè)現(xiàn)代開源數(shù)據(jù)庫系統(tǒng)( Shore—— 參閱 http://www.cs.wisc.edu/shore/ ),并在 TPC-C 基準(zhǔn)測(cè)試程序的一個(gè)子集上對(duì)它進(jìn)行基準(zhǔn)測(cè)試。我們?cè)谝粋€(gè)現(xiàn)代臺(tái)式機(jī)上進(jìn)行的初始實(shí)現(xiàn)每秒運(yùn)行大約 640 個(gè)事務(wù) (640 TPS) 。然后我們通過從引擎中逐一移除不同的功能來修改它,并在每一步進(jìn)行新的基準(zhǔn)測(cè)試,直到我們得到一個(gè)可以處理 12700 TPS 的查詢處理代碼的微內(nèi)核。這個(gè)內(nèi)核是一個(gè)單線程、無鎖、不帶恢復(fù)功能的主存儲(chǔ)器數(shù)據(jù)庫系統(tǒng)。在這個(gè)分解過程中,我們確定了四個(gè)主要組件,將它們移除后,系統(tǒng)的處理能力得到大幅改善:

日志記錄。 匯編日志記錄和追蹤數(shù)據(jù)庫結(jié)構(gòu)中的所有更改導(dǎo)致系統(tǒng)性能下降。如果沒有可恢復(fù)性需求,或者可恢復(fù)性可以通過其他方式(例如,網(wǎng)絡(luò)上的其他站點(diǎn))來實(shí)現(xiàn),日志記錄可能不再必要。

封鎖。 由于對(duì)數(shù)據(jù)庫結(jié)構(gòu)的所有訪問均由一個(gè)單獨(dú)的實(shí)體(鎖管理器)管理,傳統(tǒng)的兩階段封鎖會(huì)造成相當(dāng)大的開銷。

鎖存。 在多線程數(shù)據(jù)庫中,許多數(shù)據(jù)結(jié)構(gòu)必須在被鎖存之后才能被訪問。移除這項(xiàng)功能并進(jìn)入一種單線程方法后,性能受到顯著影響。

緩沖區(qū)管理。 主存儲(chǔ)器數(shù)據(jù)庫系統(tǒng)并不需要通過一個(gè)緩沖池來訪問頁面,從而在每個(gè)記錄訪問時(shí)消除一個(gè)中間層。

 

1.3 結(jié)果

1 展示了這些修改的每一項(xiàng)如何影響 Shore 的底線性能(依照每個(gè) TPC-C 新訂單事務(wù)的 CPU 指令)。我們可以看到

底部虛線是有用的工作,通過在無開銷的內(nèi)核上執(zhí)行事務(wù)來度量。

每一個(gè)子系統(tǒng)本身占總運(yùn)行時(shí)的 10% 35% (此圖的總高度代表 173 萬個(gè)指令)。在這里, 手工編碼的優(yōu)化 代表我們對(duì)代碼進(jìn)行的一系列優(yōu)化,這些優(yōu)化主要改善了 B 樹包的性能。實(shí)際用來處理查詢的指令(標(biāo)記為 有用的工作 ,通過我們?cè)谑止ぞ幋a的主存儲(chǔ)器 B 樹包上構(gòu)建的最小實(shí)現(xiàn)來度量)只有上述數(shù)據(jù)的 1/60 緩沖區(qū)管理器 下方的白色框代表我們移除所有功能之后的 Shore 版本,它仍然能夠運(yùn)行事務(wù),但它使用的指令大約只有原始系統(tǒng)的 1/15 ,或者大約是有用的工作中的指令數(shù)量的 4 倍。在我們的實(shí)現(xiàn)中,額外開銷歸因于 Shore 的調(diào)用堆棧深度,以及我們不能完全去掉對(duì)事務(wù)和緩沖區(qū)管理器的所有引用。

窺鏡下的OLTP以及我們的發(fā)現(xiàn)(一)

1. 各種 DBMS 組件針對(duì) TPC-C 新訂單事務(wù)的指令數(shù)的分解。條形圖的頂部是原始 Shore 的性能(主存數(shù)據(jù)庫,無線程爭(zhēng)用)。

 

1.4 本白皮書的貢獻(xiàn)和組織結(jié)構(gòu)

本白皮書的主要貢獻(xiàn)在于: 1) 仔細(xì)分析時(shí)間消耗在現(xiàn)代數(shù)據(jù)庫系統(tǒng)中的什么地方; 2) 仔細(xì)地測(cè)量現(xiàn)代數(shù)據(jù)庫系統(tǒng)各種精簡(jiǎn)變體的性能; 3) 使用這些測(cè)量結(jié)果來推測(cè)人們能夠構(gòu)建的各種數(shù)據(jù)管理系統(tǒng)的性能,例如沒有事務(wù)或日志的系統(tǒng)。

 

本白皮書其余部分的組織結(jié)構(gòu)如下所述。在第 2 部分,我們將討論可能很快被淘汰(或者已經(jīng)被淘汰)的 OLTP 功能。在第 3 部分,我們將探討 Shore DBMS (它是我們整個(gè)探索過程的起點(diǎn)),并描述我們進(jìn)行的分解。第 4 部分含有我們使用 Shore 進(jìn)行的實(shí)驗(yàn)。然后在第 5 部分,我們將使用測(cè)量結(jié)果討論這對(duì)未來 OLTP 引擎的影響,并推測(cè)一些假設(shè)的數(shù)據(jù)管理系統(tǒng)的性能。我們將在第 6 部分介紹其他的相關(guān)工作,并在第 7 部分進(jìn)行總結(jié)。

 

2. 關(guān)于 OLTP 的趨勢(shì)

如在前言中所述,大多數(shù)常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng) (RDBMS) 起源于在 20 世紀(jì) 70 年代開發(fā)的系統(tǒng),并且包含諸如基于磁盤的索引和堆文件、基于日志的事務(wù)和基于鎖的并發(fā)控制之類的功能。然而,自人們做出這些架構(gòu)決策算起,已經(jīng)過去 30 年了。與這些傳統(tǒng)系統(tǒng)問世的時(shí)代相比,如今的計(jì)算世界已經(jīng)大為不同;本部分的目的在于探索這些不同之處的影響。我們?cè)? [SMA+07] 中進(jìn)行過一系列相似的觀察。

2.1 集群計(jì)算

當(dāng)前一代的大多數(shù) RDBMS 最初是在 20 世紀(jì) 70 年代為共享內(nèi)存的多處理器設(shè)計(jì)的。很多廠商在 20 世紀(jì) 80 年代增加了對(duì)共享磁盤架構(gòu)的支持。在過去的二十年里,我們已經(jīng)見證了類似于 Gamma 的無共享數(shù)據(jù)庫 [DGS+90] 的出現(xiàn),以及針對(duì)許多大型計(jì)算任務(wù)的商用計(jì)算機(jī)集群的興起。未來的所有數(shù)據(jù)庫系統(tǒng)都必須從頭開始設(shè)計(jì)來運(yùn)行這些集群。

2.2 內(nèi)存數(shù)據(jù)庫

鑒于 RAM 容量在過去幾十年里的急劇增長,我們有充分的理由相信,很多 OLTP 系統(tǒng)已經(jīng)或很快將會(huì)被放入內(nèi)存,尤其是大型集群的聚合內(nèi)存。這在很大程度上歸因于大多數(shù) OTLP 系統(tǒng)的尺寸沒有像 RAM 容量一樣在顯著增長,因?yàn)樗鼈冇涗浀男畔⑺婕暗降目蛻簟a(chǎn)品和其他現(xiàn)實(shí)世界實(shí)體的數(shù)量并沒有按照摩爾定律來增長。鑒于這種情況,數(shù)據(jù)庫廠商創(chuàng)建能夠優(yōu)化內(nèi)存系統(tǒng)常見用例的系統(tǒng)是有道理的。在這些系統(tǒng)中,考慮優(yōu)化的索引 [RR99, RR00] 以及避免磁盤優(yōu)化的元組格式和頁面布局(或者缺乏它們) [GS92] 十分重要。

 

2.3 OLTP 系統(tǒng)中的單線程

所有現(xiàn)代數(shù)據(jù)庫包含對(duì)多線程的廣泛支持,包括一系列事務(wù)并發(fā)控制協(xié)議以及使用鎖存命令廣泛滲透它們的代碼來支持多線程訪問緩沖池和索引頁等共享結(jié)構(gòu)。多線程的傳統(tǒng)動(dòng)機(jī)在于允許一個(gè)事務(wù)進(jìn)行事務(wù)處理,同時(shí)讓另一個(gè)事務(wù)等待來自磁盤的數(shù)據(jù),并防止長時(shí)間運(yùn)行的事務(wù)阻礙短時(shí)間運(yùn)行的事務(wù)取得進(jìn)展。

我們斷言,所有這些動(dòng)機(jī)都不再有效。首先,如果數(shù)據(jù)庫駐留在內(nèi)存中,那就不再需要等待來自磁盤數(shù)據(jù)。此外,生產(chǎn)事務(wù)系統(tǒng)不含任何用戶等待 —— 事務(wù)幾乎完全通過存儲(chǔ)的程序來執(zhí)行。其次, OLTP 工作負(fù)載十分簡(jiǎn)單。一個(gè)典型的事務(wù)由一些索引查找和更新組成,在內(nèi)存系統(tǒng)中,這些索引查找和更新可以在數(shù)百微秒內(nèi)完成。此外,隨著現(xiàn)代數(shù)據(jù)庫行業(yè)分叉為一個(gè)事務(wù)處理和一個(gè)數(shù)據(jù)倉庫市場(chǎng),長期運(yùn)行(分析)的查詢現(xiàn)在由數(shù)據(jù)倉庫提供服務(wù)。

我們關(guān)心的一個(gè)問題就是,多線程需要支持配有多個(gè)處理器的機(jī)器。然而,我們認(rèn)為,這個(gè)問題的解決方式可以是,把擁有多個(gè)處理器的一個(gè)物理節(jié)點(diǎn)當(dāng)作一個(gè)無共享集群中的多個(gè)節(jié)點(diǎn)來處理,這可能是由一個(gè)虛擬機(jī)監(jiān)視器來進(jìn)行管理,而這個(gè)監(jiān)視器可以動(dòng)態(tài)地在這些邏輯節(jié)點(diǎn)之間分配資源 [BDR97] 。

另一個(gè)問題是,網(wǎng)絡(luò)將會(huì)變成新磁盤,從而將延遲引入分布式事務(wù)并且需要事務(wù)的重新引入。在普通情況下,這個(gè)問題無疑是存在的,但對(duì)于很多事務(wù)應(yīng)用來說,劃分工作負(fù)載使其成為 單站點(diǎn) ”[_ Hel07, SMA+07] 負(fù)載是可能的,這樣所有的事務(wù)可以完全在集群的一個(gè)單一節(jié)點(diǎn)上運(yùn)行。

因此,某些類別的數(shù)據(jù)庫應(yīng)用將不需要支持多線程;在這些數(shù)據(jù)庫系統(tǒng)中,傳統(tǒng)的封鎖和鎖存代碼成為不必要的開銷。

2.4 高可用性與日志記錄

產(chǎn)品事務(wù)處理系統(tǒng)需要 24x7 全天候的可用性。為此,大多數(shù)系統(tǒng)使用某種形式的高可用性,本質(zhì)上是使用兩倍(或更多倍)的硬件來確保在發(fā)生故障時(shí)有一個(gè)可用的備用品。

最近的論文 [LM06] 指出,至少對(duì)于倉庫系統(tǒng)來說,利用這些可用的備用品來促進(jìn)恢復(fù)是可能的。特別是,我們可以通過從其他數(shù)據(jù)庫副本復(fù)制丟失狀態(tài)來完成恢復(fù),而不是使用 REDO 日志。在我們之前的研究中,我們已經(jīng)聲稱這也可以用于事務(wù)系統(tǒng) [SMA+07] 。如果事實(shí)確實(shí)如此的話,那么傳統(tǒng)數(shù)據(jù)庫中的恢復(fù)代碼也將成為不必要的開銷。

2.5 事務(wù)變體

盡管很多 OLTP 系統(tǒng)明確需要事務(wù)語義,但最近出現(xiàn)了一些針對(duì)具有弱一致性的數(shù)據(jù)管理系統(tǒng)的方案,特別是在互聯(lián)網(wǎng)領(lǐng)域。通常,我們相信可用性比事務(wù)語義更為重要,因此我們需要的是某種形式的最終一致性 [Bre00, DHJ+07] 。此類環(huán)境的數(shù)據(jù)庫可能不太需要針對(duì)事務(wù)(例如日志、鎖、兩階段提交等)開發(fā)的機(jī)器。

即使有人需要某種嚴(yán)格一致性,也是可能存在很多弱一致性模型的。例如,快照隔離(非事務(wù)型)的廣泛采用表明,很多用戶愿意用事務(wù)語義來換取性能(就此例而言,歸因于讀鎖的消除)。

最后,最新的研究表明,數(shù)量有限的一些事務(wù)形式需要的機(jī)器遠(yuǎn)少于標(biāo)準(zhǔn)數(shù)據(jù)庫事務(wù)所需要的機(jī)器。例如,如果所有的事務(wù)都是 兩階段 ,即它們?cè)谌魏螌懭氩僮髦皥?zhí)行它們的所有讀取操作,并得到在完成讀取之后不會(huì)中止的保證,那么 UNDO 日志沒有存在的必要 [AMS+07, SMA+07]

2.6 總結(jié)

如我們的參考文獻(xiàn)所示,一些研究小組,包括 _ Amazon [DHJ+07] 、 HP [AMS+07] NYU [WSA97] MIT

[SMA+07] ,已經(jīng)展示了他們對(duì)構(gòu)建與經(jīng)典 OTLP 設(shè)計(jì)之間存在本質(zhì)區(qū)別的系統(tǒng)的興趣。特別是, MIT H-Store [SMA+07] 系統(tǒng)證明,移除所有上述功能可以在事務(wù)吞吐量方面帶來兩個(gè)數(shù)量級(jí)的加速,這表明其中一些數(shù)據(jù)庫變體很有可能提供卓越的性能。因此,傳統(tǒng)的數(shù)據(jù)庫廠商似乎有必要考慮生產(chǎn)明確禁用這些功能的產(chǎn)品。為了幫助這些實(shí)踐者理解他們可能考慮構(gòu)建的不同變體的性能影響,我們繼續(xù)對(duì) Shore 以及我們構(gòu)建的它的變體進(jìn)行詳細(xì)的性能研究。

(待續(xù))

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI