2009-07-13 55 views
2

我们有一个SQL Server 2000生产环境,其中突然(即过去3天)导致tempdb数据文件增长得非常大(45个演出数据库仅有10个演出)。 昨天,再次发生之后,我们收缩了数据库并单独运行主要批处理过程而没有任何问题。不过,今天早上该数据库备份了45个演出。Sql Server 2000 - tempdb增长非常大

是否有一个简单的方法来找出是什么导致这个数据库增长如此之大?理想情况下,可以在今天看到的东西,但如果没有明天可以获得的信息。

顺便说一句:收缩数据库可在几秒钟内恢复空间。

+2

听起来像一个服务器库问题......但你可能想看看Sql Profiler。 – 2009-07-13 14:57:44

回答

2

与Jimmy同意,您需要使用SQL Profiler来查找创建如此密集的临时对象。这可能是临时表,使用一些报告或类似的东西。

+0

我会设置一些Profiler跟踪来运行整夜跟踪可能发生的事件:跟踪运行超过10秒的任何事情,产生超过1M个数据读取的任何事情,产生超过1M个写入的任何事情(这将是三条独立的痕迹)。很难说,很大程度上取决于你的环境和系统;跟踪这些东西可能需要很长时间(因为您只能在一夜之间运行并在第二天查看)。由于它是tempdb,它可能是一个单一的大动作,而不是一群小家伙(除非你有声明事务)。 – 2009-07-13 16:00:15

0

你是否有一份工作正在运行,重建索引?这可能是它使用SORT_IN_TEMPDB

或做排序可能将tempdb扩展

0

这可能有事情做与在tempdb设置为恢复模式的任何其他大型查询。它可能设置为FULL而不是BULK-LOGGED。完全恢复将增加事务日志大小,直到执行备份。

查看数据文件大小与事务日志大小。

0

我不是一个DBA,但一些想法:

  • 是否有可能有临时创建 表,但不掉线? ##tempTable
  • 是否有可能 有一个大的临时表 创建(和丢弃),但空间 不回收?
  • 您是否在做任何 批量加载类型的系统 可能使用临时表? (如果可以的话,我不是 )但你能打开 tempdb的自动收缩功能吗?
1

我想谢谢大家的答案,因为他们肯定导致了问题的原因。

我们打开了SQL分析器,确定发现了大量的大容量负载。由于我们正在开展一个项目,以将“冒犯性”的工作转移到mysql中,因此我们现在可能只会看一些事情。