分析下自己写的SQL Server同步工具的性能和缺陷

分析下自己写的SQL Server同步工具的性能和缺陷

1. C#同步SQL Server数据库Schema

2. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

通过测试我写的同步程序,得出结论:

1.程序第一次调用SQLBulkCopy会耗时较长

2.同步程序放在目标机器在耗时方面相对少些

测试数据:

declare @varI varchar(200)

set @varI=0

while(@varI<100000)

begin

set @[email protected]+1;

insert into [pink].[dbo].[Customers] ([CustomerName],[IsNewData])values (‘test‘+@varI, 1);

end

统计数据:(单位:秒)

source--> destination

sync program host on source host:

19.1431558

1.8603441

1.4992773

1.7913309

sync program host on destination host:

20.1563122

2.3704811

3.2282182

1.1696436

1.5312439

sync program host on non-source and non-destination host:

13.072742

1.8705590

1.2103618

另外测了下100万条数据的一组数据:

source主机插入数据耗时2分钟55秒

destination主机删除数据耗时6秒

sync program host on source host:

22.1482469

sync program host on destination host:

18.5495432

通过测试发现了程序的缺陷:

当第二次同步时,查询条件到10万条已存在的记录时,就已经超过限制:

报错:internal error: Server stack limit has been reached. Please look for potentially deep nesting in your query, and try to simplify it.

原因:This issue occurs because SQL Server limits the number of identifiers and constants that can be contained in a single expression of a query. The limit is 65,535.

问题代码:

string whereClause = " where ";

while (readerSource.Read())

{

isSourceContainsData = true;

whereClause += " " + primaryKeyName + "!=‘" + readerSource[primaryKeyName].ToString() + "‘ and ";

}

whereClause = whereClause.Remove(whereClause.Length - " and ".Length, " and ".Length);

readerSource.Close();

解决方案:

1。把查询条件分成多个查询条件

2。批量同步,比如100条100条的同步

时间: 2024-10-11 00:00:08

分析下自己写的SQL Server同步工具的性能和缺陷的相关文章

在Win8.1系统下如何安装运行SQL Server 2005 (以及安装SQL Server 2005 Express打补丁)

博主最近在Win8.1上安装SQL Server2005,不料每每到报错(为此博主不惜重装了系统) 后来发现在Win8.1上需要替换两个文件,这才顺利解决这个问题. http://www.ithome.com/html/win8/57118.htm 按正常情况,在Win8/Win8.1系统下安装微软的SQL Server 2005套件会存在兼容问题,即使安装完,最后的结果就是导致其服务项无法正常启动. 如果用户创建使用的项目非要按照SQL Server 2005的标准进行运行和调试情况下,那如何

自己写的sql server触发器练练--高手请您跳过吧

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER TRIGGER [insertReplyToic] ON [dbo].[bbsReplyTopic] AFTER insertAS BEGIN --SET NOCOUNT ON; -- Insert statements for trigger here declare @uid int,@topicId int,@Rcontent nvarchar(max),@Rtime datetime,@c

微软SQL Server第三方工具使用分享

监控并优化SQL Server性能,以及识别和解决SQL Server数据库中的性能瓶颈,这些对于数据库管理员(DBA),开发人员和应用程序支持团队来说都是一项艰巨的任务. SQL Server第三方性能监控工具要比产品自带的工具更加灵活,而且它们会为性能相关的数据提供一个集中存储库.此外,它们易于使用并且还能提供对所有 SQL Server性能的实时可视化.第三方监控工具可以协助监控SQL Server和数据库性能,解决基于阈值和趋势预警的潜在问题,并隔离产生应用程序性能问题的根本原因. 这些

SQL数据库同步工具(开辟数据同步工具)2.0 中文免费版

SQL数据库同步工具(开辟数据同步工具)本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式.这样设计的目的是为了减轻服务器的压力,让系统更加流畅. 本系统分为客户端和服务器两个部分,其中客户端承担了系统绝大数事务,服务器只是简单的执行客户端传送的命令,属于典型的C/S胖客户端瘦服务器模式.这样设计的目的是为了减轻服务器的压力,让系统更加流畅. 客户端负责采集分布数据库中的数据,然后汇总到服务器.客户端需要配

sql server管理工具连接远程服务器sql azure出现异常关闭

我本机装了sql server 2014开发版 ,我用ssms连接sql azure没问题.今天装完最新vs2012/2013 update后,启动ssms连接sql azure就出现异常.我修复下管理工具也不行. 其它机器上安装sql server管理工具都能连接上. 打微软800-820-3800开case,人家拒绝开,他们居然说这是sql azure问题,跟他们无关! 其实只要连接远程服务器都出现异常关闭程序,只能连接本地服务器,和sql azure无关啊! 火了,自己研究,终于 ....

使用Visual Studio下自带的SQL Server Express

软件环境:Windows7(x64) + Visual Studio 2010 + SQL Server Express 2008 1.配置数据库 装VS2010不小心把自带的SQL Server 2008 Express也装上了,后来要用SQL Server 2008,试了N多个办法就是装不上,微软的东西这点让人很是不爽.重装系统?No Way!自带的Express版难道不能用?这么非常小巧,要是能用以后就不装又大又难伺候的正式版SQL Server了,网上搜索一下,还真的可以~~ A.打开S

SQL Server磁盘I/O性能分析

SQL Server中的I/O操作类型: 1.对于内存中没有缓存的数据,第一次访问时需要将数据从所在的页面从数据文件中读取到内存中 2.在任何Insert/Update/Delete提交前,SQL Server需要保证日志记录能够写入到日志文件中 3.当SQL Server做Checkpoint时,需要将内存缓冲区中已经发生修改的数据页面同步到硬盘的数据文件中,一般一分钟一次Checkpoint.如果修改较多,频率高一些,写的数量 和上次checkpoint依赖发生的数据修改量有直接关系 4.当

多线程下不反复读取SQL Server 表的数据

在进行一些如发送短信.邮件的业务时,我们常常会使用一个表来存储待发送的数据,由后台多个线程不断的从表中读取待发送的数据进行发送.发送完毕后再将数据转移到历史表中,这样保证待发送表的数据普通情况下不会太多.如待发送表结构为: Create Table SMS(ID int not null identity(1,1),Content varchar(1024),Status int not null,CreateTime datetime); Status 取值:0未读取 1已读取 这样设计的优点

Sql Server同步之订阅

1.新建一个订阅 2.订阅新建完成之后,先选择发布端 3.选择需要同步的组 4.选择目标数据库 5.选择链接发布端方式,采用sql server login 6.选择执行同步的计划 7.选择是立马执行还是等其他组同步完再执行 8.Finish.