背景

《SQL Server 2012实施与管理实战指南》中指AlwaysON同步过程如下:

任何一个SQL Server里都有个叫Log Writer的线程,当任何一个SQL用户提交一个数据修改事务时,
它会负责把记录本次修改的日志信息先记入一段内存中的日志缓冲区,然后再写入物理日志文件(日志固化)。
所以对于任何一个数据库,日志文件里都会有所有数据变化的记录。
对于配置为AlwaysOn主副本的数据库,SQL Server会为它建立一个叫Log Scanner的工作线程。
这个线程专门负责将日志记录从日志缓冲区或者日志文件里中读出,打包成日志块,发送给各个辅助副本。
由于它的不间断工作,才使主副本上的数据变化,可以不断地向辅助副本上传播。
辅助副本上,同样会有两个线程,完成相应的数据更新动作,它们是固化(Harden)和重做(Redo)
固化线程会将主副本Log Scanner所发过来的日志块写入辅助副本的磁盘上的日志文件里(这个过程被称为"固化")。
而重做线程,则负责从磁盘上读取日志块,将日志记录翻译成数据修改操作,在辅助副本的数据库上完成。
当重做线程完成其工作以后,辅助副本上的数据库就会跟主副本一致了。AlwaysOn就是通过这种机制,保持副本之间的同步。
重做线程每隔固定的时间点,会跟主副本通信,告知它自己的工作进度。主副本就能够知道两边数据的差距有多远。

这些线程在工作上各自独立,以达到更高的效率。Log Scanner负责传送日志块,而无须等待Log Writer完成日志固化;辅助副本完成日志固化以后就会发送消息到主副本,告知数据已经传递完毕,而无须等待重做完成。其设计目标,是尽可能地减少AlwaysOn所带来的额外操作对正常数据库操作的性能影响。

  这个同步并不是数据的实时同步,当主副本数据发生变化时,同步模式下的辅助副本并不能立即取到变化的数据。哈哈 这个是不是很坑?据我所知有大型的软件产品因为这个陷阱吃了大亏!!

那么微软为什么不作成真正的实时同步呢?比如世面上的moebius集群,还能自动作负载均衡这多霸气? 我想微软还是从很多严谨性方面考虑吧,这里就不过多的废话了,下面进入这个同时间差到底有多大呢?

-------------------------------------------转载请注明出处 ----------http://www.cnblogs.com/double-K/p/5131563.html--------------------------------

测试环境

SELECT @@VERSION 结果:

Microsoft SQL Server 2014 - 12.0.4100.1 (X64)

Apr 20 2015 17:29:27

Copyright (c) Microsoft Corporation

Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)

系统server 2012 、sql 2014

3节点AlwaysOn 拓扑图:

实例名

IP

节点属性

VPC2012_1

192.168.2.55

主节点

VPC2012_2

192.168.2.56

同步辅助节点

VPC2012_3

192.168.2.57

异步辅助节点

工具准备

自开发测试程序、系统性能监视器、AlwaysOn监视器,系统性能计数器。

自开发程序介绍:

连接主副本和其中一个辅助副本,在设定的时间内循环 在主副本执行insert 操作,并根据设置的时间间隔,在辅助节点查询所插入的数据,如果查询到数据则成功,否则失败。

并发数:模拟并发压力,启动线程数。

等待时间:查询数据后查询等待的时间。

执行时间:模拟场景运行的时间。

系统性能监视器

通过系统性能监视器察看是否执行过程用有内存、磁盘队列、CPU压力。

性能计数器:

主要收集3个节点以下计数器观察AlwaysOn 同步状态

batch requests/sec       主要用于检查系统处理能力是否到达极限。

avg.disk read queue lenth     主要用于检查是否由于IO瓶颈导致时间延迟。

avg.disk write queue lenth     主要用于检查是否由于IO瓶颈导致时间延迟。

SQLServer:Database Replica  主要用于检查是否由于AlwaysOn同步异常导致时间延长。

测试展示

  1. AlwaysOn压力测试工具

a)         测试以50并发 等待200毫秒开始,逐步增加等待时间查看并发数下的等待时间,当失败数为0时,增加并发数,测试等待时间下最大支持的并发数。

测试1同步节点

经过增加等待时间到1000毫秒 几次执行失败数均为0

增大并发测试 500并发左右1000毫秒出现失败情况

缩短等待时间错误数量大量增加

异步节点测试:

异步节点在节点无任何查询压力下等待时间大约为1200毫秒

  系统指标

   性能监控器监控期间CPU、内存、IO队列 未出现明显压力。

  性能计数器

   

  AlwaysOn仪表盘监测

    

-------------------------------------------转载请注明出处 ----------http://www.cnblogs.com/double-K/p/5131563.html--------------------------------

