小编Pet*_*ter的帖子

事务复制不发送所有命令

我有一个事务复制拓扑如下:

纽约出版数据库同一台服务器拥有分销商

纽约 - 订阅者
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

7
推荐指数
1
解决办法
2195
查看次数

对多个服务器运行查询

我想使用中央管理服务器(下面有一个服务器组)来对多个服务器运行管理查询。

我知道如何通过 SSMS 对整个组运行查询,但我想安排查询通过服务器代理运行。

我该怎么做呢?

sql-server sql-server-2008-r2

6
推荐指数
1
解决办法
1032
查看次数

SQL Server 使用了错误的计划

在我们的应用程序中,我们有以下数据处理层:

  • .NET 编排应用程序,用于确定要触发哪些 SSIS 包
  • 完成大部分工作并调用存储过程的 SSIS 包
  • 用于在 SSIS 数据流不合适的情况下执行计算和读/写数据的存储过程

如果从 SSMS 执行,一个存储过程将在 40 秒内运行,如果手动调用 SSIS 包,则大约在同一时间运行。

但是,如果 SSIS 包由 .NET 应用程序调用,则查询需要超过 14 小时才能运行,并且所有处理器都排平。

查看执行计划,似乎如果从 SSMS 运行该过程或手动触发 SSIS 包然后调用该过程,SQL Server 将使用基于当前统计数据的合理计划。

但是,如果从 .NET 应用程序调用 SSIS 包,则 SQL Server 会创建一个新计划,使用完全错误的统计信息。以下事情没有区别:

  • 更新统计
  • 清除缓存
  • 重启实例
  • 在过程执行中设置 WITH RECOMPILE

我们通过在查询中使用 MAXDOP 提示来伪造分辨率,但我的问题是:

当通过我描述的方法使用相同的参数和相同的数据调用时,基于完全不正确的统计信息,什么会使 SQL Server 产生完全不同的计划?

sql-server

1
推荐指数
1
解决办法
701
查看次数