跳到內容

數據庫清理

大容量存儲設備的新時代

數據庫清理的主要原因之一是存儲,這不僅是因為其容量,而且是為了延長設備的使用壽命。 Protip:如果您已經知道HDD和數據庫技術之間的區別,請跳至最後一部分,了解我們如何在吸塵技術上取得成功。

多年來,硬盤驅動器(HDD)一直統治著市場。最近,固態驅動器(SSD)出現了一項新技術。隨著速度,可靠性,容量和價格的提高,這兩種技術都取得了巨大的發展。隨著SSD變得越來越便宜,它們已經在許多應用中取代了HDD。

大多數開發人員已經很好地理解了HDD在概念上的工作方式,但是對於SSD,存在很多誤解。因此,我們將簡要介紹這兩種技術,為接下來的討論奠定基礎。

延長硬件壽命

硬盤驅動器(HDD)

HDD使用安裝在機械臂上的讀/寫頭將數據存儲在旋轉的磁片上。由於使用了活動部件,因此與集成電路(IC)相比,對HDD進行讀寫操作會產生較高的延遲。根據實際的HDD型號,可能不會立即寫入數據,而是將數據存儲在控制器中,以便稍後寫入。這種方法將以持久性為代價來提高寫入性能。為了最大程度地減少對耐用性的影響,HDD通常配備大容量電容器或備用電池,以便在斷電時可以將數據寫入或將數據存儲在易失性存儲器中

由於HDD的工作方式,因此始終以頁為單位讀取和寫入數據。現代硬盤驅動器的頁面大小為4,096字節(或4 KiB),並且主機上的數據實際佈局在磁盤上並不直接可見。

固態硬盤(SSD)

SSD將數據存儲在沒有任何活動部件的特殊IC上,從而降低了其讀寫操作的延遲。與HDD相比。這些IC以特定的方式組裝,以提高SSD的成本效益。從此以後,這些IC將被稱為閃存。由於詳細信息還取決於SSD的實際製造商和型號,因此此處的描述已簡化且並不完全準確。

儘管與HDD相比,訪問頁面的開銷幾乎可以忽略,但SSD使用與現代硬盤相同的頁面大小。從SSD讀取少量字節比從HDD讀取效率更高。此處的討論假定提供給主機的頁面大小與閃存的頁面大小相同。與HDD一樣,主機中不直接看到閃存中數據的實際佈局。

閃存被組織為多個扇區,每個扇區具有多個頁面。每個頁面只能寫入有限的次數,並且在更新頁面之前,必須擦除頁面所在的整個扇區。該方案有一些後果。

更新數據後,SSD會將其寫入“新”頁面(寫時復制),或者自上次擦除扇區以來尚未寫入的頁面。此寫操作使頁面“處於使用狀態”。保存舊數據的頁面被稱為“陳舊”。

除了正常寫入外,還會將使用中的頁面從具有很多陳舊頁面的扇區中定期復製到具有新頁面的扇區中。將其所有頁面標記為陳舊的扇區被刪除,使該扇區上的所有頁面均保持最新狀態。這樣的結果是,可以有更多新頁面用於常規寫入。擦除扇區可能是一項昂貴的操作,並且通常是寫入性能的瓶頸。此過程稱為垃圾收集。

具有更多陳舊頁面的更多扇區可能實現更有效的垃圾回收。原則上有三種類型的數據更改:數據創建,數據更新和數據刪除。傳統的硬盤驅動器不處理數據刪除,因為文件系統會忽略頁面。對於固態驅動器,如果垃圾收集知道這些被忽略的頁面,則可以更有效地執行垃圾收集。這是通過ATA命令TRIM或SCSI命令UNMAP來實現的。

關於SSD的許多其他方面,在下面的討論中無需在此提及。有關更多詳細信息,請參見Wikipedia。

數據庫技術

傳統數據庫使用的數據結構可最大程度地減少讀取的頁面數。當使用傳統的HDD時,此方法至關重要,因為檢索數據所花費的時間與讀取的頁面數成正比。對於SSD,在某種程度上也是如此,因為I / O通道針對HDD進行了優化,但是從SSD檢索數據要比從HDD檢索數據快一個數量級。

數據庫通常實現持久性( )使用交易日誌,該日誌可能包含也可能不包含實際用戶數據。為事務日誌寫的頁面和為更新的數據庫映像寫的頁面很可能以相同的扇區結尾,因為它們是在同一時間寫的。對於小額交易尤其如此。通常,在最近寫入數據庫映像的頁面之前,將使事務日誌的頁面變舊。這意味著這些扇區可能很快就會出現一些過時的頁面,這些頁面將佔用空間,或者這些扇區可能很快就會達到垃圾回收的閾值。在這兩種情況下,性能可能都會下降。

數據庫清理

RDM 15.0

我們對RDM 15.0採用了不同的方法。在文件系統級別,數據庫由許多打包文件組成,這些打包文件包含恢復和清理所需的用戶數據,索引和元數據。這些打包文件統稱為“打包”。

包的文件系統透視圖

本節介紹文件系統觀察到的數據包的某些特性,以及它們如何影響SSD的I / O性能。

一個文件包由許多文件包組成,每個文件的最大大小為2 GiB。打包文件通過追加到末尾順序寫入。打包文件的總大小保持在閾值以下。刪除打包文件後,它們始終會按照創建順序刪除。

由於包文件是順序寫入的,因此與其他I / O負載相比,給定包的頁面序列很可能會聚在一起,尤其是在較大的事務負載下。當假定這樣的群集時,在刪除包文件之前,這些扇區不太可能進行垃圾回收。

