Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 GC и очистка filestream  [new]
Spinifex
Member

Откуда:
Сообщений: 55
Коллеги,
Имеется SQL Server 2008 R2 в котором пухнут файлстримы и не чистятся.
Пытался форсировать этот процесс через команду CHECKPOINT. Ноль реакции. У клиента также была какая-то мутная утилита для создания бэкапов поверх файловой системы. Мы ее удалили, все равно не чистится. Как можно понять что держит файлы на диски и почему не срабатывает сборщик мусора?
27 фев 17, 08:59    [20245793]     Ответить | Цитировать Сообщить модератору
 Re: GC и очистка filestream  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 594
Spinifex,
Если кратко - команду CHECKPOINT нужно вызывать дважды.
Процесс удаления filestream файлов завист от много - от модели восстановления. Посмотрите детальные ответы по работе механизма очистки на SO и в блогах MS. Нужно разбираться с ситуацией, простого рецепта здесь нет.
Да, удалять filestream файлы самостоятельно - очень плохая идея.
27 фев 17, 10:00    [20246048]     Ответить | Цитировать Сообщить модератору
 Re: GC и очистка filestream  [new]
Spinifex
Member

Откуда:
Сообщений: 55
Ferdipux,

Спасибо, я посмотрю. Понимаю, что самостоятельно удалять это не айс. Но заказчик жалуется, что у него кончается место на диске. Т.е. он получает ошибки, а место занято какой-то ерундой которая не нужна и не чистится. Более того заказчик полез туда руками файлы удалять. :)
27 фев 17, 10:04    [20246076]     Ответить | Цитировать Сообщить модератору
 Re: GC и очистка filestream  [new]
Spinifex
Member

Откуда:
Сообщений: 55
Spinifex,
Кстати еще вопрос. Насколько я читал GC может останавливать 1. Если другое приложение открыло файл (удаление происходит на CloseHandle). 2. Для recovery model: simple (как раз наш случай), если удаление произошло в транзакции которая находится в активном VLF, то физически с диска он также не удаляется.
Отсюда вопрос как закрыть все текущие VLF, учитывая что никаких важных транзакций на сервере в текущий момент нет. А если и есть, то их можно спокойно грохнуть не опасаясь потери результата.
27 фев 17, 10:23    [20246167]     Ответить | Цитировать Сообщить модератору
 Re: GC и очистка filestream  [new]
Ferdipux
Member

Откуда: Москва
Сообщений: 594
Spinifex
Ferdipux,

Понимаю, что самостоятельно удалять это не айс. Но заказчик жалуется, что у него кончается место на диске. Т.е. он получает ошибки, а место занято какой-то ерундой которая не нужна и не чистится. Более того заказчик полез туда руками файлы удалять. :)

С filestream на SQL 2008 есть следующие ограничения:
  • Штатный GC механизм, если все в порядке и т.п. - чистит со скоростью 2 файла в секунду (некое обсуждение). Если у зак. накопилось много файлов и они давно не чистились - это может быть проблемой.
  • Разбирательства с filestream и VLF могут быть долгими, в подобной ситуации делали бекапы транзакций как описано здесь или случай с AlwaysOn.
  • Еще полезно посмотреть значение log_reuse_wait_desc из sys.databases для этой БД.
  • Для заказчика - проблем после ручного удаления файлов он получит во много раз больше, чем при недостатке места. Если место -- это проблема - решает ее экстренно - переносит с диска ненужные данные, мигририрует другие БД, прирезает место.
  • 27 фев 17, 12:09    [20246719]     Ответить | Цитировать Сообщить модератору
     Re: GC и очистка filestream  [new]
    Spinifex
    Member

    Откуда:
    Сообщений: 55
    Ferdipux,

    Коллеги, в итоге ничего не срабатывало. После обновления до 2012 Sql Server и вызова появившейся в нем ХП для форсирования GC все сработало без проблем, так что имейте в виду.
    27 фев 17, 13:34    [20247077]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить