相同的查询 - 不同的 Azure SQL - 关闭逻辑读取 - 不同的性能

问题描述 投票:0回答:1

X Azure SQL DB 和 Y Azure SQL DB 在不同的 SQL 弹性池上运行。

即使同一个查询返回不同的行数,其执行的逻辑读取次数也很接近,在 X Azure SQL DB 中需要 904ms,而在 Y Azure SQL DB 中需要 4207ms。

您可以在下面找到详细的屏幕截图。

如何找到造成这种性能差异的根本原因?

提前非常感谢您。

-- 相同的查询时间和 IO 统计如下。

-- X AZURE SQL DB QUERY TIME/IO STATS
(300 rows affected)
Table 'A'. Scan count 1, logical reads 15709, physical reads 0
Table 'B'. Scan count 1, logical reads 1488, physical reads 0
Table 'C'. Scan count 1, logical reads 2, physical reads 0
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0
Table 'D'. Scan count 304, logical reads 645, physical reads 0
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0
Table 'E'. Scan count 1, logical reads 603, physical reads 0
Table 'F'. Scan count 0, logical reads 1204, physical reads 0
Table 'G'. Scan count 301, logical reads 1825, physical reads 0
Table 'H'. Scan count 0, logical reads 606, physical reads 0
Table 'I'. Scan count 303, logical reads 610, physical reads 0
Table 'J'. Scan count 1, logical reads 2, physical reads 0
Table 'K'. Scan count 0, logical reads 0, physical reads 0

SQL Server Execution Times:
CPU time = 906 ms,  elapsed time = 904 ms.


-- Y AZURE SQL DB QUERY TIME/IO STATS
(2 rows affected)
Table 'A'. Scan count 1, logical reads 23625, physical reads 0
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0
Table 'E'. Scan count 1, logical reads 5, physical reads 0
Table 'F'. Scan count 0, logical reads 8, physical reads 0
Table 'G'. Scan count 2, logical reads 12, physical reads 0
Table 'H'. Scan count 0, logical reads 14, physical reads 0
Table 'D'. Scan count 7, logical reads 14, physical reads 0
Table 'I'. Scan count 7, logical reads 14, physical reads 0
Table 'B'. Scan count 5, logical reads 1464, physical reads 0
Table 'C'. Scan count 1, logical reads 2, physical reads 0
Table 'J'. Scan count 1, logical reads 2, physical reads 0
Table 'K'. Scan count 0, logical reads 0, physical reads 0

SQL Server Execution Times:
CPU time = 4203 ms,  elapsed time = 4207 ms.
azure azure-sql-database query-optimization
1个回答
0
投票

可能与参数嗅探有关。使用某些特定参数,查询会生成不同的查询计划,有时这些查询计划会产生不同的性能结果。以下查询将返回同一查询哈希的所有查询计划:

SELECT TOP (10)
ClearPlanHandleFromCacheCmd = N'DBCC FREEPROCCACHE (' + CONVERT(nvarchar(max), qs.plan_handle, 1) + N');'
, qplan.query_plan, qs.query_plan_hash, txt.text, qs.*
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qplan
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS txt
WHERE qs.query_hash = 0x150517EA5F3979B4
ORDER BY qs.execution_count DESC

请更改您共享的图像上显示的查询的查询哈希号。在查询结果上单击查询计划,您可能会看到它们具有不同的运算符以及查询优化器采取的决策。

© www.soinside.com 2019 - 2024. All rights reserved.