我目前有一个20GB大小的数据库。 我已经运行了几个脚本显示每个表的大小(和其他非常有用的信息,如索引的东西),最大的表是110万条记录,占用150MB的数据。我们有不到50个表,其中大部分占用不到1MB的数据。数据库大小不明
在查看每个表的大小后,我不明白为什么数据库在缩小后不应该是1GB大小。 SqlServer(2005)报告的可用空间量为0%。日志模式设置为简单。在这一点上,我主要关心的是,我觉得我有19GB的未使用空间。还有什么我应该看看?
通常情况下,我不会在意并且会让这个项目成为被动的研究项目,除非这种特殊的情况要求我们每周做一次备份和恢复,以便将一份副本放在卫星上(它没有互联网,所以它必须手动完成)。我宁愿每周复制1GB(或者即使下降到5GB!)也不如每周20GB的数据。
注释sp_spaceused报告如下:
Navigator-Production 19184.56 MB 3.02 MB
而且它的第二部分:
19640872 KB 19512112 KB 108184 KB 20576 KB
,而我已经发现了一些其他脚本(如从两个服务器数据库中的一个在这里大小的问题,他们都报告上面或下面发现的相同信息)。 我使用的脚本来自SqlTeam。下面是头信息:
* BigTables.sql
* Bill Graziano (SQLTeam.com)
* [email protected]<email removed>
* v1.11
顶部几个表显示此(表,列,保留空间,数据,索引,未使用的,等等):
Activity 1143639 131 MB 89 MB 41768 KB 1648 KB 46% 1%
EventAttendance 883261 90 MB 58 MB 32264 KB 328 KB 54% 0%
Person 113437 31 MB 15 MB 15752 KB 912 KB 103% 3%
HouseholdMember 113443 12 MB 6 MB 5224 KB 432 KB 82% 4%
PostalAddress 48870 8 MB 6 MB 2200 KB 280 KB 36% 3%
表的其余部分是任一大小相同或更小。不超过50张桌子。
更新1: - 所有表都使用唯一标识符。通常一个int每行增加1。
我也重新索引了所有内容。
我运行了dbcc shrink命令,并更新了之前和之后的使用情况。一遍又一遍。我发现一个有趣的事情是,当我重新启动服务器并确认没有人使用(并且没有维护过程正在运行,这是一个非常新的应用程序 - 不到一周),当我去运行缩小,每隔一段时间它会说一些关于数据改变的信息。谷歌搜索产生了太少有用的答案,显然不适用(这是凌晨1点,我断开了每个人,所以这似乎是不可能的,真的是这样)。数据通过C#代码进行迁移,该代码基本上查看了另一台服务器并引发了一些问题。在这个时候,删除的数量可能在50k以下。即使这些行是最大的行,我想也不会超过100M。
当我通过图形用户界面收缩时,它会报告0%可用于缩小,表明我已经将它缩小到可以使用的程度。
更新2:
注释sp_spaceused '活动' 产量的(这似乎是正确的金钱):
活动1143639 134488 KB 91072 KB 41768 KB 1648 KB
●填充因子为90
所有主键是整数。
这里是我用来 'UPDATEUSAGE' 命令:
DBCC UPDATEUSAGE(0);
更新3:
- 每Edosoft的请求: 图片111975 2407773 19262184 看来好像图像表认为它是19GB部。 我不明白这是什么意思。 是否真的 19GB还是被歪曲?
更新4:
- 谈话与一位同事和我发现,这是因为该网页,因为别人在这里还正式指出的潜力。映像表上唯一的索引是聚簇PK。这是我可以解决的问题吗?或者我只需要处理它? 常规脚本显示图像表大小为6MB。
更新5:
- 我想我只是将不得不经过进一步的研究来对付它。这些图像的大小已调整为大约2-5KB,而在普通文件系统上占用的空间不多,但在SqlServer上消耗的空间似乎更多。从长远来看,真正的答案可能会将该表分离到另一个分区或类似的东西。
你如何做数据库真空? – 2008-12-11 12:01:13
我认为这是一个特定的pgsql,但我可能是错的。 – Kev 2008-12-11 14:04:54