2009-10-26 17 views
17

Udało mi się skonfigurować FILESTREAM na moim serwerze SQL 2008; jednak zauważyłem, że nawet gdy usunąłem wiersze zawierające dane FILESTREAM, fizyczny plik danych wydaje się nie zostać usunięty.Pliki FILESTREAM pozostały po usunięciu wiersza

Przez plik fizyczny mam na myśli plik w zarządzanym katalogu SQLServer z unikalnym identyfikatorem jako nazwą pliku, a nie oryginalnym plikiem dodanym do bazy danych.

Czy ktoś wie, czy SQLServer ostatecznie usunie plik? Jeśli z bazy danych zostanie usuniętych wiele dużych plików, to szybko spodziewam się, że będę w stanie odzyskać przestrzeń.

Dzięki,

Dale

Odpowiedz

20

FILESTREAM danych podlega kontroli transakcji i dlatego nie są usuwane natychmiast.

Zamiast tego SQL Server uruchamia moduł czyszczący, który usuwa stare dane, gdy jest pewien, że zostały ostatecznie usunięte.

Z documentation:

FILESTREAM garbage collection to zadanie w tle, który jest uruchamiany przez procesu kontrolnego bazy danych. Punkt kontrolny uruchamia się automatycznie po wygenerowaniu wystarczającej ilości dzienników transakcji. Więcej informacji można znaleźć w temacie " i aktywnej części dziennika" (SQL Server 2008) (http://msdn.microsoft.com/en-us/library/ms189573.aspx). Biorąc pod uwagę, że operacje na plikach są w minimalnym stopniu rejestrowane w dzienniku transakcji bazy danych, może upłynąć trochę czasu, zanim liczba wygenerowanych rekordów dziennika transakcji wyzwoli proces punktu kontrolnego i nastąpi usunięcie pamięci. Jeśli stanie się to problemem, możesz wymusić usuwanie pamięci za pomocą instrukcji CHECKPOINT.

2

DELETE FROM tbl_XXX DEKLARUJĄ @test PUNKT KONTROLNY @test = 0

Run to na serwerze sql i można zaobserwować coraz plik usunięty z systemu również złożyć ..

Można ustawić liczba minut lub sekund oczekiwania, aż śmieciarz wyczyści pliki z systemu plików po wykonaniu operacji usuwania.

Dzięki

haranath

+0

łatwiej: DELETE FROM tabela Checkpoint – DanDan

+1

@DanDan wiem, że to jest jak rok temu ale chcę ostrzec innych użytkowników o niebezpieczeństwie przypadkowego usunięcia wszystkich wierszy w tabeli, gdy polecenie "USUŃ Z tabeli CHECKPOINT" jest używany. Wypróbowałem to i usunęło wszystkie wiersze w moim stole. Na szczęście moja tabela zawiera tylko przykładowe dane. – corix010

13

użycie

sp_filestream_force_garbage_collection 

niestety tylko prace> = SQL Server 2012

+2

FYI - Dotyczy tylko SQL 2012 – NotMe

+0

Tak, dziękuję. Też tego potrzebuję. Jeden dobry powód, aby uaktualnić do 2012 roku! – LaBracca

+0

Próbowałem tego na moim lokalnym SQL Server 2012 Express i nie wydaje się działać. – corix010

Powiązane problemy