是什么触发了SqlServer 2000中的缓存删除

时间:2009-02-27 11:31:00

标签: sql-server stored-procedures caching

我正在重写工作中的存储过程,主要是为了阻止它进行脏读,并且没有进行任何重大的结构更改。但是,针对当前版本运行新版本,我发现新版本在没有大量活动的开发数据库上运行几乎两倍!

遵循本网站的建议: http://www.sql-server-performance.com/articles/per/optimizing_sp_recompiles_p1.aspx 我使用分析器来查看发生了什么,令我惊讶的是,新版本有很多“缓存删除”,但当前版本没有“缓存删除”!

有谁可以告诉我什么触发缓存被删除?

我已经预先建立了所有临时表定义和索引(尽管教科书说INSERT之后建立标记通常更好我已经尝试过这种方法并且发现sproc实际上运行得更慢);我没有对任何引用的对象进行任何架构更改。

谢谢,

3 个答案:

答案 0 :(得分:2)

简单列表:

  1. 统计变更
  2. DBCC FREEPROCCACHE
  3. 使用/记忆压力等
  4. 必读文章:

    1. Batch Compilation, Recompilation, and Plan Caching Issues in SQL Server 2005
    2. SQL Programmability & API Development Team Blog
    3. 可能需要更多信息,但上面的评论......

答案 1 :(得分:0)

我刚刚对此进行了一些实验,发现在代码块中有BEGIN和COMMIT TRANSACTION实际上会压缩缓存删除虽然这可能是不可取的,如果它将长时间保持高利用率的表时间 :-\ 有什么方法可以解决这个问题,而无需在事务中包含代码块吗?

答案 2 :(得分:0)

交易是否只包含需要原子的东西?交易是否必要?例如,如果更新是:

插入tbl(v1,v2,v3)从otherTable中选择someValues

默认为原子。