我使用FILESTREAM將BLOBS存儲在我的客戶機服務器應用程序中。如何在使用FILESTREAM的應用程序中高效地使用CHECKPOINT
在過去,我曾不時通過像執行命令來清除所有斑點:
UPDATE BLOBTABLE set BLOBFIELD = NULL
這將清除斑點,我這樣做是爲了使數據庫備份更小。
但使水滴「從磁盤消失」,那麼我需要運行
CHECKPOINT
注:這樣做是爲DBA活動,而不是軟件的一部分。
現在我意識到,在我的應用程序中,我從來沒有打電話CHECKPOINT
。
可能是我應該每次我刪除一個blob,我應該嗎?
只是爲了experss我自己更好,我讓我的真實情況的一個例子:
我的應用程序允許存儲文件(如PDF文檔)。
這些pdf在文件流字段中被保存爲斑點。
隨着用戶刪除它們(從UI)我運行一個
DELETE
命令。我之後不會調用CEHCKPOINT,所以垃圾收集不會 運行。
通過考慮這一點,我意識到我沒有完全控制住事物。
所以我的問題很簡單:每次我刪除其中一個文件時,是否需要運行CHECKPOINT
?這樣做有什麼缺點嗎?
謝謝!
FILESTREAM數據存儲在一個文件夾中(通過sql server設計)。如果我將一個blob添加到我的應用程序中,我發現文件夾中的文件數量增加了3個值。如果我刪除該文件,我希望回到-3。 – LaBracca 2014-10-06 07:45:33
如果它是一箇中等活動的數據庫,它應該自動檢查點相當頻繁。除非你餓死磁盤空間(在這種情況下,而不是花時間思考這個問題,去獲得更多的磁盤空間),你應該相信系統最終會刪除不必要的文件。試圖強制它通常會導致較差的整體性能。 – 2014-10-06 12:24:29
@Damien_The_Unbeliever你的意思是無論如何垃圾收集器不時運行,即使不用CHECKPOINT手動調用?根據這個: – LaBracca 2014-10-07 12:31:23