AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 149061
Accepted
MattyZDBA
MattyZDBA
Asked: 2016-09-08 13:55:37 +0800 CST2016-09-08 13:55:37 +0800 CST 2016-09-08 13:55:37 +0800 CST

可用性组中的记录是否可以乱序复制?

  • 772

数据仓库 ETL 过程正在查询可用性组中的只读辅助。ETL 过程使用一分钟的日期时间范围标准和读取提交的隔离级别以增量方式查询单个表。在执行时,符合条件的 5 条记录在主节点上提交,但另外 3 条时间戳比前 5 条稍早(但在条件范围内)的记录仍在打开的事务中。可用性组的性质是否要求所有事务都按 LSN 顺序应用(延迟所有 8 条记录的可见性,直到所有记录都被提交)或者延迟的 3 条记录是否获得稍后的 LSN 并在它们被提交后立即应用,可能在ETL 过程调整了它的日期标准?

sql-server-2012 availability-groups
  • 2 2 个回答
  • 96 Views

2 个回答

  • Voted
  1. Best Answer
    Sean Gallardy
    2016-09-09T04:53:30+08:002016-09-09T04:53:30+08:00

    在执行时,符合条件的 5 条记录在主节点上提交,但另外 3 条时间戳比前 5 条稍早(但在条件范围内)的记录仍在打开的事务中。可用性组的性质是否要求所有事务都按 LSN 顺序应用...

    REDO 要求按顺序应用 LSN,这不会在 AG 内部或外部发生变化。当 REDO 线程工作时,它必须按顺序执行日志记录。

    ...(延迟所有 8 条记录的可见性,直到所有记录都已提交)或者延迟的 3 条记录是否会获得较晚的 LSN 并在它们提交后立即应用,可能是在 ETL 过程调整其日期标准之后?

    没有延迟。在可用性组中,我们不发送单独的交易。我们也不会等待他们做出承诺。

    传输单元是一个 LOG BLOCK,它是按顺序排列的 LOG RECORDS 的集合。这些日志块包含来自数据库中许多不同事务的日志记录,而不仅仅是您正在进行的 ETL 事务。此外,日志块在关闭并刷新到磁盘时发送,这有几个不同的原因,不一定需要来自提交。

    这意味着辅助节点接收有关数据库中正在进行的所有事务的信息,这些事务正在进行更改。在这种情况下,二级交易拥有一些(如果不是全部的话)关于仍然开放的早期交易的信息。

    现在,这触及了另一点。可读辅助服务器不使用read committed隔离级别,实际上它映射到幕后的快照隔离。这就是您看不到与前 3 笔交易有关的任何次要信息的原因。您不能添加nolock到查询中,它不会让您看到数据。

    由于使用了快照隔离,我们将使用版本存储。这意味着如果您在次要事务上启动了一个事务来读取信息,并且在提交主事务上的打开事务时它仍在运行,那么在事务结束之前它不会“看到”它们。这是快照隔离的一部分。

    总结一下:

    1. 运送的是日志块,而不是日志记录,而不仅仅是提交的事务
    2. 是的,关于这些交易的二级信息已经存在
    3. 可读辅助服务器已将读提交(默认)隔离级别自动映射到快照隔离级别
    4. 如果您需要辅助数据,请避免长时间运行的大型事务
    • 4
  2. Nic
    2016-09-08T14:53:46+08:002016-09-08T14:53:46+08:00

    当提交发生时,日志传输发生在辅助副本上。在提交的实际时刻之前,不会移动任何打开的事务。

    因此,在您的情况下,延迟的 3 条记录将在提交后立即应用,这意味着您可以在辅助服务器上看到前 5 条。

    • 0

相关问题

  • SQL Server 2012 在 TempDb 中使用排序创建索引 - 获得 False?

  • SQL Server AlwaysOn 故障转移透明度

  • 为什么 Denali 序列应该比标识列表现更好?

  • SQL Server 不应该支持范围吗?

  • 什么是 SQL Server“德纳利”?什么是新的?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve