Sql server 2008 数据库的 mdf 文件比预期的大

Sql server 2008 数据库的 mdf 文件比预期的大

我有一个 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

答案1

我将图像移至 Filestrem 字段,但 mdf 的大小并没有减少多少。这是怎么回事?

因为文件缩小并不是奇迹。当您告诉 SQL Server 尝试缩小文件时,它就会发生。还有一点是,博客数据被缓慢丢弃 - 丢弃率相当低。对于大数据,可能需要一段时间。

我试图将尺寸保持在足够小的范围内,以便能够将 mdf 文件保存在更快的 C 硬盘中。

只要 C 不是 SSD,这就让我感到畏缩;)

我还预计 Filestream 文件夹将比现在占用更多的空间。

为什么?

或者:生成一份报告,找出到底是什么占用了空间。也许你忽略了什么?如果你预计的数据比文件流现在拥有的数据多得多,也许你没有移动所有数据?我会运行一份报告来查看空间的用途 - 它们在管理工作室中作为标准报告提供。

答案2

我没有使用文件流的经验,我使用的是 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-horizo​​ntal-partition-database-table/

相关内容