【问题标题】:How to limit the size of a table?如何限制表格的大小?
【发布时间】:2010-10-05 21:17:27
【问题描述】:

我有一个 SQL Server 2005 数据库。我正在将数据记录到表中。我想防止表数据变得太大。

如何将表的大小限制为 x 行并继续记录?我希望删除最旧的行。

【问题讨论】:

    标签: java sql-server sql-server-2005 database-design


    【解决方案1】:

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

    【讨论】:

    • 如果您不介意总金额超出预期,那么一份工作可能比触发器更好。只需将其设置为每晚或每周运行一次即可。
    【解决方案2】:

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

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

    这是trigger basics.another 的链接,这次是屏幕截图。

    【讨论】:

    • 如果有问题的表经常变化,那么这不是一个好主意。通常最好在系统负载最少的时候安排维护项目。
    • 如果你走这条路,你应该评估性能。对于触发器和大量数据,INSERT 语句将需要更长的时间才能完成。而且,您必须预料到删除过程中的失败。您必须决定是否因为触发器失败而导致插入失败。
    【解决方案3】:

    将表放在它自己的文件组中。限制文件组的大小。见:

    然后添加一个删除旧日志记录的作业,但这通常比听起来更棘手。使用滑动窗口最有效的方法:How to Implement an Automatic Sliding Window in a Partitioned Table。如果不可能,那么下一个最好的办法是确保表上的聚集键是日期,以便删除可以有效地删除旧行。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-09
        • 2017-09-22
        • 2020-06-04
        • 2015-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-19
        相关资源
        最近更新 更多