我们很难从SQL Azure中获得我们需要的性能,我很好奇是否有人尝试过使用Active Geo-Replication来分离读写负载以提高性能,无论成功还是失败?
我们的一个数据库似乎非常适合这一点。在此数据库上发生的唯一写入来自应用程序,该应用程序将数据更新作为xml文件从第三方服务下载;它会处理这些文件以更新数据。文件频繁出现,应用程序每分钟执行几百到几千次插入和更新。该应用程序是由我们的数据提供商提供的。像批处理insert和update语句这样的对其更新程序的改进,现在还不是一个选项。它们的更新器是用perl编写的,并使用ODBC。我们已更新到SQL Server的最新ODBC驱动程序11,以在连接字符串中启用连接重试。
从我们的.Net web服务进行读取。它执行的查询非常繁重,有很多连接。我们已经做了相当多的调优和缓存,以减少数据库的负载。当我们在一些中间租用的服务器硬件上安装的SQL Server上运行它时,我们完全在容量范围内。现在我们在SQL Azure上看到处理速度很慢,甚至在高级P2级别也是如此。目前,访问P3的成本太高了。
今天早些时候,我设置了活动的可读性辅助数据库,但是我没有看到我期望的结果。唯一连接到我们的可写主机的是更新应用程序。我们的web服务正在连接到可读的辅助服务器。然而,Azure的门户显示了我们主服务器上的所有负载:




我还注意到,自设置活动辅助服务器以来,我们的平均DTU使用率上升了约20%。
如果我执行SELECT SUM(execution_count) FROM sys.dm_exec_query_stats,那么在每个DB上的总执行次数几乎是相同的。如果我坐下来刷新SELECT * FROM sys.dm_exec_requests CROSS APPLY sys.dm_exec_sql_text(sql_handle),我还会看到在每个数据库上运行的查询数量相似。此外,我们的读取查询使用我们创建的视图,我在每个数据库上看到我们的查询-而不仅仅是更新应用程序运行的查询(它不知道我们的视图)。
有人能帮我理解一下这里发生了什么吗?如果这两个查询没有在第二个查询上显示执行,我会说我们甚至没有连接到它。我们从一个60-70% DTU的P2数据库变成了两个P2 DB,一个是90% DTU,另一个是0% DTU。因此,现在我们支付了两倍的费用,而且我们可用的资源似乎更少了。
我们认为这里应该有2x P2总数的DTU是错误的吗?Azure是否只为活动的地理复制集提供了一个数据库价值的资源?统计数据是否以某种方式组合在一起,使我没有真正看到这些查询对每个单独的数据库造成的影响?
发布于 2015-03-21 01:09:49
我们的辅助服务器没有接收查询的问题是,我们的连接字符串使用了用户id ' user @primary-server‘。即使主机名是辅助服务器的,连接仍然连接到主服务器。一旦我们使用‘user@ our server’,我们的读负载就会像预期的那样转到辅助服务器上。
至于以这种方式拆分负载的有用性。到目前为止,以这种方式使用两个P1看起来给我们提供了大致相同的容量,可能比单个P2略多一点(我们还没有运行基准测试,只是根据正常流量负载来判断已用容量)。这种设置提供的一个优点是,我们可以将这两个数据库中的一个或两个放在P2上,以实现P2和P3数据库之间的资源级别(这很有用,因为这两个数据库的价格相差很大)。
https://stackoverflow.com/questions/29152698
复制相似问题