选择SQL Server数据库大小

Ade*_*SIF 139 sql sql-server sql-server-2008 sql-server-2008-r2

我如何查询我的SQL服务器只获取数据库的大小?

我用过这个:

use "MY_DB"
exec sp_spaceused
Run Code Online (Sandbox Code Playgroud)

我懂了 :

database_name   database_size   unallocated space
My_DB           17899.13 MB 5309.39 MB
Run Code Online (Sandbox Code Playgroud)

它返回了我不需要的几个列,也许有一个从这个存储过程中选择database_size列的技巧?

我也试过这段代码:

SELECT DB_NAME(database_id) AS DatabaseName,
       Name AS Logical_Name,
       Physical_Name,
       (size * 8) / 1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = 'MY_DB'
Run Code Online (Sandbox Code Playgroud)

它给了我这个结果:

DatabaseName    Logical_Name    Physical_Name                    SizeMB
MY_DB           MY_DB           D:\MSSQL\Data\MY_DB.mdf          10613
MY_DB           MY_DB_log       D:\MSSQL\Data\MY_DB.ldf          7286
Run Code Online (Sandbox Code Playgroud)

所以我写了这个:

SELECT SUM(SizeMB)
FROM (
    SELECT DB_NAME(database_id) AS DatabaseName,
           Name AS Logical_Name,
           Physical_Name,
           (size * 8) / 1024 SizeMB
    FROM sys.master_files
    WHERE DB_NAME(database_id) = 'MY_DB'
) AS TEMP
Run Code Online (Sandbox Code Playgroud)

我得到了:1183

所以它有效,但也许有一个正确的方法来获得这个?

Dev*_*art 197

试试这个 -

查询:

SELECT 
      database_name = DB_NAME(database_id)
    , log_size_mb = CAST(SUM(CASE WHEN type_desc = 'LOG' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
    , row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
    , total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2))
FROM sys.master_files WITH(NOWAIT)
WHERE database_id = DB_ID() -- for current db 
GROUP BY database_id
Run Code Online (Sandbox Code Playgroud)

输出:

-- my query
name           log_size_mb  row_size_mb   total_size_mb
-------------- ------------ ------------- -------------
xxxxxxxxxxx    512.00       302.81        814.81

-- sp_spaceused
database_name    database_size      unallocated space
---------------- ------------------ ------------------
xxxxxxxxxxx      814.81 MB          13.04 MB
Run Code Online (Sandbox Code Playgroud)

功能:

ALTER FUNCTION [dbo].[GetDBSize] 
(
    @db_name NVARCHAR(100)
)
RETURNS TABLE
AS
RETURN

  SELECT 
        database_name = DB_NAME(database_id)
      , log_size_mb = CAST(SUM(CASE WHEN type_desc = 'LOG' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
      , row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(8,2))
      , total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2))
  FROM sys.master_files WITH(NOWAIT)
  WHERE database_id = DB_ID(@db_name)
      OR @db_name IS NULL
  GROUP BY database_id
Run Code Online (Sandbox Code Playgroud)

更新2016/01/22:

显示有关大小,可用空间,上次数据库备份的信息

IF OBJECT_ID('tempdb.dbo.#space') IS NOT NULL
    DROP TABLE #space

