sqlserver2005事务复制,执行存储过程高cpu问题
在sqlserver2005设置好发布订阅后,把有update和delete的存储过程复制选项为:“复制存储过程执行”,运行后,服务器的cpu很高,以前没有设置发布订阅是...
在sqlserver2005设置好发布订阅后,把有update和delete的存储过程复制选项为:“复制存储过程执行”,运行后,服务器的cpu很高,以前没有设置发布订阅是很低cpu的。用profiler查看,每个与事务有关的存储过程执行都消耗掉500~700cpu,太厉害了。更奇怪的是,我把单个存储过程的所有执行过程事件捕获下来观察,发现消耗cpu的地方不是执行实际语句的时候,而是执行完存储过程后消耗的,如图所示。我觉得是与事务复制有关,但又不知道怎么解决,望各位前辈帮助,谢谢。
因为有些储存过程是影响多条记录的,如果不选择“复制储存过程的执行”,同步的时候会产生N条命令,这样传输和执行的命令就成了N倍,我见到微软的文档也是建议选择“复制存储过程的执行”。
因为语句太多了,而且断断续续,我要找到完整的事件并拼在一起花了些时间,结果如下图,就算是 select 'xxx',cpu一样是很高的,而且从整个过程性能数值累计可以看到消耗cpu的地方不是在sql语句上,而是在RPC:Completed事件附近,即接近结束的时候:
=======================================================================
基本找到原因了,是日志文件过大影响了性能。但为什么会这样呢?经过用profiler把Transactions的事件都显示出来,发现整体时间消耗在某个TransactionLog和SQLTransaction上面,但那2个事件时不有显示cpu消耗的,然后通过日志分析工具,看到执行出错过程之前确实会把相应的复制命令写入到日志里面,如果日志文件太大,这里的写入操作就会占用cpu和花费时间。 展开
因为有些储存过程是影响多条记录的,如果不选择“复制储存过程的执行”,同步的时候会产生N条命令,这样传输和执行的命令就成了N倍,我见到微软的文档也是建议选择“复制存储过程的执行”。
因为语句太多了,而且断断续续,我要找到完整的事件并拼在一起花了些时间,结果如下图,就算是 select 'xxx',cpu一样是很高的,而且从整个过程性能数值累计可以看到消耗cpu的地方不是在sql语句上,而是在RPC:Completed事件附近,即接近结束的时候:
=======================================================================
基本找到原因了,是日志文件过大影响了性能。但为什么会这样呢?经过用profiler把Transactions的事件都显示出来,发现整体时间消耗在某个TransactionLog和SQLTransaction上面,但那2个事件时不有显示cpu消耗的,然后通过日志分析工具,看到执行出错过程之前确实会把相应的复制命令写入到日志里面,如果日志文件太大,这里的写入操作就会占用cpu和花费时间。 展开
2个回答
展开全部
前边的同志不要乱说,在SQL Server 2005里事务复制是应用最为广泛的一种数据同步方案,用于做读写分离是最常用的。仅凭截图没法判断CPU高的原因,楼主最好把trace文件上传一下,看过trace文件以后才能具体情况具体分析。
更多追问追答
追问
谢谢你的回答,由于字数限制回复内容我写在问题补充了。
追答
你这个截图是发布库的情况还是订阅库的情况呢?看你描述应该是发布库的情况。存储过程执行CPU占用高一般不会是因为复制的原因,本身存储过程可能就是需要优化的。另外截图中的ApplicationName列全部都是.Net SqlClent Data Provider,也不是执行复制相关的语句,而是应用程序在执行存储过程。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询