Ton*_*erd 5 sql-server execution-plan plan-cache sql-server-2016
清除 SQL Server 上的计划缓存后,如何重新生成存储过程的执行计划而不执行存储过程本身?
当我今天早上更新统计数据时,我的一个存储过程运行得非常缓慢。根据一些谷歌,我发现清除计划缓存可以解决这个问题 - 确实如此。但是,如果我必须再次执行此操作,我希望避免在用户等待响应时重新生成计划对性能造成影响。
SQL Server 的版本/版本是 2016 Enterprise。
清除 SQL Server 上的计划缓存后,如何重新生成存储过程的执行计划而不执行存储过程本身?
你不/不能。执行计划是在对象执行时生成的。如果您想要计划缓存中的计划,则必须执行该对象。但是,假设存储过程至少有一个输入参数,您将需要使用一个可能代表大多数情况的值,否则您可能会强制将一个不理想/“坏”计划放入缓存中。
如果我必须再次执行此操作,我希望避免在用户等待响应时重新生成计划对性能造成影响。
您最好承受性能损失,因为您无法保证在第一个人使用该计划时该计划仍然位于缓存中。如果 SQL Server 决定需要更多内存用于其他操作,则可以删除计划。因此,如果它确实在第一个人使用它之前被删除,那么您就没有为他们保存任何内容,并且现在导致服务器生成两次计划。
而且,这只是第一次。当您尝试利用它来“预”缓存它时,您就意识到了这一点。但这也意味着只有第一个用户第一次会受到轻微的性能影响。之后,只要不放弃该计划,其他人就不会受到性能影响。
为自己节省大量浪费的时间/精力,并且不用担心预缓存。更多地担心存储过程中查询的性能问题,这些问题每次都会影响所有用户,并明智地花时间改进这些问题点。
归档时间: |
|
查看次数: |
1898 次 |
最近记录: |