【问题标题】:SQL Azure on cloud run query slower than SQL Server on premises, what can i do to improve?云上的 SQL Azure 运行查询比本地 SQL Server 慢,我可以做些什么来改进?
【发布时间】:2015-05-08 06:28:30
【问题描述】:

我需要检索我应该跳过并获取的记录范围。但是,我在本地 SQL Server 和 SQL Azure 上运行都得到了结果,但时间差别很大。两个数据库具有相同的索引。

例如,我有一个包含 700 万条记录的表,我有这样的查询: SELECT TOP(100) a.Time, a.SiteID FROM (SELECT a.Time, a.SiteID, row_number() OVER (ORDER BY a.Time DESC) AS [row_number] FROM [Table] 作为 WHERE a.SiteID =第1111章 632900

在 SQL Azure 中:它会在 30 秒到 1 分钟内给出结果。 在本地 SQL Server 中:它几乎在实例时间内给出结果。

我可以做些什么来缩短 SQL Azure 上的执行时间?

问候 格蕾丝

【问题讨论】:

  • 您使用的是哪个版本的 sql azure?请查看性能层@msdn.microsoft.com/en-us/library/azure/dn741336.aspx Azure 和本地的查询计划看起来相同吗?
  • 在 SQL Azure 中,我使用“标准”,性能级别为 S0 (10DTUS)。我检查了执行计划,Cloud 和 On-premises 在 [Table].[PK_Table_1] 的 Key Lookup (Clustered) 上具有相同的 99%,这是 [Table] 列“ID”的主键,它是唯一的自动-增量列。
  • 这解释了缓慢的原因,因为您在本地获得的资源必须远高于您在 Azure 中获得的标准 S0 层资源。您可以尝试的一些事情是压缩表以减少要扫描的页面数(这可以稍微增加 CPU)。将结果缓存在您的应用程序中,而不是每次都查询。此外,您可能需要扩展以比较性能提升。如果您的数据库尚未在 V12 中,您可能需要升级以获得更好的性能,因为它使用 SSD

标签: azure-sql-database


【解决方案1】:

根据计划,此查询需要读取至少 632900 条记录。如果没有合适的索引,可能需要读取整个表并对其进行排序。

SQL Azure 的内存非常有限。这通常会将工作负载从内存状态推向需要磁盘 IO 的状态。 IO 很容易比内存慢 100 倍,尤其是在 Azure 上使用严重受限的 IO。

优化查询以减少缓冲池内存。可能,您应该创建一个适当的索引。还要考虑使用更有效的分页策略。例如,您可以通过最后处理的a.Time 值来查找,而不是按行号查找。这样所需的缓冲池内存很小,因为表访问从正确的位置开始。

【讨论】:

  • 我已经有了下面这个的索引,你知道吗? : 创建非集群索引 [NonClusteredIndex-20141224-124138] ON [Table] ( [SiteID] ASC, [Time] DESC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
  • 致 usr,我找到了解决这个问题的问题。你是对的,我已经修改了索引,它现在运行得很快。索引在([SiteID] ASC,[Time] DESC)上,但是,当我更改为([SiteID] ASC,[Time] DESC)包括([ID],[EmployeeID],[JobCode])时,它是现在相当快。谢谢,问题解决了。
  • @GraceChan 好的,太好了。但是,一旦您的数据集再次超过缓冲池大小,问题就会再次出现。 Azure 的内存非常有限,如果您不了解该限制,可能会导致性能突然下降 10-100 倍。
【解决方案2】:

您可以尝试使用OFFSET FETCH 重写您的查询。确保您有一个与 ORDER BY 中的列匹配的索引。然后 SQL Server 将使用优化的 TOP 运算符进行分页。请查看this post,了解有关 OFFSET FETCH 的更多注意事项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多