我有两台 SQL 2005 服务器,一台用于 OLTP(我们称之为 SQLA),另一台用于报告(SQLB),以便在人们运行疯狂查询时减少 SQLA 上的负载。我们的主数据库通过事务复制从 SQLA 复制到 SQLB。
我们在 SQLB 上运行的查询的性质显然非常不同,因此我们的索引要求也不同。
鉴于数据库是从 SQLA 复制的,那么在 SQLB 上创建更多索引是否存在问题?
我主要担心的是,当数据被复制到 SQLB 并且额外的索引被更新时,我可能会看到 SQLA 的性能受到影响 - 我对日志读取器代理缺乏了解是这里的问题,如果这是一个非常基本的问题,请原谅。
答案1
将要,
我明白您为什么会有这种担忧,但您不必为此担心。在这种情况下,SQLA 上的负载不应该改变。日志读取器代理在第三台机器上运行,对吗?您有 SQLA(发布者)正在运行,(分发者)正在运行日志读取器代理,并且(订阅者)SQLB 正在接收更新。SQLA 仍将写入完全相同的事务日志,分发者仍将向 SQLB 提交完全相同的插入、更新、删除。实际将其添加到各种索引的工作将完全落在 SQLB 上。
以下是该过程的清晰图表:http://i.msdn.microsoft.com/dynimg/IC19107.gif
您唯一要注意的是,SQLB 不会因为拥有太多索引而落后,无法及时执行插入/更新/删除,导致它们在分发数据库中堆积。