[笔记] 查询表记录空间占用情况SQL脚本

USE ExpressDB

CREATE TABLE #tablespaceinfo
    (
      nameinfo VARCHAR(50) ,
      rowsinfo BIGINT ,
      reserved VARCHAR(20) ,
      datainfo VARCHAR(20) ,
      index_size VARCHAR(20) ,
      unused VARCHAR(20)
    )  

--创建游标

DECLARE Info_cursor CURSOR
FOR
    SELECT  ‘[‘ + [name] + ‘]‘
    FROM    sys.tables
    WHERE   type = ‘U‘;  

OPEN Info_cursor  

DECLARE @tablename VARCHAR(255);
FETCH NEXT FROM Info_cursor INTO @tablename  

WHILE @@FETCH_STATUS = 0
    BEGIN
        INSERT  INTO #tablespaceinfo
                EXEC sp_spaceused @tablename
        FETCH NEXT FROM Info_cursor
    INTO @tablename
    END 

CLOSE Info_cursor
DEALLOCATE Info_cursor  

 --创建临时表
CREATE TABLE [#tmptb]
    (
      TableName VARCHAR(50) ,
      DataInfo BIGINT , -- 以数据页大小为单位计算,即使表只有一条记录,也会占用一个数据页(8KB)
      RowsInfo BIGINT ,
      SpacePerRow  AS ( CASE RowsInfo
                         WHEN 0 THEN 0
                         --ELSE DataInfo / RowsInfo -- 数据页大小的信息除以记录数。
                         ELSE CAST(DataInfo AS decimal(8,2))/CAST(RowsInfo AS decimal(8,2))
                       END ) PERSISTED
    )

--插入数据到临时表
INSERT  INTO [#tmptb]
        ( [TableName] ,
          [DataInfo] ,
          [RowsInfo]
        )
        SELECT  [nameinfo] ,
                CAST(REPLACE([datainfo], ‘KB‘, ‘‘) AS BIGINT) AS ‘datainfo‘ ,
                [rowsinfo]
        FROM    #tablespaceinfo
        ORDER BY CAST(REPLACE(reserved, ‘KB‘, ‘‘) AS INT) DESC  

--汇总记录
SELECT  [tbspinfo].* ,
        [tmptb].[SpacePerRow] AS ‘每行记录大概占用空间(KB)‘
FROM    [#tablespaceinfo] AS tbspinfo ,
        [#tmptb] AS tmptb
WHERE   [tbspinfo].[nameinfo] = [tmptb].[TableName]
ORDER BY CAST(REPLACE([tbspinfo].[reserved], ‘KB‘, ‘‘) AS INT) DESC  

DROP TABLE [#tablespaceinfo]
DROP TABLE [#tmptb]

当表的记录数少的时候,统计出来的每行记录占用空间是不准确的。

SELECT AVG(DATALENGTH(C0))+AVG(DATALENGTH(C1))+AVG(DATALENGTH(C2))+AVG(DATALENGTH(C3)) FROM [dbo].[TableName]
用统计字段大小方法计算结果较准确,但费时。

[笔记] 查询表记录空间占用情况SQL脚本

时间: 2024-10-08 01:46:33

[笔记] 查询表记录空间占用情况SQL脚本的相关文章

Linux:查看磁盘空间占用情况

Linux:查看磁盘空间占用情况 工作中有时被分配的测试机空间不大,经常遇到磁盘空间占满的情况.排查过程如下: 一.首先使用df -h 命令查看磁盘剩余空间,通过以下图看出/目录下的磁盘空间已经被占满. 二.进入根目录,因为最近常用的目录就是usr目录,所以用du -bs命令看一下常用的usr目录大小,由下图可见/usr目录占据了11g. 三.进入usr目录用find 命令找到大文件 然后把日志,压缩包什么的都清空: 原文地址:https://www.cnblogs.com/lizm166/p/

查看SqlServer某张表的物理空间占用情况

以下语句可以查看表的物理空间使用情况 包括 [ROWS] 内容的行数.. [reserved] 保留的磁盘大小.. [data] 数据占用的磁盘大小.. [index_size] 索引占用的磁盘大小.. [unused] 未使用的磁盘大小 exec sp_spaceused 'TSUM_MemberAttribute' 返回结果如下 参考使用..

df命令--检查linux服务器的文件系统的磁盘空间占用情况

以更易读的方式显示目前磁盘空间和使用情况 语法: df [选项]... [FILE]... 文件-a, --all 包含所有的具有 0 Blocks 的文件系统 文件--block-size={SIZE} 使用 {SIZE} 大小的 Blocks 文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...) 文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024 文件-i, --inodes 列出 inode 资讯,不列出已使用 blo

[转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的区别

传统的SQL脚本查看表空间使用率,使用的关键视DBA_DATA_FILE和DBA_FREE_SPACE.Oracle 11g引入了DBA_TABLESPACE_USAGE_METRICS视图.事实上,Oracle 10g中就已经引入了该视图,可以使用,但在10g官方文档中查不到,11g官方文档对该视图作了说明. Oracle 11g 官方文档中对DBA_TABLESPACE_USAGE_METRICS视图的说明: DBA_TABLESPACE_USAGE_METRICS describes ta

swap分区占用情况脚本

#在网上搜了个swap分区占用情况的脚本,用了感觉蛮好,特别留下来了,注释并优化之echo '----------------------# '`date "+%Y%m%d %H%M"`' #----------------------------' for i in `ls -d /proc/* | grep -E '/[0-9]+$'` #显示所有proc下的文件,并匹配该目录下所有以数字开头和结尾的文件 do pid=${i##/proc/} #匹配i变量的值,并删掉/proc/

SYSAUX表空间占用过大情况下的处理(AWR信息过多)

真题1.  SYSTEM和SYSAUX表空间存储的内容有哪些区别?若SYSAUX表空间占用过大则应该如何处理? 答案:在一般情况下,企业产生的业务数据应该存放在单独的数据表空间,而不应该使用系统已存在的表空间,尤其不能将业务数据保存到SYSTEM和SYSAUX表空间中,所以,DBA需要着重关注SYSTEM和SYSAUX表空间的占用情况. Oracle服务器使用SYSTEM表空间管理整个数据库.这个表空间包含系统的数据字典和关于数据库的管理信息,这些信息均包含在SYS方案中,只有SYS用户或者拥有

SQL Server--获取磁盘空间使用情况

原文:SQL Server--获取磁盘空间使用情况 对于DBA来说,监控磁盘使用情况是必要的工作,然后没有比较简单的方法能获取到磁盘空间使用率信息,下面总结下这些年攒下的脚本: 最常用的查看磁盘剩余空间,这个属于DBA入门必记的东西: -- 查看磁盘可用空间 EXEC master.dbo.xp_fixeddrives xp_fixeddrives方式有点是系统自带,可直接使用,缺点是不能查看磁盘总大小和不能查看SQL Server未使用到的磁盘信息 ======================

oracle增加表空间的四种方法,查询表空间使用情况

增加表空间大小的四种方法Meathod1:给表空间增加数据文件ALTER TABLESPACE app_data ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M; Meathod2:新增数据文件,并且允许数据文件自动增长ALTER TABLESPACE app_data ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF'

查询表空间使用情况

转载自http://www.cnblogs.com/askjacklin/archive/2012/06/04/2534571.html --查询表空间使用情况 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)", TO_CHAR(ROUND((D.TOT_GROOTTE_M