我在SQL Server 2008中拥有一个一直在增长的数据库,我想知道在过去6个月中哪些表带来了最大的增长。
last_updated_at
时间戳等审计类型信息,则可以做出一些有根据的猜测。
我在SQL Server 2008中拥有一个一直在增长的数据库,我想知道在过去6个月中哪些表带来了最大的增长。
last_updated_at
时间戳等审计类型信息,则可以做出一些有根据的猜测。
Answers:
SQL Server不会跟踪此信息。您需要进行某种监视(无论是工具还是自行开发),以便随着时间的推移保持表空间的快照。这可以是简单或复杂的:
sys.dm_db_partition_stats
;除了已经实现了这些方法中的一种或多种,或者有人发明了时间机器之外,还没有真正好的方法来弄清楚6个月前,2周前或20分钟前的桌子有多大。
我每天在客户数据库上运行此程序,以跟踪各个表随时间的增长。
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
我有一份要每周运行的作业的SQL脚本时间表。尝试编写一个脚本,该脚本从sp_spaceused,sys.schemas和sys.tables获取所有信息。并将其与创建日期一起放在表中。(您可以开始监视未来)
但是,如果您想找出前几个月的表增长情况,并且没有设置任何脚本或工作,则可能需要在测试环境中还原备份,并查看最高的表并比较表增长了多少通过时间。
我如何在没有额外工具的情况下在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-为当前数据库中的每个表查找数据库中的最大表/