【发布时间】:2010-10-05 21:17:27
【问题描述】:
我有一个 SQL Server 2005 数据库。我正在将数据记录到表中。我想防止表数据变得太大。
如何将表的大小限制为 x 行并继续记录?我希望删除最旧的行。
【问题讨论】:
标签: java sql-server sql-server-2005 database-design
我有一个 SQL Server 2005 数据库。我正在将数据记录到表中。我想防止表数据变得太大。
如何将表的大小限制为 x 行并继续记录?我希望删除最旧的行。
【问题讨论】:
标签: java sql-server sql-server-2005 database-design
您必须自己构建此过程。您可能需要考虑创建一个 SQL Server 作业,该作业运行基于您定义的条件的 SQL DELETE 语句。
【讨论】:
这是一个例子,其中触发器实际上可能是 Sql Server 中的一个好主意。 (我个人感觉SQL中的触发器就像代码中的GOTO。)
只需编写一个 INSERT 触发器,当该触发器被触发时,它将检查文件中的行数并根据您指定的任何规则执行 DELETE。
这是trigger basics. 和another 的链接,这次是屏幕截图。
【讨论】:
将表放在它自己的文件组中。限制文件组的大小。见:
然后添加一个删除旧日志记录的作业,但这通常比听起来更棘手。使用滑动窗口最有效的方法:How to Implement an Automatic Sliding Window in a Partitioned Table。如果不可能,那么下一个最好的办法是确保表上的聚集键是日期,以便删除可以有效地删除旧行。
【讨论】:
如果您想限制表的大小以用于日志记录,我不建议您考虑通过限制表中存储的记录数来解决问题。而是为存储日志的表设置存档或清除过程,此过程可以配置为在达到 X 行数后清除/存档日志,或者稍后您想要在 X 分钟数之后重新配置它/小时/等。如果您关心实际空间,那么最好分析一下您的日志实际占用了多少空间。一旦您知道有多少物理空间可用于数据库,然后限制来自 SQL Server 的数据增长,以确保存储日志信息的数据文件不会超出您的预期。
【讨论】: