【发布时间】:2015-09-14 05:02:56
【问题描述】:
我在Azure 上创建了一个试用帐户,并从SmarterAsp 部署了我的数据库。
当我对SmarterAsp\MyDatabase 运行数据透视查询时,结果会在 2 秒内出现。
但是,在 Azure\MyDatabase 上运行相同的查询需要 94 秒。
我使用 SQL Server 2014 Management Studio(试用版)连接到服务器并运行查询。
这种速度差异是因为我的帐户是试用帐户吗?
我的问题的一些相关信息
查询是:
ALTER procedure [dbo].[Pivot_Per_Day]
@iyear int,
@imonth int,
@iddepartment int
as
declare @columnName Nvarchar(max) = ''
declare @sql Nvarchar(max) =''
select @columnName += quotename(iDay) + ','
from (
Select day(idate) as iDay
from kpivalues where year(idate)=@iyear and month(idate)=@imonth
group by idate
)x
set @columnName=left(@columnName,len(@columnName)-1)
set @sql ='
Select * from (
select kpiname, target, ivalues, convert(decimal(18,2),day(idate)) as iDay
from kpi
inner join kpivalues on kpivalues.idkpi=kpi.idkpi
inner join kpitarget on kpitarget.idkpi=kpi.idkpi
inner join departmentbscs on departmentbscs.idkpi=kpi.idkpi
where iddepartment='+convert(nvarchar(max),@iddepartment)+'
group by kpiname,target, ivalues,idate)x
pivot
(
avg(ivalues)
for iDay in (' + @columnName + ')
) p'
execute sp_executesql @sql
在 3 个不同的服务器上运行此查询在我的数据透视表出现在屏幕上之前的经过时间方面给了我不同的结果:
Azure - 已用时间 = 100.165 秒
Smarterasp.net - 经过时间 = 2.449 秒
LocalServer - 经过的时间 = 1.716 秒
关于我在 Azure 上的试用帐户,我的主要目标是检查运行上述存储过程时我是否会比 Smarter 有更好的速度。 我为我的数据库选择服务层 - 基本、性能级别 - 基本(5DTU)和最大。大小 2GB。
我的数据库有16个表,1个表有145284行,数据库大小是11mb。它是我的应用程序的测试数据库。
我的问题是:
- 我可以做些什么来优化这个查询 (sp)?
- 是否建议将 Azure 用于小型数据库 (100mb-1Gb)?我的意思是性能与成本!
根据您的意见得出的结论:
- 我对查询进行了建议的更改,性能提高了 50% 以上 - 谢谢 Remus
- 我在 Azure S2 上测试了我的查询,更新查询的经过时间为 11 秒。
我在 P1 上再次测试了我的查询,经过的时间是 0.5 秒 :)
SmarterASP 上相同的更新查询已用时 0.8 秒。
现在我很清楚 Azure 中有哪些层以及拥有一个非常好的查询有多重要(我什至了解什么是索引以及他的优势/劣势)
谢谢大家, 卢锡安
【问题讨论】:
-
这不是你应该问 Azure 支持的问题吗?我们应该如何知道您的帐户及其设备的详细信息?
-
您是在谈论 SQL Azure 吗?性能非常依赖于层。小于 S2 的任何东西都不太可能给您可接受的性能。不,它不依赖于负载,单个查询性能受到层级的严重影响。
-
@Lucian - 就您的问题而言,这完全不清楚。您没有在问题中显示任何 SQL 查询,也没有提到有关本地服务器或所选 SQL 数据库层的任何事情。也就是说:如果是关于服务器性能(或层性能),那是 ServerFault 的问题,而不是 StackOverflow 的问题。如果是查询问题,那么它适用于 StackOverflow,但不作为不同服务层/托管公司之间的性能差异。
-
为 Lucian 的问题辩护,不同 SQL Azure 数据库层的性能之间存在非常明显的差异。价格/性能比的增长速度快于线性增长,因此了解这一点对于应用程序设计非常重要,因为分片和缓存等决策通常由价格和性能相关的方式驱动。我最近不止一次发生过这种情况。需要明确的是,我是 SQL Azure 的忠实粉丝——我在 Azure 中有 100 多个生产数据库。我也认为价格很有竞争力——但理解这一点对于设计来说是必不可少的。
-
@lucian;按照您的编辑进行澄清;这是因为基本性能级别。根据我在下面的回答,尝试将 S2 作为更现实的起始级别。值得一次尝试所有级别,性能差异很大。
标签: sql azure ssms azure-sql-database sql-server-2014