3

データベースのWALシーケンスが無限であるかどうか疑問に思っていますか?ほとんどのWALレコードにはWAL番号の固定サイズがあると思いますか?これは本当に大きな数で、終わりに達しないほど大きいのでしょうか。これはかなりスペースの無駄かもしれませんか?それとも、大手DBプレーヤーがより良い方法を発明したのでしょうか。

または、WAlを0から再開するためのロジックを実装していますか?それはコード内の多くの場所に大きな影響を与える可能性があります...?

編集:

影響:たとえば、クラッシュ後の回復は、タイムラインに沿ってシーケンス番号が大きくなることに依存しています。シーケンスを最初からやり直すことができると、リカバリが混乱する可能性があります。

用語WALシーケンス番号: WAL(先行書き込みログ、別名、トランザクションが成功したことをアプリケーション層が受信する前にディスク上にあることが保証されているトランザクションログ)。このログには、データベースの一貫性を維持するために増加する数があります。たとえば、ページのWALシーケンス番号をWALのシーケンス番号と照合してリカバリする場合などです。

4

5 に答える 5

4

すべてのデータベースが同じ戦略を実装しているとは思いません。

Oracleについてのみ言えば、SCN(システム変更番号)は48ビットの番号であるため、Oracleデータベースは制限に達する前に約300兆のトランザクションを処理できます。現実的には、それは何年もかかるでしょう。1秒あたり1,000トランザクションを実行できたとしても、SCNは3,000億秒、つまり約9500年間は制限に達しません。現在、トランザクションを実行するだけでなく、SCNを増加させる可能性のあるさまざまなことがあります(有名なのは、ホットバックアップとデータベースリンクに関する最近の問題で、少数のユーザーがSCNの合理性に関するデータベースのチェックを超えていました)。限界に達するのに実際に9500年かかることはありません。しかし、現実的には、オラクルは数年後に64ビットSCNに移行するための十分な時間を与えられ、すべての人に数世紀の機能を購入します。

于 2012-04-26T15:54:53.867 に答える
2

SQL Serverと同様に、DB2は、ログシーケンス番号(LSN)に対抗する呼び出しを行います。IBMは最近、LSNのサイズを6バイトから8バイト(符号なし)に拡張しました。LSNは、特定のログレコードがログファイルのどこにあるかを示す、増え続けるポインターです。8バイトのLSNは、DB2データベースがアドレス・スペースを使い果たす前に16エクスビバイト近くのログ・レコードを書き込むことができることを意味します。その時点で、データベースの内容をアンロードして新しいデータベースにコピーする必要があります。

于 2012-04-28T23:38:05.853 に答える
2

Postgres WAL番号は技術的にオーバーフローする可能性がありますが、WALファイルポインタが64ビットであるため、32Ebのデータを書き込んだ後でのみです。

于 2018-11-12T17:27:59.353 に答える
1

PostgreSQLでは、WALログはセグメントファイルのセットとして保存されます。「セグメントファイルには、000000010000000000000000から、名前として増え続ける番号が付けられます。」数字は折り返されません。

于 2012-04-29T11:14:47.353 に答える
1

LSNとは:ログシーケンス番号を参照してください。この記事では、SQL Server LSN(WAL番号)の構造と、それをデコードする方法について説明します。LSNは固定サイズであり、ロールオーバーしないため、LSNが不足する可能性があります。ただし、非常に長い時間がかかります。

于 2012-04-26T16:06:18.227 に答える