2010-10-05 125 views
6

我有一个SQL Server 2005数据库。我正在将数据记录到表中。我想防止表格数据变得太大。如何限制表的大小?

如何限制表的大小为x行数,并保持记录?我想让最古老的行落下。

回答

8

你必须自己建立这个过程。您可能需要考虑创建一个SQL Server作业,该作业运行基于您定义的条件的SQL DELETE语句。

+1

工作可能比触发器更好,如果你不介意总会有点结束。只需将它设置为每晚或每周运行一次或其他。 – 2010-10-05 21:21:21

3

这是触发器在Sql Server中实际上可能是个好主意的一个例子。 (我个人的感觉是,SQL中的触发器与代码中的GOTO相似。)

只需编写一个INSERT触发器,触发器将检查文件中的行数并根据您指定的任何规则执行DELETE 。

这是链接trigger basics.another,这次与屏幕上限。

+1

如果问题表经常变化,那么这不是一个好主意。当系统负荷最少时,通常更好地安排维护项目的时间。 – NotMe 2010-10-05 21:23:09

+0

如果你确实走这条路线,你应该评估性能。使用触发器和大量数据,INSERT语句需要很长时间才能完成。而且,您必须预测删除过程中的失败。由于触发器失败,您必须决定插入失败是否很重要。 – bobs 2010-10-05 21:23:17

2

将表放置在它自己的文件组上。限制文件组的大小。请参阅:

然后添加删除旧的日志记录工作,但这通常是麻烦比它的声音。使用滑动窗口的最有效方法是:How to Implement an Automatic Sliding Window in a Partitioned Table。如果不可行,那么下一个最好的做法是确保表上的聚簇键是日期,以便删除可以有效地删除旧行。

0

如果你想为记录目的限制表的大小,我不会建议通过限制存储在表中的记录数来考虑解决问题。取而代之的是对存储日志的表进行存档或清除处理,可以将此进程配置为一旦X行数达到就清除/归档日志,或者稍后您希望在X分钟后重新配置日志/小时/等。如果你关心实际空间,那么最好分析你的日志实际占用的空间。一旦你知道了你有多少物理空间可用于数据库,那么就应该限制SQL Server的数据增长,以确保日志信息所存储的数据文件不会超出你的预期。