0

我们正在使用 SQL Server 2005。由于 tempdb 大小过大,最近 SQL Server 2005 在我们的生产环境中崩溃了。1) 大 tempdb 大小可能是什么原因?2) 有什么方法可以查看 tempdb 中有哪些数据?

4

4 回答 4

1

2) 有什么方法可以查看 tempdb 中有哪些数据?

不,因为它没有保存在那里。Tempdb 有非常特殊的处理,例如在每次服务器重新启动时被丢弃。

1) 大 tempdb 大小可能是什么原因?

低效的 SQL、维护工作或手头的数据。显然,一个 800gb、6000gb 的数据库可能需要比 4gb 在线 crm 尝试更多的 tempdb 空间。您并没有真正以绝对值指定任何大小。什么是大的?我在较小的服务器上硬编码了 64gb 的 tempdb 数据库。

进入 Tempdb 的典型 SQL 是:

  • 作为查询的一部分无法解决的排序(您需要在某些地方存储键)
  • 不同的。需要 tempdb 中的所有返回数据来查找双精度。
  • 可能在连接期间进行某些操作。
  • Tempdb 使用情况(临时表)。我之所以提到它们,是因为在加载和清理期间,我经常在其中保留数百兆字节的数据。

通常,您可以通过在查询日志中包含大量 IO 统计信息来找到这些查询,或者只是速度较慢。

也就是说,维护计划也在那里,但有理由。最后,您的“大”可能是我的“甚至不值得一提的小”。这真的取决于你做什么。使用查询跟踪工具找出需要很长时间的内容。

物理上 Tempdb 在处理上非常特殊 - 如果不需要,sql server 不会写入文件(即,将文件保存在内存中)。写入磁盘是内存流动的标志。这与正常的数据库写入行为不同。Tempdb,如果它溢出,最好放在一个速度相当快的 SSD 上……这通常不会那么贵,因为它仍然会相对较小。

使用此处的查询来查找有关 tempdb 的其他查询 - 基本上您在这里是在脏水中钓鱼,需要尝试一些事情,直到找到罪魁祸首。

于 2011-03-11T05:58:57.627 回答
0

好的 tempdb 是一个特殊的数据库。您在过程等中使用的任何临时对象都在这里创建。因此,如果您的应用程序在查询中使用大量临时表,它们都将驻留在此处,但它们应该在连接(spid)重置后自行清理。

可以增加 tempdb 的另一件事是数据库维护任务,但是它们会对数据库日志文件造成更大的损失。

每次重新启动 SQL 服务时,也会清除 Tempdb。它基本上删除数据库并重新创建它。我同意@Nic 关于保留 tempdb 的观点,不要乱用它,tempdb 中的任何空间问题通常表明其他地方存在另一个更大的问题。更多的空间会掩盖问题,但只会持续这么长时间。您的驱动器有多少可用空间来安装 tempdb?

另一件事,如果还没有的话,试着把 tempdb 放在它自己的驱动器上,如果可能的话,再把数据和日志文件放在它们自己单独的驱动器上。

因此,如果您不重新启动 SQL Server/服务,您的驱动器将很快耗尽空间。,

于 2011-03-11T04:10:00.743 回答
0

使用临时数据库

从 sys.database_files 中选择 (size*8) 作为 FileSizeKB

于 2014-12-08T03:14:44.433 回答
0

增长 SQL Server 数据库(不仅仅是任何数据库)的常用方法tempdb是将其数据和日志文件设置为自动增长(尤其是日志文件)。SQL Server 非常乐意增长日志和数据文件,直到耗尽所有可用的磁盘空间。

恕我直言,最佳实践是允许对数据文件进行有限的自动增长(设置它可以增长的上限)并修复日志文件的大小。您可能需要进行一些分析以确定日志文件需要多大。特别是对于 tempdb,恢复模式也应该设置为简单。

于 2011-03-11T02:51:17.420 回答