日期:2014-05-18  浏览次数:20769 次

求SQL语句:求数据库内各表大小,并排序列出.
如题.
我之前模仿[sp_spaceused]写过一段,但用了一段时间后觉得不准确,请前辈们帮帮忙.



------解决方案--------------------
需要占用空间还是记录数?

占用空间与表所建立的索引有关,比较复杂

------解决方案--------------------
数据占用不是库的全部阿,你要是想计算全部的,还要加上其它的占用空间的咚咚
比如说过程,job,索引等等
------解决方案--------------------
记号...
sp_spaceused 这个准确不?
------解决方案--------------------
貌似LZ在学校Sql2005

我用Sql2005仿照 sp_spaceused 写了一个类似的功能,LZ看看给点意见啊

SQL code
CREATEe

------解决方案--------------------
关于 sp_spaceused ....
在SQL 2005里面(好像2000里面也是类似),数据库引擎不会随时对数据库的使用情况做更新,这是由于性能方面的考虑。
如果刚做了大量的数据操作,使用 sp_spaceused的结果是不准确的。

用 DBCC UPDATEUSAGE 可以更新为最准确的数据

实际上 sp_spaceused 有个参数可以指定使用 dbcc updateusage

SQL code

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 應該就是準確的了