我们正在为我们的应用程序使用 SQL Azure,并且需要一些关于如何处理扫描大量数据以进行报告的查询的输入。我们的应用程序是读/写密集型的,因此我们不希望报告查询阻塞其余操作。
为了避免由长时间运行的查询引起的连接池问题,我们将查询数据库以报告的代码放在工作角色上。这仍然不能避免数据库受到一堆只读查询的影响。
这里有什么我们遗漏的吗 - 我们可以设置一个所有报告调用都命中的只读副本吗?
任何建议将不胜感激。
我们正在为我们的应用程序使用 SQL Azure,并且需要一些关于如何处理扫描大量数据以进行报告的查询的输入。我们的应用程序是读/写密集型的,因此我们不希望报告查询阻塞其余操作。
为了避免由长时间运行的查询引起的连接池问题,我们将查询数据库以报告的代码放在工作角色上。这仍然不能避免数据库受到一堆只读查询的影响。
这里有什么我们遗漏的吗 - 我们可以设置一个所有报告调用都命中的只读副本吗?
任何建议将不胜感激。
查看 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 中。
这个怎么样:
这应该可以防止您长时间运行的查询阻塞您的操作查询。这也将使您的报告获得一致的阅读。
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.
既然您在谈论报告,我假设您不需要实时数据。在这种情况下,您可以考虑定期(例如每 12 小时)创建生产数据库的副本。
在 SQL Azure 中,创建副本非常容易:
-- Execute on the master database.
-- Start copying.
CREATE DATABASE Database1B AS COPY OF Database1A;
您的报告将在 Database1B 上进行,而不会影响实际的生产数据库 (Database1A)。