2012-04-26 61 views
1

我想知道數據庫WAL序列是無限的嗎?我想大多數WAL記錄都有WAL編號的修正大小?這是一個非常龐大的數字,它不會達到目的嗎?這可能會浪費太多空間?或者讓大型DB玩家發明更好的方法?WAL序列號無限?

或者他們是否實現了一些邏輯讓WAl再次從0開始?這可能會對代碼中的許多位置產生嚴重影響......?

編輯:

影響:例如崩潰後的恢復依賴於順序號在時間線上越來越大。如果順序可能重新開始,可能會感到困惑。

術語WAL序列號: WAL(預寫日誌,也就是應用程序層接收到事務成功之前保證存儲在磁盤上的事務日誌)。這個日誌的數量在不斷增加,以保持數據庫的完整性。在通過檢查來自頁面的WAL序列號與來自WAL的序列號來恢復的情況下。

+0

請顯示可能的影響場景。 – vyegorov 2012-04-26 15:16:53

+0

我不確定我曾經見過使用過的術語「WAL序列」,而Google沒有返回任何明顯與數據庫相關的內容。你能爲我們定義這個詞嗎? – 2012-04-26 15:20:06

+0

@JustinCave見編輯。 – 2012-04-26 15:35:28

回答

3

我不會假設每個數據庫都實現相同的策略。

只限於Oracle上講,SCN(系統改變號)是一個48位的號碼,以便Oracle數據庫可以打到極限之前處理幾乎3000000億的交易。實際上,這將需要很長時間。即使您可以每秒處理1000次交易,SCN也不會達到300億秒或大約9500年的限制。現在,除了僅僅進行交易之外,還有各種各樣的事情可能導致SCN增加(着名的是recent issue with hot backups and database links,導致一些用戶超過了數據庫對SCN合理性的檢查),所以它實際上不需要9500年達到極限。但是,實際上,它使Oracle有足夠的時間在幾年後轉向64位SCN,爲每個人帶來幾個世紀的功能。

+1

我認爲PostgreSQL中的WAL序列與Oracle的SCN不同。 PostgreSQL的WAL有點類似於Oracle的REDO日誌。 – 2012-04-26 15:56:11

+1

@a_horse_with_no_name - 儘管如此,SCN應該記錄在重做日誌中。 Oracle中有沒有另一個重做日誌組件,我沒有想到它會更類似於PostgreSQL WAL序列? – 2012-04-26 15:58:45

+1

我並不那麼熟悉這兩個(日誌記錄)內部,所以我可能完全錯誤:我認爲** Oracles「日誌序列號」與WAL序列更好地匹配。但是,我絕對不確定。另一方面。 PostgreSQL的'ctid'與Oracle的'SCN'非常匹配,因爲它們都定義了一個「事務處理順序」,如果這就是你的意思 – 2012-04-26 16:13:53

1

請參閱What is an LSN: Log Sequence Number。本文將介紹SQL Server LSN(WAL編號)的結構,並向您展示如何對其進行解碼。由於LSN的尺寸是固定的,並且不會翻轉,因此可以用完它們。但這需要很長時間。

1

如SQL Server,該專櫃Log Sequence Number(LSN)DB2調用。 IBM最近將其LSN的大小從六個字節擴展到八個字節,未簽名。 LSN是一個不斷增長的指針,它顯示日誌文件中可以找到特定日誌記錄的位置。一個八字節的LSN意味着DB2數據庫可以在用完地址空間之前寫入將近16條日誌記錄,此時數據庫的內容必須被卸載並複製到一個新的數據庫中。

1

在PostgreSQL,WAL日誌存儲作爲set of segment files。 「段文件的名稱越來越多,從000000010000000000000000開始。」該號碼不會環繞。