我有一个事务复制拓扑如下:
纽约出版数据库同一台服务器拥有分销商
纽约 - 订阅者
LON - 订阅者
HK - 订阅者
我们正在使用沼泽标准的单向事务复制。所有机器 SQL 2008 R2
快照可以很好地应用于所有订阅者,然后开始分发命令,正如您所期望的那样,但仅对于一个订阅者(伦敦),一大堆 2000-400 万个命令就会“卡住”。您可以在 msrepl_commands 中看到命令,在 msrepl_transaction 中可以看到事务。复制监视器显示有 xxxxx 未传递的命令。所有命令都被毫无问题地传递给其他 2 个订阅者。
问题是他们只是呆在那里。复制监视器说没有什么可复制的,什么也没有发生,它们只是停留在原地。我找到的唯一方法是拆除订阅并重新初始化!?!
我知道 NY 和 Lon 之间存在网络“信号”,我可以在 msrepl_errors 中看到存在一些通信故障。但是,我希望复制能够将它们恢复原状?分发代理运行良好。
我如何解决这个问题,并强制 SQL Server 选择这些命令并交付它们。
replication sql-server sql-server-2008-r2 transactional-replication
我想使用中央管理服务器(下面有一个服务器组)来对多个服务器运行管理查询。
我知道如何通过 SSMS 对整个组运行查询,但我想安排查询通过服务器代理运行。
我该怎么做呢?
在我们的应用程序中,我们有以下数据处理层:
如果从 SSMS 执行,一个存储过程将在 40 秒内运行,如果手动调用 SSIS 包,则大约在同一时间运行。
但是,如果 SSIS 包由 .NET 应用程序调用,则查询需要超过 14 小时才能运行,并且所有处理器都排平。
查看执行计划,似乎如果从 SSMS 运行该过程或手动触发 SSIS 包然后调用该过程,SQL Server 将使用基于当前统计数据的合理计划。
但是,如果从 .NET 应用程序调用 SSIS 包,则 SQL Server 会创建一个新计划,使用完全错误的统计信息。以下事情没有区别:
我们通过在查询中使用 MAXDOP 提示来伪造分辨率,但我的问题是:
当通过我描述的方法使用相同的参数和相同的数据调用时,基于完全不正确的统计信息,什么会使 SQL Server 产生完全不同的计划?