sp_spaceused - 如何测量 SQL 中所有表的大小(以 GB 为单位)

2024-04-10

继讨论之后如何在 SQL 中测量表中的表大小(以 GB 为单位) https://stackoverflow.com/questions/7071473/,我正在寻找一种解决方案来使用存储过程单独测量 SQL Server 的所有表所使用的空间sp_spaceused.


以下基本查询有效。它得到的输出与sp_spaceused,使用相同的算法,但是much更有效率。请不要使用CURSOR + sp_spaceused方法;绝对没有理由这样做。以及使用时的潜在问题sp_spaceused它的目的是作为一个报告过程,因此输出都是文本,而不是实际的数字,并且将其解析回数字可能容易出错。

最好也不要使用sys.tables or sp_msforeachtable因为它们都排除索引视图。

以下与 sp_spaceused 方面完全相同:

  • 包括XML索引、全文索引、索引视图等。
  • 分解所使用的数据与索引空间的信息

如果您需要它适用于所有数据库,它也可以轻松适应。

如果您需要分解这些数据每个索引,我改编了以下查询来回答 DBA.StackExchange 上的这个问题:sys.allocation_units 和 sp_spaceused 的空间使用情况 https://dba.stackexchange.com/a/84352/30859

;WITH extra AS
(   -- Get info for FullText indexes, XML Indexes, etc
    SELECT  sit.[object_id],
            sit.[parent_id],
            ps.[index_id],
            SUM(ps.reserved_page_count) AS [reserved_page_count],
            SUM(ps.used_page_count) AS [used_page_count]
    FROM    sys.dm_db_partition_stats ps
    INNER JOIN  sys.internal_tables sit
            ON  sit.[object_id] = ps.[object_id]
    WHERE   sit.internal_type IN
               (202, 204, 207, 211, 212, 213, 214, 215, 216, 221, 222, 236)
    GROUP BY    sit.[object_id],
                sit.[parent_id],
                ps.[index_id]
), agg AS
(   -- Get info for Tables, Indexed Views, etc (including "extra")
    SELECT  ps.[object_id] AS [ObjectID],
            ps.index_id AS [IndexID],
            SUM(ps.in_row_data_page_count) AS [InRowDataPageCount],
            SUM(ps.used_page_count) AS [UsedPageCount],
            SUM(ps.reserved_page_count) AS [ReservedPageCount],
            SUM(ps.row_count) AS [RowCount],
            SUM(ps.lob_used_page_count + ps.row_overflow_used_page_count)
                    AS [LobAndRowOverflowUsedPageCount]
    FROM    sys.dm_db_partition_stats ps
    GROUP BY    ps.[object_id],
                ps.[index_id]
    UNION ALL
    SELECT  ex.[parent_id] AS [ObjectID],
            ex.[object_id] AS [IndexID],
            0 AS [InRowDataPageCount],
            SUM(ex.used_page_count) AS [UsedPageCount],
            SUM(ex.reserved_page_count) AS [ReservedPageCount],
            0 AS [RowCount],
            0 AS [LobAndRowOverflowUsedPageCount]
    FROM    extra ex
    GROUP BY    ex.[parent_id],
                ex.[object_id]
), spaceused AS
(
SELECT  agg.[ObjectID],
        OBJECT_SCHEMA_NAME(agg.[ObjectID]) AS [SchemaName],
        OBJECT_NAME(agg.[ObjectID]) AS [TableName],
        SUM(CASE
                WHEN (agg.IndexID < 2) THEN agg.[RowCount]
                ELSE 0
            END) AS [Rows],
        SUM(agg.ReservedPageCount) * 8 AS [ReservedKB],
        SUM(agg.LobAndRowOverflowUsedPageCount +
            CASE
                WHEN (agg.IndexID < 2) THEN (agg.InRowDataPageCount)
                ELSE 0
            END) * 8 AS [DataKB],
        SUM(agg.UsedPageCount - agg.LobAndRowOverflowUsedPageCount -
            CASE
                WHEN (agg.IndexID < 2) THEN agg.InRowDataPageCount
                ELSE 0
            END) * 8 AS [IndexKB],
        SUM(agg.ReservedPageCount - agg.UsedPageCount) * 8 AS [UnusedKB],
        SUM(agg.UsedPageCount) * 8 AS [UsedKB]
FROM    agg
GROUP BY    agg.[ObjectID],
            OBJECT_SCHEMA_NAME(agg.[ObjectID]),
            OBJECT_NAME(agg.[ObjectID])
)
SELECT sp.SchemaName,
       sp.TableName,
       sp.[Rows],
       sp.ReservedKB,
       (sp.ReservedKB / 1024.0 / 1024.0) AS [ReservedGB],
       sp.DataKB,
       (sp.DataKB / 1024.0 / 1024.0) AS [DataGB],
       sp.IndexKB,
       (sp.IndexKB / 1024.0 / 1024.0) AS [IndexGB],
       sp.UsedKB AS [UsedKB],
       (sp.UsedKB / 1024.0 / 1024.0) AS [UsedGB],
       sp.UnusedKB,
       (sp.UnusedKB / 1024.0 / 1024.0) AS [UnusedGB],
       so.[type_desc] AS [ObjectType],
       so.[schema_id] AS [SchemaID],
       sp.ObjectID
