问题描述
========
用户使用INSERT语句插入数据但是SQL Server报告说Primary Filegroup已满无法写入数据。用户检查了sp_spaceused发现还有unused空间
问题范围
========
协助检查这个问题并确保Insert语句可以执行完成。
故障排查
========
1.我们通过执行DBCC SHRINKDATABASE和DBCC SHRINKFILE均没有效果
2.经过确认,客户将该数据库设置了“最大文件上限”为2125MB,而当前数据库文件大小为2124MB,已经不能继续增长
3.通过使用sp_spaceused查询,发现还有reserved和unused的空间
提问:既然我有大量unused的空间,为什么不能插入数据?既然我有大量的unused的空间为什么不能收缩数据库?
答:首先我对于sp_spaceused返回的结果进行解释:
需要注意的是:请把sp_spaceused后面的参数改成表,这样才能解释该问题。如果参数是数据库,只是一个数字总和,不能说明问题。
Unallocated space – 这部分空间已经存在在数据库文件中,但是没有给任何表使用,属于公共空间,以后谁都可以使用它。
Reserved – 为该表分配的总空间大小,是后面三者的和(包括已经使用的和保留在该表中但还没有使用的)
Data – 该表中数据的实际空间大小
Index_size – 该表中索引使用的空间大小
Unused – 保留在该表中还没有使用的空间大小(请注意,这部分空间可以被该表使用,但是不能够被其他表使用)
虽然该表有大量的unused的空间,但是请注意,这部分空间能用用于对于这张表的数据插入,当其他表需要数据插入时,他不能够使用这块空