用于写入重中型数据库的事务复制

时间:2010-07-06 14:20:22

标签: sql-server database-replication

我们有一个体面的,写得很重的数据库,大约426 GB(包括索引)和大约3亿行。我们目前每隔几分钟从我们的服务器报告的设备收集位置数据,我们服务大约10,000个设备 - 每秒都有大量的写入。存储每个设备位置的位置表大约有2.23亿行。该数据目前按年归档。

当用户在此数据库上运行大型报表时会出现问题,整个数据库几乎停止运行。

我知道我需要一个报告数据库,但我的问题是,是否有人在同等大小的数据库上使用SQL Server事务复制的经验,以及他们使用此技术的经验?

我的粗略计划是将应用程序中的所有报告指向报告数据库,使用事务复制将数据从主服务器复制到从服务器(报告数据库)。

任何人对这个策略以及我可能遇到的问题都有任何想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

事务复制在这种情况下应该运行良好(数据库大小的唯一影响是生成初始快照所需的时间)。但是,它可能无法解决您的问题。

我认为,如果您选择事务复制,那么您将遇到的问题是,当应用更改时,从属服务器将与主计算机处于相同的负载下 - 当用户运行大型报告时,它仍会抓取(假设它是类似的规范)。

根据向实时数据报告数据的可接受延迟,这可能对用户有效,也可能不行。

如果某些延迟是可以接受的,那么从日志传送中可以获得更好的性能,因为批量应用了更改。

在获取报告服务器之前,另一种方法是调查用户正在运行的查询,并查看修改其代码或索引策略以更好地匹配他们尝试执行的操作。

答案 1 :(得分:0)

事务复制可以很好地为您服务。需要考虑的事项:

  1. 目标数据库表必须是只读的。
  2. 包含目标数据库的服务器应该足够强大,以便处理来自报告应用程序的SELECT流量。
  3. 根据INSERT / UPDATE流量,您可能需要让第三台服务器充当分发服务器。
  4. 您还必须考虑分发数据库的大小。
  5. 根据我在此处阅读的内容,我使用报告服务器的pull订阅来卸载来自OLTP服务器的流量。
  6. 您可以通过从OLTP数据库的备份初始化报告数据库来跳过快照的折磨。见https://msdn.microsoft.com/en-us/library/ms151705.aspx

    将Replication中的INSERT / UPDATE / DELETE流量分配到分发和订阅服务器数据库中。这需要考虑,但锁定/阻止问题应该不比从OLTP运行这些报告更糟糕(并且可能更好)。

    我在2.6TB数据库上运行多个出版物,每天增长2.5GB,使用纯事务驱动报告(到两个报告服务器)和对等事务处理以在横向扩展中复制数据SaaS产品(另外三台服务器)。因此,我们有一个单独的经销商。

    希望这有帮助。

    由于 约翰。