如何确定哪些表导致数据库随时间增长?


8

我在SQL Server 2008中拥有一个一直在增长的数据库,我想知道在过去6个月中哪些表带来了最大的增长。


您可以将T-SQL和PowerShell结合使用-使用PowerShell监视表增长,以随着时间的推移对其进行监视和趋势分析。
Kin Shah)

您要备份多久?您可以还原较旧的表,查看表,记录信息并在还原每个表后进行比较。
阿里·拉泽吉

您的表中有哪些信息?如果它恰好包含last_updated_at时间戳等审计类型信息,则可以做出一些有根据的猜测。
Clockwork-Muse

您可以检查前面的答案作为入门。但最有可能亚伦的清单是要走的路,选择一个解决方案并在此基础上发展。另外,检查增长的是数据文件还是日志文件?
玛丽安·2015年

Answers:


15

SQL Server不会跟踪此信息。您需要进行某种监视(无论是工具还是自行开发),以便随着时间的推移保持表空间的快照。这可以是简单或复杂的:

  • 查看报告@Zane 在他的答案中突出显示,并经常保存文件;
  • 定期拍摄自己的视图快照,如sys.dm_db_partition_stats;
  • 按照@Ali的建议查看旧备份的还原副本-但是谁知道您的备份走了多远,并且如果磁盘空间有问题,您可能不愿意为一并比较而恢复一大堆备份无论如何。
  • 使用外部工具(例如PowerShell)使其自动化,就像文章@Kin指出的那样
  • 使用完善的监视工具,该工具随时间跟踪空间,碎片等(免责声明:我为SQL Sentry工作)。

除了已经实现了这些方法中的一种或多种,​​或者有人发明了时间机器之外,还没有真正好的方法来弄清楚6个月前,2周前或20分钟前的桌子有多大。


13

如果您还没有以某种方式捕获和存储这些指标,那么就无法查看历史记录。但是,如果有帮助,您可以很容易地看到哪些表现在正在使用最多的磁盘。

右键点击


2

我每天在客户数据库上运行此程序,以跟踪各个表随时间的增长。

DECLARE @names TABLE (
 tableName VARCHAR(128)
 )

INSERT INTO @names
SELECT [name] FROM customerdb.dbo.sysobjects WHERE xtype='U'

WHILE (SELECT COUNT(tableName) FROM @names) > 0
BEGIN

    DECLARE @thisTable VARCHAR(128)
    SET @thisTable = (SELECT TOP 1 tableName FROM @names)
    INSERT INTO mydb.dbo.mytable ([name], [rows], [reserved], [data], [index_size], [unused])
    EXEC sp_spaceused @objname=@thisTable

    DELETE FROM @names
    WHERE tableName = @thisTable

END

1

我有一份要每周运行的作业的SQL脚本时间表。尝试编写一个脚本,该脚本从sp_spaceused,sys.schemas和sys.tables获取所有信息。并将其与创建日期一起放在表中。(您可以开始监视未来)

但是,如果您想找出前几个月的表增长情况,并且没有设置任何脚本或工作,则可能需要在测试环境中还原备份,并查看最高的表并比较表增长了多少通过时间。


5
为什么不共享您的脚本?
Erik Darling

-2

我如何在没有额外工具的情况下在MySQL中进行操作:

运行类似“ SHOW TABLE STATUS”的查询,并将结果保存在带有额外时间戳字段的表中。

使用此数据,您可以了解每个表的历史记录,并可以为数据长度,行数或最大差异选择表。随着时间的推移。

由于状态数据不是很多字节,因此您可以每天运行cronjob。通过板载命令完美,轻松,免费运行。

与之前发布的链接玛丽安相同的过程。MS T-SQL命令应类似于“ SELECT * FROM INFORMATION_SCHEMA.TABLES”-只是google。我在几秒钟内找到了2种可能的解决方案:

列出数据库中的所有表及其行数和大小:http : //www.sqlmatters.com/Articles/Listing%20all%20tables%20in%20a%20database%20and%20the%20row%20counts%20and%20sizes.aspx

SQL Server –查询以查找每个表的行数,列数和ByteSize:http//blog.sqlauthority.com/2007/01/10/sql-server-query-to-find-number-rows-columns-bytesize-为当前数据库中的每个表查找数据库中的最大表/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.