Partager via


Как поймать чекпойнт?

Hачну издалека. Счастливые обладатели SQL Server 2008 знают про атрибут filestream. Oн позволяет хранить varbinary(max) в файловой системе. Не в смысле файла БД, а когда под каждую такую ячейку заводится файл на диске. Проще стриминговый доступ плюс снимается ограничение на размер блоба в 2 гига. Многие до этого так и делали: контент хранили в файле, а в таблицу выносили атрибуты документа плюс линк на файл. В случае filestream оные файлы перестают быть посторонними по отношению к SQL Server. Они становится ему близкими и родными. SQL Server начинает их холить, лелеять, поддерживать над ними транзакционность, бэкап, полнотекст, репликацию, лог шиппинг, кластеризацию и все дела. Помните красивые слова WinFS, SQL Server File System и все такое? Filestream - это осколок Атлантиды. Но сейчас речь не об этом. В документации недостаточно явно отражен момент, что при операциях DELETE и непрямого UPDATE в файловой системе создается новый файл, между тем как файл со старым значением остается. Рано или поздно (чем больше гиг киношки, тем раньше), народ начинает искать, куда делось место на диске, находит и озабачивается вопросом, как бы старые версии того? Прибрать. Старые версии прибираются по чекпойнту. Скорее всего, по той же причине, почему на диск не скидываются по отдельности грязные записи после каждого изменения. Быстрее получается накопить их до кучи и записать разом, чем отвлекаться на каждую отдельно. Встала задача наглядно и красиво продемонстрировать данное поведение во время семинара. Вот смотрите - в базе наступает чекпойнт и старые файлы при этом автоматически удаляются. Кто подскажет, как отловить чекпойнт?

Comments

  • Anonymous
    January 01, 2003
    Не совсем то я имел в виду. Явный чекпойнт сделать не проблема. Помимо принудительного вызова существует масса случаев, в которых наступает чекпойнт, о которых написано по второй из приведенных Вами ссылок. Забыли про filestream. Вопрос стоит, как узнать, что произошел неявный чекпойнт? Где это посмотреть: в логе, профайлере, журнале аудита, ... ?

  • Anonymous
    December 03, 2009
    можно попробовать оттолкнуться вот от такого варианта http://www.sqlskills.com/BLOGS/PAUL/post/FILESTREAM-garbage-collection.aspx или явно http://msdn.microsoft.com/ru-ru/library/ms188748.aspx

  • Anonymous
    December 03, 2009
    а если попытаться зацепиться за "Checkpoint pages/sec"? http://msdn.microsoft.com/ru-ru/library/ms189628.aspx

  • Anonymous
    December 03, 2009
    Можно использовать флаг трассировки 3502. При включении в лог SQL Server регистрируется начало и окончание процесса checkpoint