首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tempdb填充

Tempdb填充
EN

Stack Overflow用户
提问于 2012-10-17 11:13:55
回答 2查看 5K关注 0票数 2

我目前正在处理的BI项目接收来自一个基于SPs的复杂进程的数据,这些进程使用(也)许多临时表。这是我们无法控制的事情(否则我会改变它)。

我们在这个项目中的部分主要基于SSIS。

进程运行良好,但tempdb的填充速度相对较快,然后我们开始得到错误。

我在找两样东西:

  1. 如何防止tempdb“溢出”(或至少减缓它)?
  2. 当tempdb溢出时,如何清除它?(最好使用SSIS)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-17 14:31:50

第一个问题是为什么tempdb要填充,但您已经确定了填充的来源,这很可能是由于过度的临时表使用所致。听起来好像重新处理存储过程以使用更少的资源不是一种选择(如果我错了,请纠正我)。

接下来我要看的是为tempdb增加更多的空间,但这是一个绷带,我相信您已经尝试过了。

您可以做的事情是看看你的tempdb是如何定义的。你最初的尺寸是多少,增长模式是什么?右键单击tempdb并选择属性或让DBA执行此操作。每当Server服务重新启动时,会删除并重新创建tempdb,而对于生产框来说,调整大小和增长的默认值都不是正常值。如果您看到具有10%增长模式的8 MB数据和1MB日志,那么您就有极好的机会来提高每个使用该实例的人的性能。我不会详细讨论细节,但是这会导致大量的文件增长,这对性能影响很大。通过正确的初始尺寸使TempDB性能最大化和msdn在优化tempdb性能上。修正tempdb增长并不会神奇地使你的问题消失,但是如果你在修补事情,它不会伤害你。

你能控制的一件事就是SSIS。我假设SSIS正在调用这些存储的过程,对于您正在加载的每个表都是这样吗?如果您有多个包和/或数据流并行运行,则可以查看它们的序列化。这将增加您的总运行时间,但应该在更长的时间内分散您的tempdb成本。

另一种选择是查看包中的隔离级别。我在这方面很薄弱,但我的理解是,不同的隔离级别对tempdb的使用有不同的影响。我的(可能有缺陷的)理解是,快照基本上是复制了你在tempdb中更新的表,以允许其他人继续访问该表,并且只有在完成之后,它才会将这些更改推回真实的表中。这将比不同的隔离级别花费更多的tempdb空间。但是没有免费的,所以如果您将它切换到Serializable的默认值,它可能会降低tempdb的使用率,但代价是阻塞更高/并发访问更少。

参考文献

  • 优化tempdb (pdf)
票数 1
EN

Stack Overflow用户

发布于 2012-10-17 13:22:47

你不能!如果您有一个在tempDB上创建大量数据的进程A (您提到的复杂进程),您可以使用进程B来清理该数据,否则可能会破坏进程A。

我知道你说你不能,但是唯一的解决办法是找到一种改进过程A的方法,这样它就不会占用太多的空间。或增加临时数据库的空间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12933056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档