Mar*_*lli 5 replication sql-server transactional-replication
在我的分销商数据库中寻找缺失的索引,我意外地发现了太多。
需要索引的表一般是3个:
MSrepl_commands
MSlogreader_history
MSdistribution_history
这是缺失索引的图片
现在专注于 TABLE MSdistribution_history
这一切似乎归结为这 3 个索引:
USE distribution_BOCSS;
CREATE NONCLUSTERED INDEX
IDX_agent_id_time_xact_seqnorunstatus_INC_delivery_latency
ON [distribution_BOCSS].[dbo].[MSdistribution_history]
([agent_id], [time], [xact_seqno], [runstatus])
INCLUDE (delivery_latency,start_time,timestamp) WITH (ONLINE = ON)
USE distribution_BOCSS;
CREATE NONCLUSTERED INDEX IDX_runstatus_INC_agent_id_delivery_latency
ON [distribution_BOCSS].[dbo].[MSdistribution_history]
([runstatus])
INCLUDE (agent_id,delivery_latency,time,xact_seqno,timestamp)
WITH (ONLINE = ON)
USE distribution_BOCSS;
CREATE NONCLUSTERED INDEX IDX_agent_idrunstatus_INC_time_xact_seqno_delivery_latency
ON [distribution_BOCSS].[dbo].[MSdistribution_history]
([agent_id], [runstatus])
INCLUDE (time,xact_seqno,delivery_latency,timestamp,start_time)
WITH (ONLINE = ON)
Run Code Online (Sandbox Code Playgroud)
但是,正如我想象的那样,当前现有聚集索引的更新量非常高(不确定从什么时候开始添加到这些统计信息中,可能是自上次重新启动以来),如下图所示:
写的太高了,它是一个生产系统,我想在这方面得到更多的支持。创建这些索引我真的会受益吗?
是否有任何文档支持在事务复制的分发服务器数据库上创建索引?
为什么微软没有为这些数据库提供适当的索引?
复制通常可以正常工作,并且我没有遇到任何必须在分发数据库上创建附加索引的问题。(在我的公司,我们大量使用复制来将数据从一个区域移动到另一个区域)
如果Replication 没有问题,请避免创建这些索引。索引创建不是免费的,因为 SQL Server 必须维护任何 DDL 更改,这意味着您必须对这些索引进行适当的维护。
您可以进行调整。例如,如果为您的出版物immediate sync
设置为TRUE
,那么这将导致交易被保留MSRepl_commands
而不是在分发时删除它们。因此,设置immediate sync
为FALSE
将有助于分配清理工作更快地进行清理。
是否有任何文档支持在事务复制的分发者数据库上创建索引?
Microsoft 不支持对系统表进行任何更改(复制、日志传送),除非 CSS 告知您。这并不意味着您不能创建这些索引,只是意味着如果您向 Microsoft 提出案例,他们将不会提供支持,除非您删除自己创建的索引。
检查此连接,因为无法修复-在 [distribution].[dbo].[MSrepl_commands] 上添加索引
所以我的建议是,为您的服务器实例设定基线。获取较长持续时间的数据,如果您遇到问题,则通过创建适当的索引来解决这些问题。当您使用供应商软件时,首先测试、测试再测试您的所有更改,并始终站在受支持的一方。您可以提交一个连接项目,如果 Microsoft 解决了这个问题,那么它将作为修补程序或未来版本包含在内。
归档时间: |
|
查看次数: |
1536 次 |
最近记录: |