And*_*708 6 sql sql-server caching
我有几个关于Microsoft SQL Server 2008性能的问题,主要是关于执行计划.
据MSDN称,与直接SQL查询相比,存储过程具有更好的性能,因为:
数据库可以准备,优化和缓存执行计划,以便以后可以重用执行计划.
我的第一个问题是为什么会这样.我之前已经读过,当使用参数化查询(预处理语句)时,执行计划被缓存以用于具有可能不同值(执行上下文)的后续执行.存储过程是否仍然更有效?如果是这样,存储过程的执行计划是仅按需重新创建的,还是不太可能从缓存中清除?参数化查询是否被视为ad-hoc查询,这意味着执行计划更有可能从缓存中清除?
此外,由于我仍然是这个领域的新手,我想知道是否有某些命令只适用于T-SQL.我有一个查询,在第一次运行中需要大约12秒才能完成,然后在Microsoft SQL Management Studio和ADO.NET中大约需要3秒钟.作为演示文稿的一部分,该查询应该是无效的.事情是,我的查询中,我同时使用CHECKPOINT,并DBCC DROPCLEANBUFFERS按照这篇文章也OPTION (RECOMPILE).但是,至少这两个首先似乎没有区别,因为查询仍然需要3秒.我的猜测是,这是由于数据缓存没有被清除.任何想法为什么缓存似乎没有被清除,或任何想法为什么我的查询在第一次执行后明显更快?
这些是我现在想到的问题.
“存储过程还会更高效吗?”:基本上不会。它节省的很少。从性能的角度来看,您几乎可以在应用程序中使用 SQL 文字(除非它们很大)。SQL Server 会将您发送给它的字符串与缓存计划进行匹配。
“ 我有一个查询,第一次运行需要大约 12 秒才能完成,然后大约需要 3 秒” 考虑到您清除了所有缓存,这可能是一个统计问题。当您第一次访问列时,SQL Server 会自动创建统计信息。我想这就是你身上发生过的事情。尝试运行 sp_updatestats(在清除缓存之前)。