数据仓库ETL进程正在查询可用性组中的只读辅助程序.ETL进程使用一分钟的日期时间范围标准递增地查询单个表,并读取提交的隔离级别。在执行时,在主目录上提交了5条符合标准的记录,但另有3条记录的时间戳略早于前5条(但在标准范围内),仍处于开放事务中。可用性组的性质是否要求所有事务按LSN顺序应用(将所有8条记录的可见性延迟到全部提交),还是延迟的3条记录在提交后立即应用,可能是在ETL流程调整其日期标准之后?
发布于 2016-09-08 12:53:30
在执行时,在主目录上提交了5条符合标准的记录,但另有3条记录的时间戳略早于前5条(但在标准范围内),仍处于开放事务中。可用性组的性质是否要求以LSN顺序应用所有事务.
重做要求LSNs按顺序应用,这不会改变AG的内部或外部。当重做线程工作时,它必须按照顺序执行日志记录。
..。(将所有8条记录的可见性延迟到全部提交),还是延迟的3条记录会在提交后立即应用到LSNs中,可能是在ETL过程调整其日期标准之后吗?
不能拖延。在可用性组中,我们不发布单独的事务。我们也不会等待他们的承诺。
传输单元是一个日志块,按照顺序,它是日志记录的集合。这些日志块保存着数据库中许多不同事务的日志记录,而不仅仅是您正在进行的ETL事务。此外,当日志块被关闭并刷新到磁盘时,日志块会被发送到磁盘,这是由于几个不同的原因而发生的,不一定需要来自提交。
这意味着辅助程序接收数据库中正在进行更改的所有事务的信息。在这种情况下,辅助程序有一些(如果不是全部的话)有关先前仍然打开的事务的信息。
现在,这又到了另一个点。可读辅助服务器没有使用read committed隔离级别,实际上它被映射到隐藏的快照隔离。这就是为什么您无法看到与前面的3项事务相关的辅助信息。不能将nolock添加到查询中,它不会让您查看数据。
由于使用快照隔离,我们将使用版本存储。这意味着,如果您在二级上启动了一个事务以读取信息,并且在提交主服务器上打开的事务时它仍在运行,则在事务结束之前,它不会“看到”它们。这是快照隔离的一部分。
概括地说:
发布于 2016-09-07 22:53:46
当提交发生时,日志传输会发生在辅助副本上。在提交的实际时刻之前,任何打开的事务都不会被移动。
因此,在您的情况下,延迟的3记录将在提交后立即应用,这意味着您可以在次要部分看到前5条记录。
https://dba.stackexchange.com/questions/149061
复制相似问题