TempDB mdf 文件的问题不断增加

nig*_*ivy 6 sql-server-2005 sql-server disk-space tempdb auto-growth

我有一个 tempdb 增长问题。让我通过提供我的 tempdb 设置来开始一切。

临时数据库设置

即使没有在数据库/服务器上运行查询,tempdb 的大小也会不断增加,开始迅速,然后缓慢而没有停止。我运行了许多查询来找出正在运行的内容,下面是查询的结果,它实际上给了我可以使用的结果。

dm_db_task_space_usage

可以看出,它们都是内部 spid 的,有什么方法可以找出 tempdb 继续失控的原因以及如何缓解它?对这个问题的任何帮助将不胜感激。

--Query that returned the result set
SELECT session_id,
       SUM(internal_objects_alloc_page_count)   AS task_internal_objects_alloc_page_count,
       SUM(internal_objects_dealloc_page_count) AS task_internal_objects_dealloc_page_count
FROM   sys.dm_db_task_space_usage
GROUP  BY session_id
HAVING SUM(internal_objects_alloc_page_count) > 0 
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 11

那么首先,为什么您的数据文件增长设置为 1MB?如果您需要在 tempdb 中容纳 20MB 的数据,该文件将不得不增长 20 倍!想象一下,如果您有一个需要 200MB 或 2GB 溢出到磁盘的查询?哎呀。

增长事件代价高昂,尤其是在较旧的 SAS/SATA 存储上,尤其是在您没有启用即时文件初始化的情况下。您真的应该尝试预先调整文件的大小,以便它们足够大以容纳您最繁忙的工作负载,并完全避免增长事件。这并不总是可行的,但取而代之的是,增长规模应该大得多。您真的希望这是一个罕见且孤立的事件,而不是不断发生的事件。当它最终会使用更多空间时,保持 tempdb 小有什么意义?您是否打算将空间暂时出租给出价最高的人,然后驱逐他们?

另外,为什么只有一个 tempdb 文件?这是一个常见的争论来源。典型的智慧建议从 4 个文件开始,即使它们都在同一个磁盘上。这可以大大减少争用,尤其是当多个并发进程尝试创建对象或以其他方式使用 tempdb 中的空间时。您可能还想查看启用跟踪标志 1117(确保所有数据文件同时增长)和跟踪标志 1118(更改扩展区分配)。关于这些的链接如下。

当然,这些都不能解决您的核心问题 - 缺乏(或担心)磁盘空间。如果您没有足够的磁盘空间来支持系统的当前使用(无论是系统还是您的用户),请获取更多磁盘空间,或移动系统。您可能能够找到一些罪魁祸首(请参阅此答案了解一些常见问题),但您无法将它们全部消灭。

您可能还会发现这些东西很有用:

而且,既然我们知道您正在使用 Service Broker,您可能需要阅读这两页,这可能有助于解释为什么您的对话没有清除:


Ken*_*her 2

根据您列出的设置,我认为您的 tempdb 设置得非常小。1000MB对于小型实例,请尝试从数据文件和日志文件开始500MB100MB然后将数据和50MB日志的自动增长更改为。然后监控。如果您仍然频繁生长,请尝试将初始尺寸增加 X10,将生长尺寸增加 X2,然后再次监控。Tempdb 通常不会随机增长。有东西正在使用它。

现在,如果这是您的个人电脑,那么也许可以分别尝试100MB50MB,但即便如此,当您实际做事时,我仍会期望一定程度的增长。

当然,所有这些都取决于您有多少 tempdb 空间。我的几个生产服务器都有临时数据库,100GB而且我见过更大的临时数据库。