AlwaysOn 同步时间的测试
背景
《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同步异常导致时间延长。
测试展示
- 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 同步时间的测试的更多相关文章
- 命令行net time同步时间(内网)
首先还是推荐大家使用Internet时间来同步自己计算机的时间,这样做主要是方便,就是设置一个ntp服务器,我推荐下面的三个ntp服务器地址. time.asia.apple.com //亲测有效 a ...
- SQL Server AlwaysON 同步模式的疑似陷阱
原文:SQL Server AlwaysON 同步模式的疑似陷阱 SQL Server 2012 推出的最重要的功能之一Alwayson,是一个集之前Cluster和Mirror于一体的新功能,即解决 ...
- AlwaysON同步的原理及可用模式
新一代读写分离技术——AlwaysOn 早在SQL Server 2005的时候微软就已经实现了数据库的查询分离技术——发布订阅.但生产库和查询库的同步性能较差,时常出现性能问题,因此在大型生产环境中 ...
- AlwaysON同步过程
<SQL Server 2012实施与管理实战指南>中指AlwaysON同步过程如下: 任何一个SQL Server里都有个叫Log Writer的线程,当任何一个SQL用户提交一个数据修 ...
- centos 7.2 同步北京时间 ,多台机器同步时间
linux 系统没有北京时间,同步的是上海时间 linux 系统有两个时钟:一个是硬件时钟,即BIOS时间:另一个是系统时钟,是linux系统Kernel(内核)时间. 系统开启时,系统会读取硬件时间 ...
- Shell 同步时间脚本
Linux系统同步时间脚本 Linux操作系统,如果时间和网络时间差距太大的话.可能会导致程序,进程启动不了.所以linux系统时间同步显得尤为重要,本文在借鉴网上众多资料后,以centos_6.X系 ...
- Centos7部署ntp服务器同步时间以及直接将本地时间同步为北京时间
一.查看配置 查看时区列表: timedatectl list-timezones|grep Asia 查看当前时间: date 查看当前设置: [root@localhost ~]# timedat ...
- VMware ESXi 5.5无法与Windows 2012 NTP Server同步时间
这次笔者需要面对的环境对时间的同步有比较高的要求, 而虚拟化的环境中时间是比较容易出问题的, 您可以参考上一篇博文为什么Domain controller上的time synchronization非 ...
- Raspberry Pi开发之旅-同步时间
使用htpdate同步时间 由于树莓派板子上没有 RTC 硬件和电池,因此树莓派上的系统时间重启是保存不了的.网上已经有人想到应对 NTP 被防火墙封掉类似的需求了,开源的 htpdate 命令直接使 ...
随机推荐
- 清除WKWebView的缓存
OC写法: swift写法再下下面. 清除WKWebView的缓存,让H5页面一刷新就更新至最新的页面 要区分iOS9.0和8.0两种 - (void)deleteWebCache { if ([[U ...
- [Notes] Timer Comparision when turn influence computing on/off
Overall algorithm – bunny 关闭influence计算 ...
- Slight difference between C++ and C
In C++, results of assignment operation, prefix increment and prefix decrement are all lvalues, the ...
- odoo 10 生产自动领料
分析源码 当 原材料的 补货规则 的 "补货位置" location_id 是 生产单 的 原材料 "目标位置 ", 并且 原材料的 补货规则 的 " ...
- QlikView 权限设置问题和注意
企业级报表通常都涉及到复杂的权限问题, 比如文本级权限和行级权限,某区域经理只能看到该区域的销售数据.QlikView自然也提供了该种功能. 具体方法: 在Edit script中新建一个tab, 输 ...
- C#捕获c++异常
摘自:http://bbs.csdn.net/topics/390665130 .net 40 中,c# 默认情况下只处理SEH的异常.不处理CSE的异常.若你要捕获这类的异常. [HandlePro ...
- Vue组件之自定义表单组件
今天又看了一遍vue的文档,记得之前学习的时候,官方文档中有提过,v-model指令是一个语法糖,做两件事,一个是给表单控件元素绑定value,第二个是当输入时更新绑定的值,不过后来在"表单 ...
- 使用TFS 自动编译时的一点设置
MSBuild参数: /p:VisualStudioVersion=10.0 指定使用的VS编译版本
- 简单的dp
有趣的数:(动态规划,状态转移) #include<stdio.h> ][]; int main() { int n,i; ; i<; i++) dp[i][]=; while(~s ...
- PHP二维数组排序
$arrays 要排序的数组 $sort_key 根据排序的key $sort_order 升序降序 SORT_ASC/SORT_DESC $sort_type 排序key类型 SORT_N ...