parameter-sniffing

    0热度

    1回答

    当针对表运行sp_recompile时,我明白所有依赖于该表的存储过程和触发器都将被重新编译。 我不明白的是SQL Server使用这个重新编译的参数。我看不出参数嗅探会在这里产生影响。它是否使用类似于OPTIMIZE FOR UNKNOWN的方式来编译“通用”执行计划? 我觉得我错过了一些非常明显的东西。 有没有人对此有所了解?

    1热度

    1回答

    我使用sp_executesql传递一个复杂的选择与几个参数。这样做比从存储过程中取出并声明变量要慢得多。 我见过很多关于SQL参数嗅探的问题,我的场景听起来像是这样。但是,即使在调用DBCC FREEPROCCACHE或修改外部Select与Option (Recompile)之后,与在存储过程之外写入相同的查询相比,它仍然使用不同且不合适的执行计划。 但仍然使用存储过程,但将参数的副本设置为局

    3热度

    2回答

    SQL Server 2014的"Hekaton" in-memory table optimization宣称“存储过程中业务逻辑的本地编译”。由于SQL Server 2012及更早版本中的“参数嗅探”问题(请参阅here和here),但是我一直被迫设计了大多数使用OPTIMIZE FOR UNKNOWN(或其等价物)的存储过程。这有效地防止了查询计划被缓存,并且强制SQL Server在每次

    0热度

    1回答

    我有一个SELECT语句(不是存储过程),用于在SSRS(Visual Studio 2010)中创建报告。 参数@ClassCode是造成麻烦的一个。但是在开发中它可以正常工作,但是当我将它部署到生产环境时,它会永久呈现。 我假设它是一个参数嗅探,我读了关于如何修复它在存储过程中。但我没有SP,我正在使用SELECT语句。 SELECT语句的解决方法是什么? 环境之间有什么区别?生产要强大得多。

    1热度

    1回答

    这是一个可能的this question重复,尽管我认为我的示例更深入一些,我希望得到更明确的答案。 我试图理解为什么运行与option(recompile)简单的查询表现更好。 DECLARE @p9 nvarchar(4000) SET @p9=N'Alex%' SELECT ContactId as CandidateId FROM Candidate WHERE

    4热度

    2回答

    我相当肯定,添加参数嗅探表值参数是很少或没有价值,但我想知道如果有人可以证实这一点? (INT_LIST是用户定义的表类型是INT类型的单个列) CREATE PROCEDURE [dbo].[TVPSniffTest]( @param1 varchar(50), @idList INT_LIST readonly ) AS BEGIN DECLARE @para

    1热度

    1回答

    创建以下脚本来加载用户帐户。在管理工作室的初始测试中使用用户名参数字符串。奇怪的是,我从参数字符串更改为字符串文字后,查询减慢了20秒。是不是通常用于参数嗅探的其他方式?我已经尝试了DBCC FREEPROCCACHE并创建了一个存储过程,并设置了一些本地变量,但是这并没有加快查询速度。有什么建议么? DECLARE @accntRep VARCHAR(50) SET @accntRep = '

    3热度

    2回答

    当我的其中一个查询花费比预期更长的时间执行时,我遇到了参数嗅探。当我钻研得更深的这个问题,我才知道: 当第一次查询被执行它(SQL Server)建立该查询和次其它n个相同的查询执行,如果创建执行计划它已经很大的差异在结果集与第一次执行则发生参数嗅探问题”。 这是我的情况。 现在的问题是,有没有什么办法或变通方法来克服参数嗅探SQL Server在这些情况下? 我通过运行知道sp_updatest

    3热度

    1回答

    我有以下代码重复运行存储过程。当我逐字运行SQL语句时,它工作得很好,所以我创建了一个存储过程,它封装了我正在做的事情。 foreach (string worker in workers) { _gzClasses.ExecuteCommand("EXEC dbo.Session_Aggregate @workerId = {0}, @timeThresh = {1}", worke

    6热度

    1回答

    我在SQL Server 2012中有一个多租户数据库,其中每个租户的行由tenant_id列(又名Shared Database, Shared Schema方法)标识。有些租户,特别是较新的租户,行数很少,而其他租户则有很多。 SQL Server的查询优化器通常会生成基于它的第一个执行过程中所提供的参数的查询计划,然后重新使用该计划,今后所有的查询即便是有不同的参数。这被称为paramete