2010-10-05 71 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的數據增長,以確保日誌信息所存儲的數據文件不會超出你的預期。