2014-10-06 1 views
1

Я использую FILESTREAM для хранения BLOBS в моем клиентском серверном приложении.Как эффективно использовать CHECKPOINT в приложении, использующем FILESTREAM

В прошлом я был время от времени, чтобы очистить все BLOBS, выполнив команду типа:

UPDATE BLOBTABLE set BLOBFIELD = NULL 

Это очищает пятна, я сделал это, чтобы сделать резервную копию БД меньше.

Но сделать сгустки «исчезают с диска» я тогда нужно запустить

CHECKPOINT 

Примечание: это было сделано в качестве DBA деятельности, а не как часть программного обеспечения.

Теперь я понимаю, что в своем приложении я никогда не звоню CHECKPOINT.

Может быть, я должен каждый раз, когда я удаляю blob, должен ли я?

Просто experss мой сам лучше я сделать пример моего реального случая:

Мое приложение позволяет хранить файлы (например, документы в формате PDF).

эти pdf сохраняются как капли в поле фильтра.

Поскольку пользователь удаляет их (из ui), я запускаю команду DELETE.

Я не называю CEHCKPOINT после этого, поэтому сбор мусора не пробег.

Рассматривая это, я понимаю, что у меня нет полной вещи под контролем.

Так что мой вопрос просто: мне нужно запускать CHECKPOINT каждый раз, когда я удаляю один из этих файлов? есть ли недостаток в этом?

Спасибо!

+0

Данные FILESTREAM хранятся в папке (по конструкции сервера sql). Если я добавлю blob в свое приложение, я вижу, что количество файлов в папке увеличивается на 3. Если я удалю файл, я ожидаю вернуться к -3. – LaBracca

+1

Если это умеренно активная база данных, в любом случае она должна быть автоматически проверена. И если вы не голодали на дисковое пространство (в этом случае, вместо того, чтобы тратить время на размышления об этом, идите и получите больше места на диске), вы должны просто доверять системе, чтобы в конечном итоге удалить ненужные файлы. Попытка заставить его, как правило, приводит к снижению общей производительности. –

+0

@Damien_The_Unbeliever вы имеете в виду, что сборщик мусора в любом случае работает время от времени, даже если он не вызывается вручную с помощью CHECKPOINT? – LaBracca

ответ

1

База данных выполняет контрольно-пропускные пункты в разные моменты времени, одна из которых - когда выполняется резервное копирование.

Поскольку контрольная точка запускает сборку мусора, она не нужна (исключения могут быть огромными или сложными сценариями) для вызова CHECKPOINT в приложении, поскольку риск заключается в снижении производительности.

Лучше принять решение о необходимости использования CHECKPOINT в качестве обслуживания, но если учесть, что резервная копия базы данных (или даже остановка службы sql) имеет контрольную точку как следствие.

Смежные вопросы