我们在生产系统中有一张表(出于遗留原因),它正在运行 SQL 2005 (9.0.5266) 并包含一个 TEXT 列(以及其他一些不同数据类型的列)。
突然之间(从一周前开始),我们注意到这张表的大小每天线性增加 10-15GB(而以前它一直保持不变的大小)。该表是消息传递系统的队列,因此其中的数据每隔几秒钟就会完全刷新一次。在任何时候都可能有 0 到大约 1000 行,但随着消息的插入和发送(此时它们被删除),它会迅速波动。
我们找不到在增长开始那天发生的任何变化——因此在这个阶段没有发现明显的潜在原因。
一个“明显”的罪魁祸首是 TEXT 列,因此我们检查了是否现在存储了任何大量值,但是(使用 DATALENGTH)我们发现没有超过约 32k 的单行。我们已经运行了 CHECKDB,更新了空间使用情况,重建了所有索引,等等——没有任何东西可以减少大小(CHECKDB 没有显示任何错误)。
我们查询了 sys.allocation_units 并且大小增加肯定是 LOB_DATA (显示 total_pages 和 used_pages 以恒定速率一起增加)。
为了减少昨晚的数据库大小,我们简单地在有问题的表旁边创建了一个新表(幸运的是,应用程序通过视图引用了该表),删除了旧表,并重命名了新表。我们昨晚离开了,因为我们已经缓解了空间问题而感到欣慰,并且我们今天有一张狡猾的桌子的备份可以进一步调查。然而,今天早上,表的大小已经达到 14GB(并且还在增长),而表中只有通常的 ~500 行,而 MAX(DATALENGTH(text_column)) 仅显示大约 35k。
关于什么可能导致这种“失控”增长的任何想法,或者我们可以尝试或查询的任何其他信息以获取有关究竟是什么在使用该空间的更多信息?
干杯,戴夫