数据库镜像——事务日志传输方式间的性能差异

数据库国产化探究及升级改造过程指导 当前官网最新版本为DM8,相较于目前主流产品架构:不同特性依靠不同内核去实现,DM8独特采用了双存储引擎架构,行存储引擎和列存储引擎可相互配合、协同工作。同时实现了计算层和存储层的分离,同一内核既支持共享存储式集群,也支持分布式事务集群。 阅读详情

数据库镜像——事务日志传输方式间的性能差异

背景

SQL Server主服务器和镜像服务器传输消息和日志记录的次序根据事务安全性的设置而不同:同步传输和异步传输,两者的性能差异到底有多大呢?

 性能测试

-- 创建测试表

create table t1(c1 int not null)

 

set nocount on

go

 

-- 开始测试计时

declare @i int;

declare @v int;

set @i=1;

while(@i<=10000)

begin

  set @v=RAND()*1000;

  insert into t1(c1) values(@v);

  set @i=@i+1;

end

 

-- 测试结果

如果主服务器和镜像服务器位于不同的硬件机器上,在主服务器上执行上面的测试代码:

synchronous 第一次01:10  第二次01:14

asynchronous 第一次00:00 第二次00:00(大约700ms左右)

异步的执行时间明显少于同步模式下的执行时间,“联网”图如下所示:

 

 

从网络传输的曲线图中也可以看出,异步传输的时间要明显短于同步传输,而且传输的数据量也要明显少很多。

另外,如果主服务器和镜像服务器如果是位于一台硬件服务器上的不同实例,这样的话就有可能出现,异步反而比同步花费更多执行时间的情况。(本本上的执行时间是:同步18秒,异步23秒左右)

         【出自blog.csdn.net/jerrynet,转载请注明作者出处】

 

补充阅读(摘自官方镜像文档)

SQL Server将事务事件记录在事务日志中时,日志记录被写入磁盘前暂时存放在日志缓冲区中。 数据库镜像时,每次日志缓冲区被输出到硬盘时(硬化),主服务器也将相同的日志记录块发送到镜像服务器。

1. safety设置为FULL,只要SQL Server主服务器硬化它的日志记录块,就同时将相同的日志记录块发送到镜像服务器,并认为本地的日志I/O和远程镜像服务器的日志I/O从本质上来说是一样 的。这种传输称为同步的,因为在一个事务提交之前,主服务器既要等待本地的I/O(硬化)还要等待等待镜像服务器有关完成I/O(硬化)的答复。

