Azure 变量表与临时表

Azure 变量表与临时表

这篇文章有点长;但我一直在研究查询,以找出性能问题的根源。感谢您花时间阅读它。

我有一个应用程序在专用服务器上运行,而该服务器又在 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 的应用程序。

谢谢

相关内容