结果

    并发测试 500并发内AlwayOn 需要1000毫秒左右才能完成数据可读,异步节点在节点无任何查询压力下等待时间大约为1200毫秒。

    本例中的测试结果只是为了演示说明AlwaysOn同步节点数据可读时间的差异,而不是提供准确时间。

    本例结果均针对本机AlwaysOn环境,及简单的测试语句,由于硬件环境,程序处理复杂度,数据量等等情况不同,结果也必不相同!!

AlwaysOn 同步时间的测试的更多相关文章

  1. 命令行net time同步时间(内网)

    首先还是推荐大家使用Internet时间来同步自己计算机的时间,这样做主要是方便,就是设置一个ntp服务器,我推荐下面的三个ntp服务器地址. time.asia.apple.com //亲测有效 a ...

  2. SQL Server AlwaysON 同步模式的疑似陷阱

    原文:SQL Server AlwaysON 同步模式的疑似陷阱 SQL Server 2012 推出的最重要的功能之一Alwayson,是一个集之前Cluster和Mirror于一体的新功能,即解决 ...

  3. AlwaysON同步的原理及可用模式

    新一代读写分离技术——AlwaysOn 早在SQL Server 2005的时候微软就已经实现了数据库的查询分离技术——发布订阅.但生产库和查询库的同步性能较差,时常出现性能问题,因此在大型生产环境中 ...

  4. AlwaysON同步过程

    <SQL Server 2012实施与管理实战指南>中指AlwaysON同步过程如下: 任何一个SQL Server里都有个叫Log Writer的线程,当任何一个SQL用户提交一个数据修 ...

  5. centos 7.2 同步北京时间 ,多台机器同步时间

    linux 系统没有北京时间,同步的是上海时间 linux 系统有两个时钟:一个是硬件时钟,即BIOS时间:另一个是系统时钟,是linux系统Kernel(内核)时间. 系统开启时,系统会读取硬件时间 ...

  6. Shell 同步时间脚本

    Linux系统同步时间脚本 Linux操作系统,如果时间和网络时间差距太大的话.可能会导致程序,进程启动不了.所以linux系统时间同步显得尤为重要,本文在借鉴网上众多资料后,以centos_6.X系 ...

  7. Centos7部署ntp服务器同步时间以及直接将本地时间同步为北京时间

    一.查看配置 查看时区列表: timedatectl list-timezones|grep Asia 查看当前时间: date 查看当前设置: [root@localhost ~]# timedat ...

  8. VMware ESXi 5.5无法与Windows 2012 NTP Server同步时间

    这次笔者需要面对的环境对时间的同步有比较高的要求, 而虚拟化的环境中时间是比较容易出问题的, 您可以参考上一篇博文为什么Domain controller上的time synchronization非 ...

  9. Raspberry Pi开发之旅-同步时间

    使用htpdate同步时间 由于树莓派板子上没有 RTC 硬件和电池,因此树莓派上的系统时间重启是保存不了的.网上已经有人想到应对 NTP 被防火墙封掉类似的需求了,开源的 htpdate 命令直接使 ...

随机推荐

  1. Linux字符串截取和处理命令 cut、printf、awk、sed、sort、wc

    1. cut [选项] 文件名 -f  列号 #提取第几列(分隔符默认为\t) -d  分隔符 #指定分隔符 例如:cut -f 2 a.txt #截取文件a.txt内容的第二列(列号从1开始) cu ...

  2. HTML和CSS设置动态导航以及CSS中伪元素的简单说明

    HTML页面代码: <!DOCTYPE html> <html> <head> <title>Test</title> <meta c ...

  3. Python 变量范围

    1.本地变量,全局变量 Python 中有2种变量作用范围本地变量,全局变量. 变量搜索路径是:本地变量->全局变量 它们简而言之就是本地变量的值只在本地作用范围有效.而全局变量的作用范围是全局 ...

  4. Intelij IDEA 2016.3安装mybatis插件并激活教程

    转载自:http://blog.csdn.net/solo_talk/article/details/53540449 现在Mybatis框架越来越受欢迎,Intelij IDEA这个编辑器逐渐成为很 ...

  5. 当我我们用new操作符创建对象的时候,都发生了些什么?

    //下面这段代码是javascript设计模式与开发实践上的一段代码 function Person( name ){            this.name = name;        };   ...

  6. sharedpreferences的简单使用

    sharedpreferences 以键值对的方式将数据保存在xml   创建:SharePreferences sp = getShareferences(name,context.---) con ...

  7. TCP/IP入门(3) --传输层

    原文:http://blog.csdn.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主 ...

  8. 提高代码质量 CheckStyle FindBugs PMD

    提高代码质量-工具篇 注:这是一篇翻译文章,原文:How to improve quality and syntax of your Android code,为了理解连贯,翻译过程中我修改了一些陈述 ...

  9. Fiddler 手机端证书安装No root certificate was found

    测试过程中发现在浏览器中访问代理服务器及端口,不通,提示要安装证书. 点击证书安装时,提示错误: No root certificate was found,Have you enabled HTTP ...

  10. java获取文件名的三种方法

    import java.io.File; import java.util.Arrays; public class FileName { /** * @param args */ public st ...