SQL Server 内存优化之即席式工作负荷优化

本文探讨了SQL Server中即席式工作负荷优化的问题,指出即席查询可能导致计划缓存膨胀。启用'针对即席工作负荷进行优化'选项可以改善此情况,仅缓存执行计划的存根,节省内存。建议在所有SQL Server实例上开启此选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

即席式工作负荷优化

在SQL Server中执行代码时,代码会生成一个哈希值,并使用哈希值确认计划的重用,如果执行一个存储过程,存储过程的名称会生成一个哈希值,后续的每一个存储过程调用不管使用的参数是否与之前的相同,都会重用该计划。

如果运行除了存储过程以外的同样的代码啊(也就是即席T-SQL),包含代码中所有文字的整段代码将会生成哈希值。当改变了代码中的任何文字再次执行语句,新的哈希值与之前的就不同乐,因此会生成一个新的执行计划。

这种情况会导致被称为计划缓存膨胀(plan cache bloat)的场景,既可能有成千上万的即席查询的执行计划被生成和缓存,虽然从根本上说代码时相同的,单这些计划的使用次数只有1。理想的解决方案是用时存储过程或函数,或讲所有即席T-SQL都进行参数化,但是往往无法实现。

针对即席工作负荷进行优化(Optimize for Ad-hoc Workloads)选项

启用这个选项是,当一段即席T-SQL第一次执行时,SQL Server将执行计划的存根进行缓存,而不是完整计划。如果SQL Server随后尝试重用改计划,执行计划将再次生成,但这次执行计划全部被缓存,这避免了成千上万地一次性使用的执行计划在缓存中占

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值