CLFS 穩定儲存體

當您將記錄寫入 Common Log File System (CLFS) 資料流程時,記錄會放在封送處理區域中) 的記錄 I/O (區塊中) 。 CLFS 會定期將記錄 I/O 區塊從封送處理區域排清到穩定的儲存體,例如磁片。 在穩定的儲存裝置上,記錄包含一組容器,每個容器都是實體媒體上的連續範圍。 構成資料流程穩定儲存體的容器集合稱為 記錄檔或 實體記錄

下圖說明容器。

說明容器、區塊和記錄的圖表。

上圖說明保存三個記錄 I/O 區塊的容器。 第一個記錄 I/O 區塊包含三筆記錄、第二個記錄包含五筆記錄,而第三個則包含兩筆記錄。 如圖所示,每個記錄 I/O 區塊的開頭一律與穩定儲存媒體上的磁區開頭一致。 請注意,穩定儲存體上的記錄 I/O 區塊大小會有所不同。

CLFS 使用一組三個數字來尋找記錄中的記錄。

  • 容器識別碼會識別保存記錄的容器。

  • 區塊位移會提供容器內保留記錄之記錄 I/O 區塊開頭的位元組位移。

  • 記錄序號會識別記錄 I/O 區塊內的記錄。

CLFS 記錄記錄 (LSN 的記錄序號) 實際上會保留這三項資訊:容器識別碼、區塊位移和記錄序號。 不過,提供給記錄用戶端的 LSN 包含 CLFS 必須對應至實體容器 識別碼的邏輯容器識別碼 ,才能存取穩定儲存體上的記錄。

CLFS 會使用邏輯容器識別碼,為用戶端提供記錄檔記錄在實際回收時寫入容器的持續序列檢視。

假設記錄有三個容器,而單一用戶端正在將 CLFS 記錄寫入記錄至記錄。 下列案例顯示如何回收容器。

  1. 用戶端會寫入足夠的記錄檔記錄,以填滿這三個容器。

  2. 用戶端會呼叫 ClfsAdvanceLogBaseClfsWriteRestartArea.) ,將記錄基底 (設定為容器 2 中的其中一筆記錄。 如此一來,用戶端就表示它不再需要容器 1 中的記錄。

  3. 用戶端會將另一筆記錄寫入記錄,並取得新寫入記錄的 LSN。 該 LSN 中的邏輯容器識別碼是 4。 當記錄排清至穩定儲存體時,用戶端在邏輯容器 4 中看到的記錄會移至實體容器 1。

下圖說明案例;它會顯示邏輯容器的用戶端順序如何對應至穩定儲存體上的實體容器。

說明邏輯和實體容器的圖表。

邏輯容器識別碼、區塊位移和記錄序號會儲存在 LSN 中,如此一來,特定資料流程的 LSN 一律會形成嚴格增加的序列。 也就是說,以邏輯容器識別碼 (LSN) 寫入資料流程的記錄檔記錄一律大於先前寫入該相同資料流程之記錄檔記錄的 LSN。 然後,LSN 會提供雙重用途:1) 它們為數據流提供已排序的記錄識別碼序列,以及 2 個) 它們提供 CLFS 與穩定儲存體上的記錄位置。

假設記錄的 LSN,您可以藉由呼叫下列函式來擷取邏輯容器識別碼、區塊位移和記錄序號。

ClfsLsnContainer

ClfsLsnBlockOffset

ClfsLsnRecordSequence

邏輯容器識別碼是 32 位的數位,因此有 2^32 個可能的邏輯容器識別碼,而且它們位於0x0到0xFFFFFFFF的範圍內。 資料流程最多可以有 2^32 個邏輯容器。

區塊位移會儲存在 LSN 的 23 位,但 ClfsLsnBlockOffset 會傳回 32 位的數位,其與穩定儲存媒體的磁區大小一致。 區塊位移一律是 512 的倍數。 此外,區塊位移會與穩定儲存媒體的磁區大小對齊。 例如,如果磁區大小是 1024 個位元組,區塊位移會是 1024 的倍數。

記錄序號是 9 位的數位,因此有 2^9 (512) 可能的記錄序號,而且它們位於0x0到0x1FF的範圍內。 記錄 I/O 區塊最多可以有 512 筆記錄。