SQL Azure分发大量读取查询以进行报告

时间:2012-10-29 14:51:27

标签: azure azure-sql-database azure-web-roles

我们正在为我们的应用程序使用SQL Azure,并且需要一些关于如何处理扫描大量数据以进行报告的查询的输入。我们的应用程序都是读/写密集型的,因此我们不希望报表查询阻止其余操作。

为了避免长时间运行的查询导致的连接池问题,我们将查询数据库的代码放到一个辅助角色上。这仍然无法避免数据库被一堆只读查询所击中。

我们在这里缺少什么 - 我们可以设置一个只读副本,所有报告调用都会被点击吗?

任何建议都将不胜感激。

4 个答案:

答案 0 :(得分:2)

查看SQL Azure Data Sync。它将允许您逐步更新报告数据库。

这里有几个让你入门的链接

http://msdn.microsoft.com/en-us/library/hh667301.aspx

http://social.technet.microsoft.com/wiki/contents/articles/1821.sql-data-sync-overview.aspx

我认为它仍然在CTP中。

答案 1 :(得分:2)

这个怎么样:

  1. 为报告创建单独的连接字符串,例如使用不同的应用程序名称
  2. 对于您的报告查询,请使用SET TRANSACTION ISOLATION LEVEL SNAPSHOT
  3. 这可以防止长时间运行的查询阻止您的操作查询。这也将使您的报告得到一致的阅读。

答案 2 :(得分:1)

由于您正在谈论报告,我假设您不需要实时数据。在这种情况下,您可以考虑定期创建生产数据库的副本(例如,每12小时)。

在SQL Azure中,create a copy非常容易:

-- Execute on the master database.
-- Start copying.
CREATE DATABASE Database1B AS COPY OF Database1A;

您的报告将在Database1B上发生,而不会影响实际的生产数据库(Database1A)。

答案 3 :(得分:1)

你说你有很多只读查询......是否可以缓存它们? (完美,因为它是只读的)

您使用的报告工具是什么?如果需要,您也可以输出缓存查询。