今天一原来的同事打电话说他们两个表加起来1.2t(每个表都有三四十个字段,6亿条记录),创建了索引之后空间增长到了2.2t,然后没有执行成功。问题在于虽然没执行成功,可是空间没有释放,整个系统只有2.2t的空间,现在是想数据备份出来也没法搞。于是就有了打电话给我这么一出。
个人本身不是做sql server为主,虽然早期也搞过一段时间,近期也有友情支持帮一些朋友优化些sql server的案例。言归正传,先查了下db的空间使用率,如下:
exec sp_spaceused
unallocated space 有 900g,大概查了下意思是Space in the database that has not been reserved for database objects.。个人理解就是autoextend了,但是还没有分配给具体对象的空间。
随后通过DBCC SHRINKDATABASE (dbname, 0);进行了空间回收,几分钟就完了,再次检查,900GB空间释放出来了。
问题已解决。
PS:对于现在的主流RDBMS来说,千万、亿条记录确实不是什么问题,合理的使用分区、索引、应用设计,通常能够满足业务的要求。