今天将与大家分享SQL Server 2019的内存授予反馈功能的经验。当 Memory Grant Feedback Adjusted属性的值显示为No Feedback Disabled时,我们将讨论Memory Grant Info的一个非常有趣的主题。
演示–无反馈禁用
首先,在Wide World Importers示例数据库中创建以下存储过程。
USE WideWorldImporters
GO
CREATE OR ALTER PROCEDURE GetStockDetails (@StockItemID INT)
AS
SELECT ol.OrderID,ol.StockItemID,ol.Description,
ol.OrderLineID,
o.Comments, o.CustomerID
FROM Sales.OrderLines ol
INNER JOIN Sales.Orders o ON ol.OrderID = o.OrderID
WHERE ol.StockItemID > @StockItemID
ORDER BY ol.Description, o.Comments
GO
现在,我们将使用不同的值多次运行以上存储的过程。但是,在运行存储过程之前,请通过键入CTRL + M来启用实际的执行计划。
现在,运行以下存储过程20次。如果您发现存储过程有两个不同的值。
EXEC GetStockDetails 120
EXEC GetStockDetails 223
GO 20
请注意,我正在运行存储过程20次,因此总共将执行40次。现在检查第31、32和33rd个执行计划。您会注意到,在第33个执行计划中,“内存授予反馈”中有一个不同的值。您将看到,当我们运行上述存储的过程时,内存需求不断变化,并且在某个时刻SQL Server Engine放弃了,并说它将使用初始内存授权中的一个,并使用第一次执行时的内存授权。正如您将注意到的那样,这将是非常可怕的。
反馈已禁用
好吧,从此练习中学到的是,虽然“内存授予反馈”的功能很棒,但它也会适得其反,并给您带来较差的性能。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。