用于报告和CRUD操作的单独表/数据库

时间:2010-02-22 16:41:31

标签: sql-server sql-server-2005 reporting

定期运行报告的用户会阻止用户执行CRUD操作并导致超时。我想为报表用户创建当前表的重复位置。

我正在考虑创建一个备份我的应用程序数据库的作业,并将其还原到同一服务器上的报告数据库,以便运行报告的用户与执行CRUD操作的用户分开。这项工作每10分钟左右运行一次。初步测试显示从头到尾将是大约30秒。磁盘空间不是问题。

这是好主意吗?我应该注意哪些陷阱?有更好的方法吗?

4 个答案:

答案 0 :(得分:3)

这听起来不错。我唯一担心的是你需要每10分钟更新一次吗?在更新运行时,这也可能会减慢速度。通常这些是在一夜之间完成的(对其他人影响最小),或者如果在白天,只有3个固定点(比如上午10点,下午1点和下午4点)。

答案 1 :(得分:2)

在进行叉车升级之前,您可能会看到是否正在进行

...from sometable WITH (NOLOCK)
报告查询上的

可以缓解问题。它可能至少会花一些时间来确定什么是最佳的。

答案 2 :(得分:1)

当然,对于大多数企业级应用程序,事务数据库始终与报告数据库保持分离。针对OLTP调整事务系统,并且可以对报告数据库进行非规范化以满足报告方案的需要。所以这几乎是一个自然的建议。

答案 3 :(得分:1)

小心进行频繁备份 - 这可能导致大量停机!

常见解决方案

创建一个仅用于报告的单独实例确实是一种常见做法。

有些人甚至更进一步,将报告放在单独的物理机器或群集上,以进一步隔离负载的那部分。

这两个都可以通过复制来处理(这可以避免停机问题)。或者你可以做一夜间备份并报告。

我还想提一下,高端方法是数据仓库,您可以将这个新的报告数据库转换为读取优化的存储库,以便更有效地进行报告。这实现起来非常耗时,因此您正在寻找的快速解决方案。

最后的想法

最后一件事:我已经看到一些商店处于这个问题的尖端,试图避免处理它。以下是要点:报告在本月的某些时间或年份会出现峰值,所以如果您通常处于杀死数据库服务器的边缘,那么本月的最后一周可能会推动您优势!

这个问题非常相似:https://stackoverflow.com/questions/190512/sql-server-separate-database-for-reports