CREATE TABLE #space (
      database_id INT PRIMARY KEY
    , data_used_size DECIMAL(18,2)
    , log_used_size DECIMAL(18,2)
)

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = STUFF((
    SELECT '
    USE [' + d.name + ']
    INSERT INTO #space (database_id, data_used_size, log_used_size)
    SELECT
          DB_ID()
        , SUM(CASE WHEN [type] = 0 THEN space_used END)
        , SUM(CASE WHEN [type] = 1 THEN space_used END)
    FROM (
        SELECT s.[type], space_used = SUM(FILEPROPERTY(s.name, ''SpaceUsed'') * 8. / 1024)
        FROM sys.database_files s
        GROUP BY s.[type]
    ) t;'
    FROM sys.databases d
    WHERE d.[state] = 0
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '')

EXEC sys.sp_executesql @SQL

SELECT
      d.database_id
    , d.name
    , d.state_desc
    , d.recovery_model_desc
    , t.total_size
    , t.data_size
    , s.data_used_size
    , t.log_size
    , s.log_used_size
    , bu.full_last_date
    , bu.full_size
    , bu.log_last_date
    , bu.log_size
FROM (
    SELECT
          database_id
        , log_size = CAST(SUM(CASE WHEN [type] = 1 THEN size END) * 8. / 1024 AS DECIMAL(18,2))
        , data_size = CAST(SUM(CASE WHEN [type] = 0 THEN size END) * 8. / 1024 AS DECIMAL(18,2))
        , total_size = CAST(SUM(size) * 8. / 1024 AS DECIMAL(18,2))
    FROM sys.master_files
    GROUP BY database_id
) t
JOIN sys.databases d ON d.database_id = t.database_id
LEFT JOIN #space s ON d.database_id = s.database_id
LEFT JOIN (
    SELECT
          database_name
        , full_last_date = MAX(CASE WHEN [type] = 'D' THEN backup_finish_date END)
        , full_size = MAX(CASE WHEN [type] = 'D' THEN backup_size END)
        , log_last_date = MAX(CASE WHEN [type] = 'L' THEN backup_finish_date END)
        , log_size = MAX(CASE WHEN [type] = 'L' THEN backup_size END)
    FROM (
        SELECT
              s.database_name
            , s.[type]
            , s.backup_finish_date
            , backup_size =
                        CAST(CASE WHEN s.backup_size = s.compressed_backup_size
                                    THEN s.backup_size
                                    ELSE s.compressed_backup_size
                        END / 1048576.0 AS DECIMAL(18,2))
            , RowNum = ROW_NUMBER() OVER (PARTITION BY s.database_name, s.[type] ORDER BY s.backup_finish_date DESC)
        FROM msdb.dbo.backupset s
        WHERE s.[type] IN ('D', 'L')
    ) f
    WHERE f.RowNum = 1
    GROUP BY f.database_name
) bu ON d.name = bu.database_name
ORDER BY t.total_size DESC
Run Code Online (Sandbox Code Playgroud)

输出:

database_id name                             state_desc   recovery_model_desc total_size   data_size   data_used_size  log_size    log_used_size  full_last_date          full_size    log_last_date           log_size
----------- -------------------------------- ------------ ------------------- ------------ ----------- --------------- ----------- -------------- ----------------------- ------------ ----------------------- ---------
24          StackOverflow                    ONLINE       SIMPLE              66339.88     65840.00    65102.06        499.88      5.05           NULL                    NULL         NULL                    NULL
11          AdventureWorks2012               ONLINE       SIMPLE              16404.13     15213.00    192.69          1191.13     15.55          2015-11-10 10:51:02.000 44.59        NULL                    NULL
10          locateme                         ONLINE       SIMPLE              1050.13      591.00      2.94            459.13      6.91           2015-11-06 15:08:34.000 17.25        NULL                    NULL
8           CL_Documents                     ONLINE       FULL                793.13       334.00      333.69          459.13      12.95          2015-11-06 15:08:31.000 309.22       2015-11-06 13:15:39.000 0.01
1           master                           ONLINE       SIMPLE              554.00       492.06      4.31            61.94       5.20           2015-11-06 15:08:12.000 0.65         NULL                    NULL
9           Refactoring                      ONLINE       SIMPLE              494.32       366.44      308.88          127.88      34.96          2016-01-05 18:59:10.000 37.53        NULL                    NULL
3           model                            ONLINE       SIMPLE              349.06       4.06        2.56            345.00      0.97           2015-11-06 15:08:12.000 0.45         NULL                    NULL
13          sql-format.com                   ONLINE       SIMPLE              216.81       181.38      149.00          35.44       3.06           2015-11-06 15:08:39.000 23.64        NULL                    NULL
23          users                            ONLINE       FULL                173.25       73.25       3.25            100.00      5.66           2015-11-23 13:15:45.000 0.72         NULL                    NULL
4           msdb                             ONLINE       SIMPLE              46.44        20.25       19.31           26.19       4.09           2015-11-06 15:08:12.000 2.96         NULL                    NULL
21          SSISDB                           ONLINE       FULL                45.06        40.00       4.06            5.06        4.84           2014-05-14 18:27:11.000 3.08         NULL                    NULL
27          tSQLt                            ONLINE       SIMPLE              9.00         5.00        3.06            4.00        0.75           NULL                    NULL         NULL                    NULL
2           tempdb                           ONLINE       SIMPLE              8.50         8.00        4.50            0.50        1.78           NULL                    NULL         NULL                    NULL
Run Code Online (Sandbox Code Playgroud)

  • 正在执行查询的用户必须至少具有**sysadmin**SQL Server角色,否则返回NULL. (6认同)
  • 我有一些VLDB导致DECIMAL(8,2)生成"算术溢出错误,将数字转换为数据类型数字." 将DECIMAL(8,2)更改为DECIMAL(12,2)是修复. (2认同)
  • 不错,在列名中包含单位也会很有用。 (2认同)

LCJ*_*LCJ 83

还将结果与以下查询的结果进行比较

EXEC sp_helpdb @dbname= 'MSDB'
Run Code Online (Sandbox Code Playgroud)

它产生类似于以下的结果

在此输入图像描述

有一篇好文章 - 确定SQL Server数据库和数据库文件的可用空间的不同方法


Anj*_*ant 45

完美的工作对我来说,计算SQL数据库的大小SQL Server 2012中

exec sp_spaceused
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这也适用于Azure SQL V12(可能是V10工作,但未经过测试).这应该是与较新版本的MS SQL Server一起使用的首选方法.+1 (3认同)

Dmi*_*y.M 8

这里已经有很多很好的答案,但值得一提的是使用标准报告通过 SQL Server Management Studio (SSMS) 获取 SQL Server 数据库大小的简单而快速的方法。

要运行报告,您需要:

  1. 右键单击数据库
  2. 转至报告 > 标准报告 > 磁盘使用情况。

它打印了一份不错的报告:

在此输入图像描述

其中“保留的总空间”是磁盘上数据库的总大小,它包括所有数据文件的大小和所有事务日志文件的大小。

在幕后,SSMS 使用dbo.sysfiles视图或sys.database_files视图(取决于 MSSQL 的版本)以及某种此类查询来获取总空间保留值:

SELECT sum((convert(dec (19, 2),  
convert(bigint,SIZE))) * 8192 / 1048576.0) db_size_mb
FROM dbo.sysfiles;
Run Code Online (Sandbox Code Playgroud)


Aru*_*zhi 7

检查 Azure 和本地 SQL Server 中的数据库大小 -

\n\n

方法 1 \xe2\x80\x93 使用 \xe2\x80\x98sys.database_files\xe2\x80\x99 系统视图

\n\n
SELECT\n    DB_NAME() AS [database_name],\n    CONCAT(CAST(SUM(\n        CAST( (size * 8.0/1024) AS DECIMAL(15,2) )\n    ) AS VARCHAR(20)),\' MB\') AS [database_size]\nFROM sys.database_files;\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n\n

方法 2 \xe2\x80\x93 使用 \xe2\x80\x98sp_spaceused\xe2\x80\x99 系统存储过程

\n\n
EXEC sp_spaceused ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

在此输入图像描述

\n