如果不是上述假設,則可能必須將數據庫負載保持在單獨的分區或單獨的SSD上,以實現所需的性能。這些細節是我們無法控制的,但是從數據庫設計的角度來看,這是我們在SSD上實現I / O性能所能做的最好的事情。

在Raima數據庫管理器(RDM)中進行清理

該包的實現將在本節中討論。我們將從觀察RDM的早期版本開始,並介紹RDM 15.0設計。如果您想深入了解技術細節,可以在中了解更多信息。 我們的文件。

RDM的早期版本

RDMe 12.0和更早版本(“ RDMe”)使用了事務日誌。這意味著數據通常被寫入兩次-首先寫入事務日誌,然後寫入實際的數據庫文件。 RDMe還存儲了固定長度的項目,在某些情況下,其他內容必須單獨存儲在其他位置。當必須拆分內容時,這種設計導致浪費的空間和額外的開銷。也不可能對數據執行任何類型的壓縮。

RDM 14.0是RDM的第一個版本,該版本使用內存中的鍵值存儲(ID-index)和數據包格式進行數據管理,這與傳統的事務日誌和固定長度的數據槽相反。但是,它重用了打包文件中的空間。始終使用原始頁面上的寫時復製到具有可用空間的頁面上的副本來完成對包的更新。 ID索引跟踪此未使用的空間。這種跟踪和有效利用未使用空間所需的數據結構非常昂貴。與批量寫入結合使用時,它還防止了空間的重用。 I / O性能也遠非最佳,因為只有一部分頁面被更新時,數據才被寫入頁面。

RDM 14.1和RDM 14.2採取了略有不同的方法。在以下各節中,我們將主要討論與14.2設計類似的15.0設計。 15.0設計還具有與14.1設計相同的特徵。

RDM 15.0

RDM 15.0通過採用完全不同的方法解決了上述所有問題。它仍然會在寫入時進行複制,但絕不會重複使用打包文件中未使用的空間。相反,它始終使用不使用ID索引的數據結構寫入最後一個打包文件的末尾。這意味著能夠避免只寫部分可用空間的頁面。

打包文件中未使用的空間通過稱為“清理”的過程清除。清理與前面討論的垃圾收集類似,不同之處在於清理是對打包文件而不是SSD上的扇區進行操作。如果處理正確,吸塵將大大改善垃圾收集。

磁盤空間與使用的頁面

清理具有兩個相互抵消的主要目標:減少數據庫的磁盤空間總量和減少數據庫實際駐留的頁面數。對其中一個進行優化可能會不利於另一個。 RDM 15.0始終會清除最舊的打包文件,這將有利於第一個目標。如果未引用最早的打包文件,否則不需要,它將被刪除,然後我們才真正刪除打包文件。 RDM 14.1贊成第二個目標,即以相對最低的“使用中”吸塵打包文件。 RDM 15.0可以減少打包中的元數據,因為它只能清理最舊的打包文件。該方法還具有不必在清理過程中復制已刪除數據的元數據的好處,從而進一步降低了清理的成本。最後,優化磁盤空間還可以提高SSD性能。

讀與寫

不應忽略的一方面是讀寫。如上所述,積極的清理將限制數據庫的整體大小。通常,更重要的是,主動清理將聚集正在使用的數據,同時減少它們之間的浪費空間。當涉及到每個頁面上的實際位置時,這一點很重要。使數據保持群集可能意味著正在使用的更多數據可能能夠容納在更少的頁面中,從而可能留在文件系統緩存的工作集中,從而有可能減少或消除對底層塊設備的昂貴I / O。 

寫入和總大小之間的權衡在寫入的數據量和數據包的總大小之間也需要權衡。根據應如何設計應用程序,或者管理員或用戶必須配置系統的方式,可能很難確切地知道如何在兩者之間取得適當的平衡。這可能是這種方法的主要挑戰。但是,請記住,此方法的替代方法不是很有效。我們已經看到了重用打包文件中的空間或使用事務日誌的效率低下。

這種方法的最終結果是,可以像RDM 12.0和更早版本一樣多次寫入數據,但是這裡的區別在於,RDM 15.0的寫入是群集的,並且在適當的清理閾值下,將產生出色的I / O性能並使得如前所述,SSD中的垃圾回收非常有效。

打包文件格式

打包文件格式對於有效地清理很重要。首先,有幾個觀察。原則上,可以用幾種方法進行抽真空。 RDM 14.1可以根據ID索引中的插槽ID進行聚類,或根據打包文件中的舊位置進行聚類。兩者都依賴於ID索引和打包文件中的某些元數據。

RDM 15.0採取的方法是遍歷數據結構並移動當前駐留在打包文件中的任何東西,這些東西都需要清理,方法是將其附加到最後一個打包文件中。包含對要復制的數據的引用的數據結構也必須被移動。因此,RDM 15.0中的數據結構具有有關可以直接或間接訪問的最舊的打包文件的信息。這樣就可以有效地清理內容,而不必遍歷多餘的數據。該方法還具有以下優點:根據內容的鍵對內容進行聚類,從而使後續查找更加有效。

需要鎖

此外,可以在不獲取寫鎖的情況下進行清理。這意味著讀者不會受到抽真空的特別影響。更新會受到影響,因為在對該表進行更新時無法並行完成給定表的清理。但是,可以預期,要清理的數據量可能比為更新而寫入的數據量小一個數量級,儘管根據我們清理的積極程度,通常它可能只是兩個或三個因素。

結論

我們已經看到,RDM 15.0的文件格式特別適合於最小化磁盤I / O,並且其屬性非常適合於永久存儲(包括SSD和閃存)。通過最小化磁盤,I / O,設備的壽命將得以延長。為了簡化討論,省略了許多細節。希望您喜歡。

 

Sverre Hvammen Johansen和Daigoro Toyama