Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 创建多个计划的参数化查询_Sql_Sql Server_Sql Server 2016_Sqlperformance_Parameterized Query - Fatal编程技术网

Sql 创建多个计划的参数化查询

Sql 创建多个计划的参数化查询,sql,sql-server,sql-server-2016,sqlperformance,parameterized-query,Sql,Sql Server,Sql Server 2016,Sqlperformance,Parameterized Query,我有一些查询是参数化的,每次都在创建新的执行计划,我使用的是SQL Server 2016 查询如下: (@P1 varchar(1043),@P2 varchar(6)) UPDATE table SET FILEDATA=@P1 WHERE FILEID=@P2 此查询没有使用缓存中已生成的执行计划,而是每次执行时都创建一个新计划 我过去曾遇到过这种情况,以下几点为我解决了这一问题: 确保所有这些代码都在存储过程中。即使使用params,存储过程也更有可能重用同一计划 我不会重复Ni

我有一些查询是参数化的,每次都在创建新的执行计划,我使用的是SQL Server 2016

查询如下:

(@P1 varchar(1043),@P2 varchar(6))
UPDATE table 
SET FILEDATA=@P1 
WHERE FILEID=@P2
此查询没有使用缓存中已生成的执行计划,而是每次执行时都创建一个新计划


我过去曾遇到过这种情况,以下几点为我解决了这一问题:

  • 确保所有这些代码都在存储过程中。即使使用params,存储过程也更有可能重用同一计划
  • 我不会重复Nisarg Shah在评论中所说的话,因为看起来你已经解决了这些问题,但这些都是需要检查的非常有效的东西
  • 这听起来可能很奇怪,但是尽可能地完全限定代码。根据我的经验,如果现有计划在执行过程中遇到问题,那么它更有可能找到它,如果它是这样设计的:

    (@P1 varchar(1043),@P2 varchar(6))
    UPDATE database.dbo.table 
    SET database.dbo.table.FILEDATA=@P1 
    WHERE database.dbo.FILEID=@P2
    

通常我不会这样写我的查询,因为它们看起来有点难读,但在过去,当我得到成堆的计划时,它对我很有效。

(1)你如何验证它们没有使用相同的计划?(2) 该表中的数据多久更改一次?如果更改过于频繁,统计信息可能会失效,这将迫使引擎重新生成执行计划。(3) 您是否有任何重复性作业重置该表上的统计信息或重建该表上的索引?(4) 您是否验证了计划缓存未满?1)我运行了一个脚本以获取计划计数2)非常频繁(我是否知道如何验证统计信息)3)没有此类作业4)是的,我验证了计划缓存未满(1)但您是否确实验证了该查询存在重复的计划?(2) 如果数据变化非常频繁-SQL server必须根据新的统计数据更新执行计划-这是一件好事。检查表上统计信息的上次创建时间,并将其与执行计划上的日期进行比较以进行验证。参数嗅探…正如建议的那样,您首先需要确定同一查询是否有多个计划(以及有多少个计划)。请注意,数据类型很重要,连接设置也很重要(如ARTIHABORT)-这些东西会使SQL Server看到不同的查询。请看,我在问题中添加了一个图像,这可能有助于深入回答此问题,因为完全限定的查询对我没有帮助。感谢您的
@P1
看起来大小不一,足以触发制定新计划。也许这样最好?如果你想强迫它使用相同的计划,这里有一个很好的方法来做:如果这不起作用,如果你在那里张贴,可能会得到一个更好的答案。祝你好运