我正在重写工作中的存储过程,主要是为了阻止它进行脏读,并且没有进行任何重大的结构更改。但是,针对当前版本运行新版本,我发现新版本在没有大量活动的开发数据库上运行几乎两倍!
遵循本网站的建议: http://www.sql-server-performance.com/articles/per/optimizing_sp_recompiles_p1.aspx 我使用分析器来查看发生了什么,令我惊讶的是,新版本有很多“缓存删除”,但当前版本没有“缓存删除”!
有谁可以告诉我什么触发缓存被删除?
我已经预先建立了所有临时表定义和索引(尽管教科书说INSERT之后建立标记通常更好我已经尝试过这种方法并且发现sproc实际上运行得更慢);我没有对任何引用的对象进行任何架构更改。
谢谢,
答案 0 :(得分:2)
简单列表:
必读文章:
答案 1 :(得分:0)
我刚刚对此进行了一些实验,发现在代码块中有BEGIN和COMMIT TRANSACTION实际上会压缩缓存删除虽然这可能是不可取的,如果它将长时间保持高利用率的表时间 :-\ 有什么方法可以解决这个问题,而无需在事务中包含代码块吗?
答案 2 :(得分:0)
交易是否只包含需要原子的东西?交易是否必要?例如,如果更新是:
插入tbl(v1,v2,v3)从otherTable中选择someValues
默认为原子。