分析下自己写的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 @varI=@varI+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-11-08 23:09:32

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

在Linux 下 访 问MS SQL Server 数 据 库(转载)

server 宁 波 保 税 区 官 委 会 计 算 中 心 董 保 华 ---- Linux 作 为 一 个 免 费 的Unix 类 操 作 系 统, 以 其 开 放 性 源 代 码. 多 任 务.X window 等 特 点 为 众 多 的 用 户 所 采 用, 并 有 很 多 企 业 采 用Linux 来 作 为 其 内 部 网 的 全 功 能 服 务 器(WWW,FTP,Email.DNS). 企 业 的 内 部 网 不 仅 要 提 供 文 本 信 息 的 访 问, 还 要 能 提 供

access数据库-access连接sql server同步更新问题

问题描述 access连接sql server同步更新问题 电脑A数据采集用的是access每天更新一张新表,连接服务器B的sql server同步更新也是一天一张新表,利用什么方式可以解决? 解决方案 用C#写个windows服务程序或winform客户端,定时获取sql server,写入access. 解决方案二: SQL Server和Access中的条件判断语法(case when和iff)连接到数据庫(ACCESSSQL SERVER)两台SQL Server服务器同步问题.

在Win8.1系统下如何安装运行SQL Server 2005

  按正常情况,在Win8/Win8.1系统下安装微软的SQL Server 2005套件会存在兼容问题,即使安装完,最后的结果就是导致其服务项无法正常启动. 如果用户创建使用的项目非要按照SQL Server 2005的标准进行运行和调试情况下,那如何才能在微软最新的Windows8/Windows 8.1下正常使用SQL Server 2005套件呢?下面小编就简单介绍利用文件替换法,解决其服务项无法正常启动的临时方案.当然还是建议使用SQL Server 2008以上的数据库,毕竟现在SQ

sql server-mac下如何连接调用sql Server数据库

问题描述 mac下如何连接调用sql Server数据库 刚刚更换了mac book,所有开发工具都从新适应,现在有个项目需要使用sql Server2005开发,可没有适合的查询sql Server的工具各位大神给小弟指点迷津啊,不胜感激. 解决方案 1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为"启用",还有必须要有密码. 2.需要在ODBC中进行数据源配置,数据源选"SQL SERVER",登录方式使用"

SQL Server Profiler工具

原文:SQL Server Profiler工具 一.SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收集查询信息: 分析性能: 诊断像死锁之类的问题: 调试T-SQL语句: 模拟重放SQL Server活动: 也可以使用SQL Profiler捕捉在SQL Server实例上执行的活动.这样的活动被称为Profiler跟踪. 1.Profiler跟踪 从开始=>所有程序=>Microsoft

用TableDiff产生SQL Server同步脚本

TableDiff是一个控制台,它可以在SQL Server的表之间进行数据比较.另外,因为它是用SQL Server打包的,所以如果你想在不同的数据库环境下检查查找表的话,你就不需要另外购买其他工具. 在不同的数据库环境中,DBA经常不得不在查找表中寻找它们的不同(例如:开发.质量保证和生产等不同的环境下).这些查找表中的数据必须适应于所有的环境,这样才能确保测试的准确. 在市场上有一些非常好的工具可以进行这些比较,也能执行很多其它功能.但是现在你不需要去购买它们了,因为SQL Server已

在WIN7下安装和配置SQL Server 2005 Express Edition(精简版)_mssql2005

折腾了一下午,终于把SQL Server 2005 Express Edition装好,鉴于出现了各种问题,所以把过程写下来.   首先,下载两个文件: ①SQL Server 2005 Express Edition 下载地址:http://files.jb51.net/file_images/article/201501/2015010313472645.aspx ②SQLServer2005_SSMSEE.msi 下载地址:http://files.jb51.net/file_images

多线程下不重复读取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数据库中tempdb性能分析

SQL Server有四个重要的系统级数据库:master,model,msdb,tempdb. 1.SQL Server系统数据库介绍 SQL Server有四个重要的系统级数据库:master,model,msdb,tempdb. master:记录SQL Server系统的所有系统级信息,包括实例范围的元数据,端点,链接服务器和系统配置设置,还记录其他数据库是否存在以及这些数据问文件的位置等等.如果master不可用,数据库将不能启动. model:用在SQL Server 实例上创建的所