0

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

为了避免由长时间运行的查询引起的连接池问题,我们将查询数据库以报告的代码放在工作角色上。这仍然不能避免数据库受到一堆只读查询的影响。

这里有什么我们遗漏的吗 - 我们可以设置一个所有报告调用都命中的只读副本吗?

任何建议将不胜感激。

4

4 回答 4

2

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

这里有几个链接可以帮助您入门

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

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

我认为它仍然在 CTP 中。

于 2012-10-30T11:14:34.317 回答
2

这个怎么样:

  1. 为报告创建单独的连接字符串,例如使用不同的应用程序名称
  2. 对于您的报告查询,请使用 SET TRANSACTION ISOLATION LEVEL SNAPSHOT

这应该可以防止您长时间运行的查询阻塞您的操作查询。这也将使您的报告获得一致的阅读。

于 2012-11-01T05:07:37.223 回答
1

You are saying you have a lot of read-only queries...any possibility of caching them? (perfect since it is read-only)

What reporting tool are you using? You can output cache the queries as well if needed.

于 2012-10-29T21:13:12.927 回答
1

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

在 SQL Azure 中,创建副本非常容易:

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

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

于 2012-10-29T15:13:27.717 回答