我在 SQL Server 2008 上运行的数据库现在空间不足,错误如“由于文件组 'PRIMARY' 中的磁盘空间不足,无法为数据库 'database' 分配新页面。通过删除对象中的对象来创建必要的空间文件组,向文件组添加其他文件,或为文件组中的现有文件设置自动增长。” 是常见的。
如果我查询 FILEPROPERTY('SPACEUSED') 以获取主文件组上唯一的文件,我得到的空间不到 10MB,仅剩下 0.1% 的可用空间。所以,系统有理由抱怨。
我通过在 SSMS 上右键单击数据库来调查表占用的空间,运行一些有关磁盘使用情况的报告,并检测到有一个表占用了大量空间。我不明白为什么在 TRUNCATE 表之后, FILEPROPERTY('SPACEUSED') 返回完全相同(非常小)的数量。除非我弄错了,TRUNCATE 的工作原理是在引擎盖下,删除并重新创建表
但是,有关磁盘使用情况的标准报告表明该表不再占用大量空间。我预计免费空间会增加,而丑陋的“无法分配新页面...”消息会消失,但事实并非如此。
我在这里缺少什么?
我假设有问题的表是一个堆。您可以重建表以回收空间,或创建聚集索引。
ALTER TABLE dbo.table_name REBUILD;
Run Code Online (Sandbox Code Playgroud)
和/或
CREATE CLUSTERED INDEX cix ON dbo.table_name(column_name);
Run Code Online (Sandbox Code Playgroud)
您也可以删除表并重新创建它。
| 归档时间: |
|
| 查看次数: |
2877 次 |
| 最近记录: |