2014-10-06 20 views
1

我使用FILESTREAM將BLOBS存儲在我的客戶機服務器應用程序中。如何在使用FILESTREAM的應用程序中高效地使用CHECKPOINT

在過去,我曾不時通過像執行命令來清除所有斑點:

UPDATE BLOBTABLE set BLOBFIELD = NULL 

這將清除斑點,我這樣做是爲了使數據庫備份更小。

但使水滴「從磁盤消失」,那麼我需要運行

CHECKPOINT 

注:這樣做是爲DBA活動,而不是軟件的一部分。

現在我意識到,在我的應用程序中,我從來沒有打電話CHECKPOINT

可能是我應該每次我刪除一個blob,我應該嗎?

只是爲了experss我自己更好,我讓我的真實情況的一個例子:

我的應用程序允許存儲文件(如PDF文檔)。

這些pdf在文件流字段中被保存爲斑點。

隨着用戶刪除它們(從UI)我運行一個DELETE命令。

我之後不會調用CEHCKPOINT,所以垃圾收集不會 運行。

通過考慮這一點,我意識到我沒有完全控制住事物。

所以我的問題很簡單:每次我刪除其中一個文件時,是否需要運行CHECKPOINT?這樣做有什麼缺點嗎?

謝謝!

+0

FILESTREAM數據存儲在一個文件夾中(通過sql server設計)。如果我將一個blob添加到我的應用程序中,我發現文件夾中的文件數量增加了3個值。如果我刪除該文件,我希望回到-3。 – LaBracca 2014-10-06 07:45:33

+1

如果它是一箇中等活動的數據庫,它應該自動檢查點相當頻繁。除非你餓死磁盤空間(在這種情況下,而不是花時間思考這個問題,去獲得更多的磁盤空間),你應該相信系統最終會刪除不必要的文件。試圖強制它通常會導致較差的整體性能。 – 2014-10-06 12:24:29

+0

@Damien_The_Unbeliever你的意思是無論如何垃圾收集器不時運行,即使不用CHECKPOINT手動調用?根據這個: – LaBracca 2014-10-07 12:31:23

回答

1

數據庫在不同時刻執行檢查點,其中之一是執行備份時的情況。

由於檢查點觸發垃圾回收,因此不需要(例外可能是巨大或複雜的情況)在應用程序中調用CHECKPOINT,因爲風險是降低性能。

如果需要,最好決定使用CHECKPOINT作爲維護活動,但請記住,數據庫備份(或甚至停止sql服務)具有檢查點。

相關問題