15

ログ シーケンス番号の意味は何ですか? タイプがバイナリで、長さが 10 バイトであり、DB でトランザクションが発生する時間に対応していることを私は知っています。しかし、これは効率的なバイナリ形式で格納された高精度の日時値ですか、それとも日時とその他の関数 (たとえば、同じミリ秒で発生するトランザクションのシリアル番号) ですか? 私は多くの検索を行いましたが、これに対する良い答えを見つけることができませんでした。

日時などからLSNを導出するために使用される式または関数で説明できる人はいますか?

4

4 に答える 4

21

SQL Server トランザクション ログのすべてのレコードは、ログ シーケンス番号 (LSN) によって一意に識別されます。LSN2 が LSN1 より大きい場合、LSN2 によって参照されるログ レコードによって記述される変更が、ログ レコード LSN によって記述される変更の後に発生するように、LSN は順序付けられます。

ここから。

これらがどのように生成されるかは気にする必要はありません。

于 2009-07-17T13:05:10.310 に答える
5

これは、日時の値ではなく、増加するシーケンス (1、2、3、4、...) です。Microsoftのドキュメントから:

ログ シーケンス番号 (LSN) の値は、3 つの部分からなる一意の増分値です。これは、データベース内のトランザクション ログ レコードの順序を維持するために使用されます。これにより、SQL Server は ACID プロパティを維持し、適切な回復アクションを実行できます。

于 2009-07-17T13:08:57.317 に答える
4

まず、デッドポストでの返信で申し訳ありません。LSNに基づいて他の操作を検索しているときに、このスレッドに来ました。LSN は、指定されているように連続番号に他なりません。ログ シーケンス番号は、00000016:0000003c:0001のような 3 つの 16 進数部分で生成され、これらの部分は次のとおりです。

  • 最初の部分は VLF です:仮想ログ ファイル
  • 2 番目/中間部分は OffSet : VLF へのオフセット
  • 最後/3 番目の部分は、オフセットに基づいてトレースされたログ/バケットのブロック内のスロット番号です。

一般に、トランザクションの開始/終了に伴うDB操作は保存され、トランザクションの各操作は、明らかに開始およびコミット操作でLSNを順番に取得します。これらはタイムスタンプとは関係ありませんが、sys 関数に基づいてタイムスタンプにマップできます。@max はすでに返信しています。

トランザクションに対するコミット操作、強制的に新しいログ ブロックへの切り替え、および中間部分が増分されます。それ以外の場合は、VLF のサイズに基づいて最後の部分が増分されます。

于 2020-03-04T06:01:16.803 に答える
1

それを導出する保証された方法はありませんmsdb.dbo.backupsetが、バックアップを行ったマシンから推測できます。

SELECT  last_lsn
FROM    msdb.dbo.backupset
WHERE   backup_start_date = @backup_date

もちろん、これは正確ではなく、信頼できません。

于 2009-07-17T13:09:30.907 に答える