首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么时态表记录事务的开始时间?

为什么时态表记录事务的开始时间?
EN

Database Administration用户
提问于 2016-07-07 14:04:27
回答 1查看 2.8K关注 0票数 10

在更新时态表中的行时,该行的旧值存储在历史表中,事务开始时间为SysEndTime。当前表中的新值将使事务开始时间作为SysStartTime

SysStartTimeSysEndTime是时态表使用的datetime2列,用于记录某一行为当前版本时的情况。事务开始时间是包含更新启动的事务的时间。

BOL说:

系统datetime2列中记录的时间基于事务本身的开始时间。例如,插入在单个事务中的所有行都将在与SYSTEM_TIME周期的开始对应的列中记录相同的UTC时间。

示例:我开始在20160707 11:00:00上更新我的Orders表中的所有行,事务需要5分钟才能运行。这将在历史记录表中为每一行创建一行,其SysEndTime20160707 11:00:00。当前表中的所有行都有一个SysStartTime of 20160707 11:00:00

如果有人在20160707 11:01:00上执行查询(当更新运行时),他们将看到旧值(假设默认读取提交隔离级别)。

但是,如果有人要使用AS OF语法查询时态表,就像在20160707 11:01:00一样,他们会看到新的值,因为他们的SysStartTime20160707 11:00:00

对我来说,这意味着它不能像当时那样显示那些行。如果它使用事务结束时间,那么问题就不会存在。

问题:这是故意的吗?我是不是遗漏了什么?

我认为它使用事务开始时间的唯一原因是它是事务启动时唯一的“已知”时间。它不知道事务何时开始结束,在结束时应用结束时间需要时间,这将使其应用的结束时间无效。这有道理吗?

应该允许您重新创建该问题。

EN

回答 1

Database Administration用户

发布于 2016-10-21 20:59:32

在提交事务时,所有数据都必须写入数据页(内存中和日志文件中的磁盘中)。包括SysStartTimeSysEndTime列。在事务结束时间实际完成之前,如何知道它的结束时间?

除非您能够预测未来,否则使用事务启动时间是唯一的选择,即使它可能不那么直观。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/143241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档