我有一个合并复制,已经运行了一年(系统已经活动了好几年,但是由于其他一些问题,我在一年前重新创建了复制)。
一切仍然有效,但当某人(重新)初始化订阅(下载新的订阅数据库)时,需要花费更长的时间并且会出现一些锁定。订阅者是300个带有sql server compact的windows ce设备。
我可以看到,名为MSenumgenerations90
的存储过程是罪魁祸首,它占用了很多IO和CPU。我可以在活动监视器中看到最常见的等待我CXPACKET,我知道这是并行性。我可以看到一些pageiolatch,其中至少有一些是指向tempdb。表msMerge_GenHistory包含超过150万条记录,我试图为其添加索引,以使存储过程中的昂贵操作更快地运行但没有成功。
我的保留期很长。它被设置为60天,但我仍然可以看到MSMerge_GenHistory
中有几代人在一年前重新创建复制时被创建(冷静)但是从最近的一代创建以来似乎已经删除了几代超过2,200万。可能是元数据清理有问题还是这种正常行为?
当CXPACKET等待显示我得到2000 ms / s的缓冲区I / O等待时间并且还有很多IO_COMPLETION等待,当我监视服务器上的磁盘时,我可以看到tempdb文件获得最多的读取和写道。我读过的一件事是你可以为tempdb设置多个文件,它可以减轻tempdb的压力,这可能会对我的情况有所帮助吗?
在合并复制运行时向tempdb添加更多文件是否安全?
更新。 我运行存储过程来获取实际的执行计划,并且有一个排序警告,表示排序正在溢出到tempdb。我猜这是我的问题的原因,sp并行运行并且它溢出到tempdb,并且8个连续的线程正在访问tempdb以尝试排序结果,这就是为什么IO中的等待很高以及为什么CXPACKET是显示!? my sort waring 我怎么能让它停止溢出到tempdb?可以通过更好的索引来完成吗?我无法修改sp,因为它是复制的一部分。欢迎任何帮助。