每次主服务器或者镜像服务器硬化日志缓冲区时,都会将缓冲区中最高的日志序列号(LSN+ 1作为mirroring_failover_lsn记录在元数据中。mirroring_failover_lsn用于协商事务日志最后的保障点,这样两个伙伴数据库就可以在初始化时保持同步,在故障转移后也保持同步。

当主服务器发送日志记录给镜像服务器时,主服务器上的mirroring_failover_lsn通常会提前一些。镜像服务器硬化日志记录时会记录其mirroring_failover_lsn,然后回复主服务器。但是等主服务器接收到来自镜像的确认信息时,主服务器可能已经开始硬化新的一组日志记录了。

8显示了主服务器和镜像服务器safetyFULL时的一个事件序列示例。

8. SafetyFULL (同步传输)事件序列的示例。

 

Server A

Server B

Principal, Synchronized

Mirror, Synchronized

开始一个包含数据更新的多语句事务

 

主数据库的事务日志记录被放入事务日志缓冲区

 

事务日志缓冲区内容被写入磁盘(硬化),日志记录块被发送到镜像服务器,主服务器记录日志块的 mirroring_failover_lsn,然后等待镜像服务器的确认。 

 

 

镜像服务器接收日志记录并放入事务日志缓冲区

 

镜像服务器将日志缓冲区输出到磁盘,记录 mirroring_failover_lsn,然后通知主服务器日志块已被硬化

主服务器接收日志记录已被镜像服务器硬化到磁盘的通知

镜像服务器继续重新执行REDO队列中的事务日志

包含了COMMIT的日志写入事务日志缓冲区

 

事务日志缓冲区内容被写入磁盘(硬化),

包含了COMMIT的日志记录块被发送到镜像服务器,主服务器记录日志块的 mirroring_failover_lsn,然后等待镜像服务器的确认。 

 

 

镜像服务器接收日志记录并放入事务日志缓冲区

 

镜像服务器将日志缓冲区输出到磁盘,记录the mirroring_failover_lsn,然后通知主服务器日志块已被硬化

主服务器接收日志记录已被镜像服务器硬化到磁盘的通知,至此整个事务提交

镜像服务器继续重新执行REDO队列中包含了COMMIT的事务日志,修改数据页面

新事务被写入主服务器的日志缓冲区

 

 

 

以上事件序列中关键的一点就是:当 safety设置为FULL时,主服务器硬化日志缓冲区以及将日志缓冲区中日志记录的副本发送到镜像服务器,二者是同时进行的。然后主服务器开始等待自己的I/O以及镜像服务器的I/O,两个I/O都完成后才认为事务完成了。当主服务器接收到来自镜像的答复后,再开始处理下一次硬化。

safety设置为FULL时,尽管主服务器和镜像服务器之间协调紧密,但是数据库镜像不是分布式事务,也不使用两阶段提交协议。

·         在数据库镜像中,两个事务分别在两台服务器上执行,并不是一个跨服务器的分布式事务。

·         数据库镜像不使用伙伴服务器作为分布式事务中的资源管理器。

·         数据库镜像事务不经历准备和提交阶段。

·         最重要的是,镜像服务器上事务提交失败不会导致主服务器上的事务会滚,这一点与分布式事务不同。

2. safety设置为OFF时,主服务器不等待来自镜像服务器的确认消息,因此主服务器上已提交事务数量可能多于镜像服务器,如图9所示:

9. SafetyOFF (异步传输)事件序列的示例。

 

Server A

Server B

Principal, Synchronizing

Mirror, Synchronizing

开始一个包含数据更新的多语句事务

 

数据更新的事务日志记录被写入事务日志缓冲区

 

事务日志缓冲区内容被强制输出到磁盘(硬化),日志记录块被发送到镜像服务器,主服务器记录日志块的 mirroring_failover_lsn 

 

包含了COMMIT的日志被写入事务日志缓冲区,加上其他的事务活动

镜像服务器接收日志记录并放入事务日志缓冲区

事务日志缓冲区内容被写入磁盘,

包含了COMMIT的日志记录块被发送到镜像服务器

镜像服务器将日志缓冲区输出到磁盘,记录the mirroring_failover_lsn,然后通知主服务器日志块已被硬化

提交事务

镜像服务器继续重新执行REDO队列中的事务日志

 

镜像服务器接收日志记录并放入事务日志缓冲区

 

镜像服务器将日志缓冲区输出到磁盘,记录the mirroring_failover_lsn,然后通知主服务器日志块已被硬化

 

         【出自blog.csdn.net/jerrynet,转载请注明作者出处】

 

SQL Server 2019 Always On实战:从数据库备份还原到数据同步的完整链路解析 本文深入解析SQL Server 2019 Always On高可用架构,从数据库备份还原到实时数据同步的完整技术链路。通过详细的核心机制分析和实战案例,帮助DBA和系统工程师理解数据同步背后的设计哲学,优化配置以实现高效稳定的高可用环境。 阅读详情

相关推荐

数据库镜像vs AlwaysOn可用性组:5个关键场景下的选型指南

本文深入比较了数据库镜像和AlwaysOn可用性组在金融、电商、医疗等五大关键场景下的技术选型。通过真实测试数据和故障切换案例,揭示了高可用性、灾难恢复技术在不同业务需求下的最佳实践,帮助企业在数据一致性与系统性能做出明智选择。

ll5678的博客 672

sqlserver数据库镜像运行模式

运行模式:   从大层面来说,SQL Server镜像只有两种模式:高安全模式和高性能模式。两种模式的主要区别在于在事务提交后的操作。可以从图1-1中查看运行模式。   在高性能模式下,主体服务器不需要等待镜像服务器响应即可提交事务。   在高安全性模式,需要把事务同步到镜像并得到响应后才最终提交主体服务器事务   这种模式是同步模式,可以细分为带有自动故障转移(即有见...

weixin_30338481的博客 267

SQL Server AlwaysOn跨机房低带宽高可用实战

SQL Server AlwaysOn可用性组是一种基于日志流式传输的高可用与灾难恢复技术,其核心原理是主库事务日志块实时发送至同步副本并等待ACK确认,从而实现RPO=0的数据零丢失保障。该机制对网络带宽敏感但并非强依赖,通过日志压缩、TCP窗口调优、动态仲裁等工程化手段,可在10Mbps等受限链路下稳定运行。技术价值在于兼顾强一致性与业务连续性,广泛应用于金融支付、电商订单等对SLA要求严苛的场景。本文聚焦真实生产环境中的跨机房搬迁实践,深入解析AlwaysOn在低带宽、无专线、兼管运维等现实约束下的落

diaozhiwa5526的博客 383

SQL Server高可用——日志传送(4-1)——概论

本文作为学习总结,部分内容出自联机丛书及其他书籍 日志传送是什么? SQLServer 2012之前(2012出现了AlwaysOn),SQLServer存在四大高可用(集群/群集、日志传送、镜像和复制)。本主题主要讨论其中的日志传送功能。但是由于工作原因,只能谈论到使用级别,不做太深入的研究。 现在先来说说日志传送(Log Shipping)是什么? 它是高可用的其中...

数据库 382

SQL Server事务日志–第2部分–日志性能问题的主要原因

In the previous article, we have examined the physical structure of the transaction log and discussed WAL algorithm. Now I will take you on a journey through the most common reasons for experiencing...

culuo4781的博客 618

SQL Server 2008数据备份与还原的原理是什么?

为什么SqlServer有完整备份、差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式、完整模式和大容量日志模式这三种恢复模式。本文内容适用于2005以上所有版本的SqlServer数据库。   单就操作过程而言,SqlServer数据库备份和恢复过程是相当简单的,可以通过ManagementStudio的图形界面进行操作,也可以使用几句T-SQL语句完成。但要明白备份恢复的整个...

weixin_30940783的博客 381

[Oracle]Data Guard数据库灾难防护

Oracle9i Data Guard 通过使用称为standby database的数据库来防止出现数据的灾难。它通过将primary database数据库的重做日志传到并应用到standby database数据库来使standby database数据库与primary database数据库同步:可以将重做日志直接从primary database数据库同步写到standby datab

DSG顾利斌-Oracle数据库实时同步复制、容灾备份、存储归档与迁移技术 2268

InterSystems IRIS与Caché/M语言深度解析:医疗数据库系统的核心技术

InterSystems IRIS与Caché/M语言深度解析:医疗数据库系统的核心技术

“种一棵树最好的时间是十年前,其次就是现在。” 1674

深入学习SQL Server与Transact-SQL

SQL Server是由微软公司开发和维护的一种关系型数据库管理系统(RDBMS),广泛用于Windows平台,支持企业级应用的数据存储和处理需求。SQL Server提供了一系列的服务和工具,支持数据存储、检索、分析和报告等操作,以帮助组织高效地管理数据资源。用户定义函数和存储过程都是SQL Server中的可重用代码块。函数通常用于封装一些操作,以简化查询,而存储过程则可以执行更复杂的数据库操作,包括插入、更新、删除和查询。-- 创建一个简单的用户定义函数ASBEGINEND;

weixin_30653091的博客 1100

OracleData Guard数据库灾难防护

Oracle9i Data Guard 通过使用称为standby database的数据库来防止出现数据的灾难。它通过将primary database数据库的重做日志传到并应用到standby database数据库来使...

161

【DG】DG的3种保护模式

【DG】DG的3种保护模式 DG提供了3种数据保护模式:最大保护(Maximum Protection)、最高性能(Maximum Performance)和最高可用(Maxim...

coco3600的博客 392

双活数据中心容灾解决方案与数据库备份实战设计

RTO(Recovery Time Objective)指系统从中断到恢复可用的最大容忍时;RPO(Recovery Point Objective)表示可接受的数据丢失量。这两个指标并非由IT部门随意设定,而应基于业务影响分析(BIA)得出。例如,金融交易系统可能要求RTO<5分钟,RPO≈0秒;而内部OA系统可接受RTO<24小时,RPO<24小时。为此,需建立业务系统分级模型,并与技术指标对齐:业务系统类别关键性等级示例系统RTO要求RPO要求。

weixin_36369848的博客 1663

芯片厂落地背后:嵌入式开发必懂的SoC启动与固件烧录全解析

芯片制造是半导体产业链的核心环节,从晶圆制造到封装测试,每一步都影响着最终产品的性能与成本。对于嵌入式开发者而言,理解芯片从设计到落地的全流程,有助于更深刻地掌握SoC芯片启动原理、MCU选型逻辑以及固件下载与烧录方法。无论是使用Keil MDK配置芯片支持包,还是通过J-Flash烧录固件,抑或处理STM32CubeMX固件库下载失败等高频问题,背后都离不开对芯片底层机制的认识。本文以芯片产业事件为引,梳理芯片设计、制造、封测的关键环节,并结合实际工程场景,讲解芯片启动流程、bin文件合并、电源芯片设计等

congjukun0600的博客 494

VPS跨平台迁移实战:从AWS/Linode到DigitalOcean的零中断方案

VPS迁移本质是运行时环境契约的重构,而非简单文件搬运。其核心涉及虚拟化层差异(如KVM vs ENI)、网络栈行为(如ARP响应机制)、存储I/O路径(如virtio-blk驱动兼容性)及安全策略逻辑(如SSH密钥注入原子性)等底层原理。技术价值在于实现数据强一致性、配置可复现性与服务高可用性,支撑中小团队降本增效、独立开发者架构整合及外包项目合规交付。典型应用场景包括云厂商切换(AWS EC2/Linode/Rackspace→DigitalOcean)、老旧服务器整合及多环境标准化治理。本文聚焦真实业

weixin_30367169的博客 295

基于Redis构建百万级并发Locust分布式压测集群架构与实战

在软件性能工程领域,分布式系统架构是应对高并发场景的核心解决方案。其基本原理是通过将计算任务分解,由多个节点并行处理,以突破单机资源瓶颈,实现水平扩展。这一技术价值在于能够真实模拟海量用户负载,为系统容量评估和瓶颈定位提供可靠依据,广泛应用于互联网、金融、物联网等高并发业务场景的性能测试与容量规划。本文聚焦于性能测试工具Locust,针对其原生分布式模式在大规模Worker节点下Master单点压力与协调瓶颈的痛点,深入探讨如何引入Redis这一高性能内存数据库作为分布式协调中心。通过利用Redis的Pub

weixin_30471561的博客 342

告别单点故障:手把手教你用Windows Server 2016和SQL Server 2016搭建AlwaysOn高可用集群(含域控配置避坑点)

本文详细介绍了如何使用Windows Server 2016和SQL Server 2016搭建AlwaysOn高可用集群,涵盖域控配置、故障转移集群设置及高级配置技巧。特别强调了实际部署中的常见陷阱和优化建议,帮助企业实现数据库零宕机目标,提升业务连续性。

weixin_31421613的博客 291

SQL Server跨机房AG容灾实战:从同步模式到DNS监听器的全栈设计

SQL Server AlwaysOn可用性组(AG)是企业级高可用的核心技术,其原理基于日志传送、副本同步与故障转移仲裁机制,技术价值在于保障业务连续性与数据一致性。但在跨地域场景下,传统同城双活方案失效,网络延迟、防火墙策略、存储差异、DNS传播等非数据库因素成为RTO/RPO达标的关键瓶颈。本文聚焦‘跨机房AG’这一高频搜索场景,深入解析异步提交+主动监控的RPO权衡逻辑,以及DNS-Based Listener替代群集IP的落地实践,覆盖网络端口、存储健康、JDBC连接参数等真实生产环境中的‘脏活累

lanmh的专栏 366
上一篇: 主机名反查IP
下一篇: update的顺序
jerrynet
博客等级 码龄24年 2粉丝 16原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值