如何定期重建频繁访问的报告表?

时间:2011-06-07 16:15:08

标签: sql-server tsql reporting denormalization

刷新准备好的报告表大约需要5-10分钟。我们希望不断更新此表(可能每15分钟或连续一次)。

我们非常频繁地查询此报告表(每分钟多次),我无法在任何时间内保持这种状态。如果数据是15分钟就可以了。

我无法删除表并重新创建它。我无法删除表的内容并重新创建它。

我应该使用哪种技术,比如在两个表之间交换(在我们构建另一个表时从一个表读取),还是将这个5-10分钟的进程放在一个大型事务中?

4 个答案:

答案 0 :(得分:13)

Use synonyms?。在创作时,这指向tableA。

CREATE SYNONYM ReportingTable FOR dbo.tableA;

15分钟后,您创建tableB并重新定义同义词

DROP SYNONYM ReportingTable;
CREATE SYNONYM ReportingTable FOR dbo.tableB;

同义词只是指向实际表的指针:这样,实际表重命名等的处理被简化并抽象出来,所有代码/客户端都将使用ReportingTable

编辑,2011年11月24日

所有版本都提供同义词:分区切换仅限企业/开发人员。

编辑,2012年2月

您可以在标准版本中切换整个表格(可能是Express,未经测试)

ALTER TABLE .. SWITCH ..

如果目标表为空,这将比同义词更优雅。

编辑,2012年2月(2)

此外,您可以按照Caching joined tables in SQL Server

通过架构进行轮播

答案 1 :(得分:1)

是的,您应该交换表,如果尚未完成,请考虑为报告表使用不同的服务器或其他物理分区。

近乎实时报告的推荐方法是从操作系统卸载读取,并将报告活动与报告系统中的读取活动分开。

你已经完成了第一部分,至少在逻辑上,有一个准备好的表。在用户的只读表和用于更新的单独表之间交换消除了事务之间的写 - 读冲突。成本是用户的缓存延迟,但如果需要,应该可以采取措施最大限度地缩短准备时间并更频繁地交换表。

有关实时报告中设计选择的更多信息,我推荐Wayne Eckerson撰写的一篇写得很好的论文,Best Practices in Operational BI

答案 2 :(得分:0)

有两个表听起来像最简单的解决方案。

答案 3 :(得分:0)

在我们的项目中,我们使用了两个表,并使用Create / Alter View进行切换。