LSN在SQL Server中的含义是什么?

Fai*_*aiz 11 sql architecture sql-server logging cdc

Log Sequence Number是什么意思?我知道它是二进制类型和10bytes长,它对应于DB中事务发生的时间.但这是一个高精度的日期时间值,以某种有效的二进制格式存储,或者这是日期时间和其他东西的函数(例如,在相同的毫秒时间内发生的事务的序列号).我做了很多搜索,但找不到合适的答案.

任何人都可以解释用于从日期时间或任何事物中导出LSN的公式或函数.

Mit*_*eat 19

SQL Server事务日志中的每条记录都由日志序列号(LSN)唯一标识.如果LSN2大于LSN1,则对LSN进行排序,由LSN2引用的日志记录描述的变化发生在日志记录LSN描述的变化之后.

这里开始.

你不应该关心它们是如何产生的.


小智 8

首先,很抱歉回复死帖子。我在搜索基于 LSN 的其他操作时来到这个线程。LSN只不过是序列号,它指定了以三个十六进制部分生成的日志序列号,例如00000016:0000003c:0001,这些部分如下:

  • 第一部分是 VLF:虚拟日志文件
  • 第二/中间部分是 OffSet :VLF 的偏移量
  • 最后/第三部分是基于偏移量跟踪的日志/桶块内的槽号

通常,任何数据库操作以及事务的开始/结束都会被存储,并且事务的每个操作(显然包括开始和提交操作)都会按顺序获取 LSN。这些与任何时间戳无关,但可以根据 sys 函数与时间戳进行映射。@max 已经回复了。

任何针对事务的提交操作,强制切换到新的日志块,中间部分都会增加,否则最后部分将根据VLF的大小增加。


Tho*_*Low 5

它是一个递增的序列(1,2,3,4,...),而不是日期时间值.从Microsoft文档:

日志序列号(LSN)值是一个由三部分组成的唯一递增值.它用于维护数据库中事务日志记录的顺序.这允许SQL Server维护ACID属性并执行适当的恢复操作.