FROM   spaceused sp
INNER JOIN sys.all_objects so
        ON so.[object_id] = sp.ObjectID
WHERE so.is_ms_shipped = 0
--AND so.[name] LIKE N''  -- optional name filter
--ORDER BY ??
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sp_spaceused - 如何测量 SQL 中所有表的大小(以 GB 为单位) 的相关文章

随机推荐

  • Facebook Messenger 平台/机器人欢迎配置出现奇怪错误

    我在为 Messenger 机器人配置欢迎消息时遇到奇怪的错误 我一直在使用相同的代码 如下所示 直到昨晚它一直工作正常 我尝试了 cURL 和Postman https www getpostman com 它们都不起作用 curl X
  • 适用于 Android 的 USB 主机

    I am trying to communicate with my freeduino board which is similar to arduino uno via usb through android device nexus
  • 在Java中检查服务器上的路径是否存在[重复]

    这个问题在这里已经有答案了 我正在创建一个 Java 程序 在其中将文件上传到特定路径上的服务器 我在用jSch for sftp 因此 在上传文件之前 我想检查服务器上是否存在给定的目录 if path exists upload fil
  • 使用 AVAudioEngine 将 AVAudioInputNode 连接到 AVAudioUnitEffect

    我想处理来自设备内置麦克风的音频 AVAudioInputNode 带有音频单元效果 AVAudioUnitEffect 对于我的例子 我正在使用AVAudioUnitReverb 连接中AVAudioUnitReverb导致应用程序崩溃
  • Swift 3:从 UIBezierPath 创建 UIImage

    我有一个UIBezierPath 我最终需要一个UIImageView从中 现在我正在尝试首先创建一个UIImage 然后是一个UIImageView从那 我正在快速工作 并且我已经研究过类似的问题 并且答案要么不起作用 要么产生形状而不是
  • ASP.NET MVC 1 向前兼容 ASP.NET MVC 2 吗?

    我可以使用 MVC 2 程序集顺利运行 MVC 1 应用程序吗 我知道一些 3rd 方工具在 MVC 2 中出现了问题 但我们假设我没有使用这些其他工具 曾经有过重大变化 http go microsoft com fwlink LinkI
  • Pandas:将 Lambda 应用于多个数据帧

    我试图弄清楚如何同时将 lambda 函数应用于多个数据帧 而不需要先将数据帧合并在一起 我正在处理大型数据集 gt 60MM 记录 并且需要格外小心内存管理 我希望有一种方法可以将 lambda 应用于底层数据帧 这样我就可以避免首先将它
  • SSIS Excel 目标空白

    我正在调试一个 SSIS 包 该包从 SQL Server 数据开始 对其进行转换 然后将其放入 Excel 文件中 我在工作中经常这样做 以前从未遇到过这个问题 Excel 文件中没有写入任何行 我将数据查看器附加到通向 Excel 目标
  • Android:如何以编程方式连接/断开 OTG

    我想在我的 Android 设备中以编程方式连接和断开 USB OTG 笔式驱动器 硬盘驱动器等 对于USB 我使用以下路径在连接到PC时绑定 取消绑定USB sys bus usb drivers usb bind or unbind 我
  • Python:读取文件时如何忽略#comment行

    在Python中 我刚刚从文本文件中读取了一行 我想知道如何编写代码来忽略行开头带有哈希 的注释 我认为应该是这样的 for if line contain then process line else end for loop 但我是Py
  • JavaScript 对象如何引用其自身的值? [复制]

    这个问题在这里已经有答案了 假设我有以下 JavaScript var obj key1 it key2 key1 works alert obj key2 此错误显示 key1 未定义 我努力了 this key1 this key1 o
  • 单个部分的垂直滚动

    我必须制作一个具有垂直滚动过渡效果的部分 请观看此处的视频以供参考 https drive google com file d 1Fy4BDqc0 LDrPnEVYuQZdiJ0Pk9qDXA5 view usp sharing https
  • 将自定义对象传递给 Web 服务

    我正在使用 C 并且有 Windows 窗体和 Web 服务 我有一个自定义对象 我想将其发送到网络服务 有时 该对象可能包含大量数据 作为最佳性能 将自定义对象发送到 Web 服务的最佳方式是什么 Web 服务旨在处理自定义对象 只要它们
  • 使用 cython 加速数千个集合操作

    我一直在努力克服对 Cython 的恐惧 恐惧是因为我对 c 或 c 一无所知 我有一个函数需要 2 个参数 一个集合 我们称之为testSet 和一个集合列表 我们称之为targetSets 然后该函数会迭代targetSets 并计算与
  • 如何保护 Google Kubernetes Engine (GKE) 中的只读端口 10255?

    我创建了一个 GKE 私有集群 版本 1 13 6 gke 13 使用以下命令 gcloud container clusters create a cluster with user pass network vpc name subne
  • 实现编译时机制检查字符串的唯一性

    定义我的问题的最简单方法是我正在尝试实现一种机制来检查是否已使用相同的字符串 或一对 数字 字符串 我希望使用 C 预处理器以智能方式实现此机制 我还希望这种机制在调试模式下出现冲突或运行时错误时 通过检查断言 给我编译错误 我们不希望开发
  • IIS 替换部分 url

    我正在尝试使用 iis 中的 url 重写将 url 中的 se 替换为 sv 网址如下所示 www somedomain com se baadmarked 巴德 并且应该看起来像这样 www somedomain com sv baad
  • 网络安全字体粗细——如何变细?

    当我在 Photoshop 中设计时 我的字体又薄又清晰 但当我在 CSS 中声明字体时 即使使用 font weight lighter 字体总是显得更粗 也许这就是浏览器渲染字体的方式 在 IE 中字体保持细长 但我想知道是否有任何技巧
  • 以编程方式检索 OS X 磁盘分区 UUID

    我有一个分区的路径 如何在不使用终端命令的情况下以编程方式检索该分区的 UUID 举个例子会更有帮助 diskutil info grep UUID 从 C 运行它作为读者的练习 如果您想要根目录以外的分区 您可以指定挂载点或设备名称 例如
  • sp_spaceused - 如何测量 SQL 中所有表的大小(以 GB 为单位)

    继讨论之后如何在 SQL 中测量表中的表大小 以 GB 为单位 https stackoverflow com questions 7071473 我正在寻找一种解决方案来使用存储过程单独测量 SQL Server 的所有表所使用的空间sp