我们已经为客户的 .NET Web 应用程序配置了 SQL 2012 服务器数据库事务复制,以便在不同的 SQL 服务器上分发 SQL 事务和报告。
我们已经在作为主数据库服务器的 SQL-Node1 上实现了事务复制,我们已经在 SQL-Node2 上配置了主数据库的复制,以便将报告拉到我们的 Web 应用程序中,该应用程序具有大量的事务和从 Excel 表条目上传的数据,每天大约有 1000 万个条目。
在两台 SQL 2012 服务器上配置复制后,几周后我们遇到了一些性能问题,发现在将文件上传到数据库时某些资源被锁定,这就是应用程序无法访问这些表和数据的原因。还发现当用户访问我们的 Web 应用程序时,服务器在白天的运行速度太慢。
现在,我们希望将负载分配到 SQL 2012 服务器的 3 个不同节点上。其中,Web 应用程序将访问和处理 SQL-Node1 上的数据,报告查询将从 SQL-Node2 获取拉取数据,而 SQL-Node3 将用于将 Excel 工作表数据上传到数据库,该数据库将在所有其他 SQL 节点上进行复制。
当前设置,所有服务器均具有 Windows Server 2008 Standard 和 SQL 2012 Enterprise Edition。
数据库大小约:15 GB/使用的复制:在 SQL 节点 1 上配置的事务/分发者角色/在 SQL 节点 2 上配置的订阅者角色。
我们正在寻找解决上述问题的解决方案,该解决方案可以在所有 SQL 节点之间分配不同的负载(报告、数据上传、交易)并复制数据。
对于上述场景,SQL 2012 HA、SQL 复制或 SQL 镜像中哪个功能表现良好?
将非常感谢您的快速回复......
答案1
您能考虑使用只读辅助服务器来创建 ALwaysOn 组吗?
http://msdn.microsoft.com/en-us/library/ff878253.aspx
解释它。
这已经是最好的结果了——将报告从事务数据库中取出。
顺便说一句,1000 万行并不多。这是一个非常小的每日上传量 - 我建议检查你的编程是否存在明显的错误。
答案2
“对于上述场景,SQL 2012 HA、SQL 复制或 SQL 镜像中哪个功能表现良好?”
嗯,镜像是独自灾难恢复功能。当镜像处于活动状态时,您无法从镜像伙伴读取数据。
正如 TomTom 所说,我强烈建议您看看 AlwaysOn,因为您已经拥有企业许可证。