这篇文章有点长;但我一直在研究查询,以找出性能问题的根源。感谢您花时间阅读它。
我有一个应用程序在专用服务器上运行,而该服务器又在 Azure 上运行 SQL Server 2012(如果重要的话,是西欧)。由于 Azuresql 中的功能缺陷,我的应用程序无法在共享服务上运行。正在运行的应用程序过去曾在各种 2012 服务器上运行,我注意到 Azure 和其他非 Azure sql 服务器之间存在奇怪的性能异常。
该问题再次围绕临时表 - 变量表 v #tables 展开。
我们在 Azure 上发现,变体表的查询持续时间相当长;非常简单的例子;每次运行 50 次并取平均值。
Create table #table (contactid uniqueidentifier, AnotherID uniqueidentifier)
insert into #table
select top 100 contactid, AnotherID
from dbo.pdContacts
五
declare @table table (contactid uniqueidentifier, AnotherID uniqueidentifier)
insert into @table
select top 100 contactid, AnotherID
from dbo.pdContacts
Profiler 显示统计数据的平均值;
Variable Table : #Table
CPU 47 : 16
Reads 379 : 204
Writes 11 : 0
Duration 83 : 42
相同的查询,数据库位于专用服务器上,没有返回任何负载
Variable Table : #Table
CPU 16 : 16
Reads 873 : 898
Writes 11 : 0
Duration 5 : 15
在我非常简单的测试中,Azure 变体测试的执行时间几乎是 #table 的两倍;在独立设备上,变体要快得多(对于小型表格,这与我们所看到的表现一致。)限制变体表性能的因素在 Azure 上比在独立机器上更明显;我可以在短期内管理性能问题,但宁愿以牺牲其他所有人的利益为代价来优化 Azure 的应用程序。
谢谢