我们无法从SQL Azure中获得所需的性能,而且我很好奇是否有人尝试使用Active Geo-Replication来分割读写加载的性能,无论是成功还是失败?
我们的一个数据库似乎非常适合这一点。此数据库上发生的唯一写入来自将数据更新作为xml文件从第三方服务下载的应用程序;它处理这些文件以更新数据。文件经常进入,应用程序每分钟执行几百到几千次插入和更新。该应用程序由我们的数据提供商提供。对更新程序的改进,如批处理插入和更新更新语句,现在不是一个选项。他们的更新程序是用perl编写的并使用ODBC。我们已更新到SQL Server的最新ODBC驱动程序11,以便在连接字符串中启用连接重试。
读取来自我们的.Net网络服务。它执行的查询非常繁重,有很多连接。我们已经完成了大量的调优和缓存,以减少数据库的负载。当我们在安装在某些中间租用的服务器硬件上的SQL Server上运行它时,我们的容量已经很大。现在我们重新开始使用SQL Azure,即使在Premium P2级别也能看到缓慢的处理。到目前为止,P3的成本令人望而却步。
今天早些时候我设置了有效的可读辅助设备,而且我没有看到我的期望。连接到我们的可写主服务器的唯一事情是更新程序应用程序。我们的Web服务正在连接到可读的辅助服务器。但是,Azure门户网站显示了我们主人的所有负担:
我还注意到,自设置活动辅助设备以来,我们使用的平均DTU百分比增加了约20%。
如果我执行SELECT SUM(execution_count) FROM sys.dm_exec_query_stats
,我会在每个数据库上接近相同数量的总执行次数。如果我坐下来刷新SELECT * FROM sys.dm_exec_requests CROSS APPLY sys.dm_exec_sql_text(sql_handle)
,我也会在每个数据库上看到相似数量的查询。此外,我们的读取查询使用我们创建的视图,并且我在每个数据库上看到我们的查询 - 不仅仅是查询更新应用程序运行(它不知道我们的视图)。
任何人都可以帮我理解这里发生了什么吗?如果这2个查询没有显示次要的执行情况,我说我们甚至连接它都没有。我们从一个P2 DB以60-70%DTU转到两个P2 DB,一个在90%DTU,一个在0%DTU。所以现在我们付了两倍的费用,看来我们的资源更少了。
我们错误地认为我们应该在此处拥有2x P2总DTU吗? Azure是否仅为活动的地理复制集提供了一个数据库的资源?统计数据是否以某种方式结合起来,我并没有真正看到用这些查询击中每个单独数据库的内容?
答案 0 :(得分:1)
我们的辅助未接收查询的问题是我们的连接字符串使用了“user @ primary-server”的用户ID。即使主机名是辅助服务器,连接仍然是主服务器。一旦我们使用'user @ secondary-server',我们的读取负载就会按预期进入辅助服务器。
至于以这种方式分割加载的有用性。到目前为止看起来像以这种方式使用两个P1给我们提供了相同的容量,可能比单个P2稍微多一点(我们还没有运行基准测试,只是用正常的交通负荷判断用过的容量)。这种设置提供的一个优点是我们可以将一个或两个数据库放在P2上,以实现P2和P3数据库之间的资源级别(这很有用,因为这两者之间的价格相差很大)。