Sql 存储过程在ASP页上间歇性超时
有时,我们会从一些旧的ASP页面中收到此错误,这些页面使用存储过程返回记录集(通常您所描述的内容听起来像是参数嗅探导致的错误缓存的查询计划) 有时可以通过确保统计数据和索引是最新的来避免这种情况 建议您发布有问题的存储过程 规范参考是: 在SQL Server 2008及以后的版本中,您可以使用Sql 存储过程在ASP页上间歇性超时,sql,sql-server-2008,asp-classic,Sql,Sql Server 2008,Asp Classic,有时,我们会从一些旧的ASP页面中收到此错误,这些页面使用存储过程返回记录集(通常您所描述的内容听起来像是参数嗅探导致的错误缓存的查询计划) 有时可以通过确保统计数据和索引是最新的来避免这种情况 建议您发布有问题的存储过程 规范参考是: 在SQL Server 2008及以后的版本中,您可以使用优化: SELECT Col1, Col2, Col3 FROM [DB-Table] WHERE @Filter is null OR ( Col1 LIKE '%' +
优化
:
SELECT Col1, Col2, Col3 FROM [DB-Table]
WHERE
@Filter is null OR (
Col1 LIKE '%' + @Filter + '%'
OR Col2 LIKE '%' + @Filter + '%'
OR Col3 LIKE '%' + @Filter + '%'
)
ORDER By
CASE WHEN @SortField = 'MyCol1' AND @SortOrder = 1 THEN Col1 END ASC,
CASE WHEN @SortField = 'MyCol1' AND @SortOrder = 0 THEN Col1 END DESC,
CASE WHEN @SortField = 'MyCol2' AND @SortOrder = 0 THEN Col2 END DESC,
CASE WHEN @SortField = 'MYCol2' AND @SortOrder = 1 THEN Col2 END ASC,
CASE WHEN @SortField = 'MyCol3' AND @SortOrder = 1 THEN Col3 END ASC,
CASE WHEN @SortField = 'MyCol4' AND @SortOrder = 0 THEN Col3 END DESC
OPTION (OPTIMIZE FOR (@Filter UNKNOWN))
这告诉SQL Server消除对参数
@Filter
的参数嗅探,并使用平均选择性值(基于统计数据)。您所描述的内容听起来像是参数嗅探导致的错误缓存的查询计划
有时可以通过确保统计数据和索引是最新的来避免这种情况
建议您发布有问题的存储过程
规范参考是:
在SQL Server 2008及以后的版本中,您可以使用优化
:
SELECT Col1, Col2, Col3 FROM [DB-Table]
WHERE
@Filter is null OR (
Col1 LIKE '%' + @Filter + '%'
OR Col2 LIKE '%' + @Filter + '%'
OR Col3 LIKE '%' + @Filter + '%'
)
ORDER By
CASE WHEN @SortField = 'MyCol1' AND @SortOrder = 1 THEN Col1 END ASC,
CASE WHEN @SortField = 'MyCol1' AND @SortOrder = 0 THEN Col1 END DESC,
CASE WHEN @SortField = 'MyCol2' AND @SortOrder = 0 THEN Col2 END DESC,
CASE WHEN @SortField = 'MYCol2' AND @SortOrder = 1 THEN Col2 END ASC,
CASE WHEN @SortField = 'MyCol3' AND @SortOrder = 1 THEN Col3 END ASC,
CASE WHEN @SortField = 'MyCol4' AND @SortOrder = 0 THEN Col3 END DESC
OPTION (OPTIMIZE FOR (@Filter UNKNOWN))
这告诉SQL Server消除对参数
@Filter
的参数嗅探,并使用平均选择性值(基于统计).出现此问题的不只是一个SP,但据我所知,确实存在此问题的SP与我刚刚发布的示例代码类似。感谢您提供的链接…今晚为我提供的睡前阅读:)动态过滤器可能是问题所在。如果第一次调用它时使用的不是最常见的过滤器形式,则可能会缓存一个查询计划,该计划对于过滤器的更常见值不再有效。这篇文章介绍了您拥有的选项(取决于SQL server版本)。非常感谢@Mitch将参与其中,看看会发生什么。我们正在运行2008年,所以祈祷这将解决这个问题。Muchas Gracias。出现此问题的不仅仅是一个SP,但据我所知,确实存在此问题的SP与我刚刚发布的示例代码类似。谢谢你的链接。。。今晚给我的睡前读物:)动态过滤器可能就是问题所在。如果第一次调用它时使用的不是最常见的过滤器形式,则可能会缓存一个查询计划,该计划对于过滤器的更常见值不再有效。这篇文章介绍了您拥有的选项(取决于SQL server版本)。非常感谢@Mitch将参与其中,看看会发生什么。我们正在运行2008年,所以祈祷这将解决这个问题。谢谢你。