У меня есть база данных Sql server 2008, содержащая много изображений. Теоретически они должны занимать большую часть места в базе данных.
Я переместил изображения в поля Filestrem, но размер mdf совсем не уменьшился. Как такое возможно? Как я могу проверить, что занимает все это пространство внутри файла mdf? Я попытался сжать файл mdf, оставив немного свободного места для роста, но это не помогло. Я пытаюсь сохранить размер достаточно низким, чтобы иметь возможность хранить файл mdf на более быстром жестком диске C.
Я также ожидал, что папка Filestream займет немного больше места, чем сейчас.
Размер до реализации Filestream:
mdf -> 40Gb or less
ldf -> raughly 90Gb
Текущий размер:
mdf -> 39Gb
ldf -> 119Gb
Filestream folder -> 7.8Gb
Я переместил изображения в поля Filestrem, но размер mdf совсем не уменьшился. Как такое возможно?
Поскольку сжатие файлов не происходит волшебным образом. Это происходит, когда вы говорите серверу sql попытаться удалить его. Также существует проблема, что данные блога медленно отбрасываются - с довольно низкой скоростью. Для больших данных может потребоваться некоторое время.
Я пытаюсь сохранить размер достаточно низким, чтобы иметь возможность хранить файл mdf на более быстром жестком диске C.
Это заставляет меня съеживаться, если C не SSD;)
Я также ожидал, что папка Filestream займет немного больше места, чем сейчас.
Зачем?
Или: создайте отчет и узнайте, что, черт возьми, занимает место. Может вы что-то упустили? Если вы ожидаете, что данных будет намного больше, чем сейчас имеется в файловом потоке, возможно, вы не переместили все данные? Я бы запустил отчет, чтобы узнать, что можно использовать в пространстве - они доступны как стандартный отчет в Management Studio.
У меня нет опыта работы с файловым потоком, и я использую SQL 2005, но я могу щелкнуть правой кнопкой мыши базу данных в MSSMS, перейти в Отчеты> Стандартные отчеты> Использование диска и получить красивую небольшую круговую диаграмму по пространству, используемому в mdf. Вы также можете запустить этот запрос, чтобы выяснить, какие таблицы в базе данных содержат больше всего строк (не обязательно занимая больше всего места, но может помочь вам - от http://blog.sqlauthority.com/2009/01/13/sql-server-find-row-count-in-table-find-largest-table-in-database-t-sql/).
SELECT OBJECT_NAME(OBJECT_ID) TableName, st.row_count
FROM sys.dm_db_partition_stats st
WHERE index_id < 2
ORDER BY st.row_count DESC
GO
И, наконец, я никогда этого не делал, я считаю, что вы можете создать несколько файлов mdf и разделить данные между ними, сохраняя данные, к которым вы хотите быстро получить доступ, на более быстром диске. http://blog.sqlauthority.com/2008/01/25/sql-server-2005-database-table-partitioning-tutorial-how-to-horizontal-partition-database-table/