• 使用参数化SQL,避免即席式TSQL查询计划导致内存膨胀


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

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

    这种情况会导致被称为计划缓存膨胀(plan cache bloat)的场景,既可能有成千上万的即席查询的执行计划被生成和缓存,虽然从根本上说代码时相同的,单这些计划的使用次数只有1。

    理想的解决方案是用时存储过程或函数,或将所有即席T-SQL都进行参数化。

    对于喜欢手写SQL朋友来说,这真是一个不幸的事实,好在还有点轻微的补救办法:

    启用即席优化选项(默认是关闭的)

  • 相关阅读:
    Python 第一课
    HTML学习--基础(2)
    HTML学习--初探(1)
    设计模式--观察者模式
    设计模式--迭代器模式
    设计模式--装饰器模式
    maven常用依赖总结
    mybatis学习二
    mybatis学习一
    maven新建项目的几种方式和启动
  • 原文地址:https://www.cnblogs.com/leavind/p/16082882.html
Copyright © 2020-2023  润新知