当前位置:  开发笔记 > 编程语言 > 正文

确定SQL Server数据库大小

如何解决《确定SQLServer数据库大小》经验,为你挑选了6个好方法。

SQL Server 2005/2008 Express版每个数据库的限制为4 GB.据我所知,数据库引擎仅考虑数据,因此不包括日志文件,未使用的空间和索引大小.

获取MDF文件的长度不应在SQL Server限制方面提供正确的数据库大小.我的问题是如何获得数据库大小?



1> Amy B..:

注释sp_spaceused


sp_spaceused考虑了日志文件的大小,因此如果你有一个非常小的数据库和一个非常大的日志文件,sp_spaceused的结果在尝试确定你与4GB限制的接近程度时会产生误导.
+1这是我迄今为止在SO上阅读的最佳答案.

2> 小智..:

的sp_helpdb

与sp_spaceused不同,不需要循环.


给出分配的DB大小(mdf文件的大小),而不是实际使用的大小.

3> devio..:

根据SQL2000帮助,sp_spaceused包括数据和索引.

这个脚本应该做:

CREATE TABLE #t (name SYSNAME, rows CHAR(11), reserved VARCHAR(18), 
data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18))

EXEC sp_msforeachtable 'INSERT INTO #t EXEC sp_spaceused ''?'''
-- SELECT * FROM #t ORDER BY name
-- SELECT name, CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3)) FROM #t ORDER BY name
SELECT SUM(CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3))) FROM #t
DROP TABLE #t



4> Ian Nelson..:

在SQL Management Studio中,右键单击数据库,然后从上下文菜单中选择"属性".看看"尺寸"图.



5> MAXE..:

最好的解决方案是使用sys.sysfiles视图计算每个数据库文件的大小,考虑每个页面的大小为8 KB,如下所示:

USE [myDatabase]
GO

SELECT
    [size] * 8
    , [filename]
FROM sysfiles

[field]列表示文件的大小,以页为单位(MSDN参考sysfiles).

您会看到至少会有两个文件(MDF和LDF):这些文件的总和将为您提供整个数据库的正确大小...


+1`SELECT SUM(size)/128.0 AS size FROM sysfiles`返回与`sp_spaceused`相同的值,但可能更容易自动分析.

6> 小智..:

我一直喜欢直接追求:

SELECT 
    DB_NAME( dbid ) AS DatabaseName, 
    CAST( ( SUM( size ) * 8 ) / ( 1024.0 * 1024.0 ) AS decimal( 10, 2 ) ) AS DbSizeGb 
FROM 
    sys.sysaltfiles 
GROUP BY 
    DB_NAME( dbid )


请注意,在SQL 2005 +中,基本用户帐户(即没有特殊权限的帐户)无法读取sysaltfiles.即使您在master..sysaltfiles或sys.sysaltfiles上将登录添加到master数据库和GRANT SELECT,此表上的select语句也将返回一个空记录集.使用系统管理员帐户没问题.
推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有