日期:2014-05-18 浏览次数:20769 次
CREATEe
------解决方案--------------------
关于 sp_spaceused ....
在SQL 2005里面(好像2000里面也是类似),数据库引擎不会随时对数据库的使用情况做更新,这是由于性能方面的考虑。
如果刚做了大量的数据操作,使用 sp_spaceused的结果是不准确的。
用 DBCC UPDATEUSAGE 可以更新为最准确的数据
实际上 sp_spaceused 有个参数可以指定使用 dbcc updateusage
sp_spaceused [[ @objname = ] 'objname' ] [,[ @updateusage = ] 'updateusage' ]
------解决方案--------------------
联机帮助上就有对于表空间大小的计算方法,居然没人去看。
------解决方案--------------------
蹭分
------解决方案--------------------
上面的代码完全是仿照sp_spaceused写的,主要是我需要知道每天每个数据库的增长情况,因为不想每天手工去纪录,所以写了个存储过程每天跑,因此里面反而写复杂了,不好意思!
Sql2005中有一个动态管理视图sys.dm_db_partition_stats
里面有个字段是reserved_page_count 表示总页数(数据页+索引页+空白页)
我们知道数据库中是以页为单位存储数据,1页是8K,那么 总页数*8 就是你表实际所占用的空间。
只要理解了这个就够了,没必要看懂我上面的代码,毕竟我写Sql语句的水平很有限,反而让人看的不之所云。
看看联机帮助上的 sys.dm_db_partition_stats 能更出错一点
上面代码的返回的结果集 第一个是表的总行数
reserved 就是LZ需要的表的实际大小,单位是KB
data 是数据页的大小
index_size 是索引页的大小
unused 是空白页的大小
------解决方案--------------------
Mark!
------解决方案--------------------
先單獨DBCC UPDATEUSAGE
然后用sp_spaceused 應該就是準確的了