`

[SQL Server]数据库大小,表大小及行数统计

    博客分类:
  • sql
阅读更多
引用
- 统计某个表的空间大小, 行数信息
EXEC Your_DB.dbo.sp_spaceused 'dbo.t_log';



-- 统计多个数据库多个表的空间大小, 行数信息
create table tmp_table_space(table_name varchar(50), table_rows int, total_size varchar(20),data_size varchar(20), index_size varchar(20),
unused_size varchar(20), dbname varchar(30));
insert into tmp_table_space(table_name,table_rows,total_size,data_size,index_size,unused_size)
EXEC Your_DB.dbo.sp_spaceused 'dbo.t_log';
insert into tmp_table_space(table_name,table_rows,total_size,data_size,index_size,unused_size)
EXEC Your_DB.dbo.sp_spaceused 'dbo.t_log2';
update tmp_table_space set dbname='AHBZMJ' where dbname is null;

/*************************************************************************
用于查看对应数据库的大小、占用空间以及该数据库中各个系统表、用户表
使用方法:  在查询分析器中选择您要查看的数据库,然后运行此代码即可。
**************************************************************************/
----新建一个表spt_result_table存储数据库中各个表的空间信息
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spt_result_table]')
              and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[spt_result_table]
GO

create table spt_result_table
(
    tablename       varchar(776)      null,  ----表名
    rows varchar(776)      null,  ----表中现有的行数
    reserved varchar(776)      null,  ----为表保留的空间总量
    data varchar(776)      null,  ----表中的数据所使用的空间量
    indexp varchar(776)      null,  ----表中的索引所使用的空间量
    unused varchar(776)      null   ----表中未用的空间量
)ON [PRIMARY]
GO

----创建存储过程prc_database_spaceused:计算数据库大小及各个表占用空间的情况
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[prc_database_spaceused]')
           and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[prc_database_spaceused]
GO

create procedure prc_database_spaceused
as

BEGIN
    declare @id                 int
    declare @type         character(2)
    declare @pages         int
    declare @dbname             sysname           ----数据库名
    declare @dbsize             dec(15,0)         ----数据库大小
    declare @logsize            dec(15)
    declare @bytesperpage dec(15,0)
    declare @pagesperMB dec(15,0)
    declare @objname            varchar(776)       ----记录表名

    declare @database_size       varchar(776)
    declare @unallocated_space   varchar(776)
    select  @dbname = db_name()                   ----数据库为当前数据库
    create table #spt_space
    (
    rows int     null,
    reserved dec(15) null,         ----保留的空间总量
    data dec(15) null,         ----数据使用的空间总量
    indexp dec(15) null,         ----索引使用的空间
    unused dec(15) null          ----未用的空间量
    )

    ---- 计算数据大小(以kB页为单位)
    select  @dbsize = sum(convert(dec(15),size))
    from    dbo.sysfiles
    where   (status & 64 = 0)

    ---- 计算日志大小(以kB页为单位)
    select  @logsize = sum(convert(dec(15),size))
    from    dbo.sysfiles
    where   (status & 64 <> 0)

    ---- 求得一个page有多少bytes
    select  @bytesperpage = low
    from    master.dbo.spt_values
    where   number = 1 and type = 'E'

    ---- 计算MB占多少page(MB = 1048576B)
    select  @pagesperMB = 1048576 / @bytesperpage

    ---- 计算数据库大小
    set  @database_size   = ltrim(str((@dbsize + @logsize) / @pagesperMB,15,2) + ' MB')

    ---- 计算未用的空间量的大小
    set     @unallocated_space   = ltrim(str((@dbsize -
                (select sum(convert(dec(15),reserved))
         from sysindexes
         where indid in (0, 1, 255)
                 )) / @pagesperMB,15,2)+ ' MB')

    ---- 保留的空间总量
    insert into #spt_space (reserved)
    select sum(convert(dec(15),reserved))
    from   sysindexes
    where  indid in (0, 1, 255)

    select @pages = sum(convert(dec(15),dpages))
    from   sysindexes
    where  indid < 2

    select @pages = @pages + isnull(sum(convert(dec(15),used)), 0)
    from   sysindexes
    where  indid = 255

    ---- 数据使用的空间总量
    update #spt_space
    set    data = @pages

    ---- 索引使用的空间
    update #spt_space
    set    indexp = (select sum(convert(dec(15),used))
                     from   sysindexes
                     where  indid in (0, 1, 255))- data

    ---- 未用的空间量
    update #spt_space
    set    unused = reserved - (select sum(convert(dec(15),used))
            from   sysindexes
            where  indid in (0, 1, 255))
    ---- 输出数据库大小信息
    select
        database_name     = @dbname,
        database_size     = @database_size,
        unallocated_space = @unallocated_space,
        reserved          = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
        data              = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
        index_size        = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
        unused            = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')
    from   #spt_space, master.dbo.spt_values d
    where  d.number = 1
    and    d.type = 'E'

    ---- 清空临时表#spt_space
    delete from  #spt_space

    -----定义游标,计算表大小信息
    declare  cur_table  cursor for
    select   name
    from     sysobjects
    where    xtype = 'U' or xtype = 'S'
    order    by  xtype  asc

    -----打开游标
    open     cur_table
    fetch    next from cur_table   into  @objname
    while    (@@fetch_status = 0)
    begin

    select @id = null
    select @id = id,
           @type = xtype
    from   sysobjects
    where  id = object_id(@objname)

    --dbcc updateusage(0,@objname) with no_infomsgs

    insert into #spt_space (reserved)
    select sum(reserved)
    from   sysindexes
    where  indid in (0, 1, 255)
    and    id = @id

    select @pages = sum(dpages)
    from   sysindexes
    where  indid < 2
    and    id = @id

    select @pages = @pages + isnull(sum(used), 0)
    from   sysindexes
    where  indid = 255
    and    id = @id

    update #spt_space
    set    data = @pages

    update #spt_space
    set    indexp = (select sum(used)
    from   sysindexes
    where  indid in (0, 1, 255)
    and    id = @id) - data

    update #spt_space
    set    unused = reserved - (select sum(used)
        from   sysindexes
        where  indid in (0, 1, 255)
        and    id = @id)

    update #spt_space
    set    rows = i.rows
    from   sysindexes i
    where  i.indid < 2
    and    i.id = @id

    insert into spt_result_table
    select tablename = object_name(@id),
           rows = convert(char(11), rows),
           reserved = ltrim(str(reserved * d.low / 1024.,15,0) +  ' ' + 'KB'),
           data = ltrim(str(data * d.low / 1024.,15,0) +  ' ' + 'KB'),
           index_size = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
           unused = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')
    from   #spt_space, master.dbo.spt_values d
    where  d.number = 1
    and    d.type = 'E'

    truncate table  #spt_space

    fetch   next from cur_table   into @objname
    end
    close        cur_table
    deallocate   cur_table

    select * from spt_result_table where tablename is not null;
    drop table #spt_space
END
GO

exec prc_database_spaceused

---- 删除spt_result_table表
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[spt_result_table]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[spt_result_table]
GO

---- 删除存储过程prc_database_spaceused
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[prc_database_spaceused]')
           and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[prc_database_spaceused]
GO

http://blog.csdn.net/xiaoxu0123/archive/2010/12/23/6094755.aspx
分享到:
评论

相关推荐

    查看库中所有表的行数SQLSERVER

    sqlserver的一句sql查看数据库中所有表的行数

    SQLServer_数据库操作库

    SQLServer 数据库操作 dll,感觉比较好用所以也分享一下 函数说明: public int ExecuteSQL(string sql) //执行SQL语句(插入、更新、删除),并返回受影响的行数。 public DataTable DataTable(string sql) //...

    SQL SERVER数据库批量更新程序 1.0.0.33

    2.支持将记录集导出为txt、xml,office excel文件中,程序根据本机安装的EXCEL版本自动决定每个sheet最大的行数,超过每个sheet最大的行数后,查询结果集自动拆分工作表。(本版本支持多线程导出,可在关于-&gt;全局选项...

    Sqlserver数据库操作利器SqlDbxPersonal

    SqlDbx 是简单易用的数据库设备,... 可以看到库中有多少表、多少存储过程、多少触发器、多少视图、多少函数,可以直接看到每个表的数据行数,可以导出查询结果的insert语句,还可以对比不同库中同一个表的差异等等。

    SQL Server中统计每个表行数的快速方法

    我们都知道用聚合函数count()可以统计表的行数。如果需要统计数据库每个表各自的行数(DBA可能有这种需求),用count()函数就必须为每个表生成一个动态SQL语句并执行,才能得到结果。以前在互联网上看到有一种很好的...

    SQL Server自动更新统计信息的基本算法

    注意:此严格意义上讲,SQL Server 计算基数为表中的行数。 注意:除了基数,该谓语的选择性也会影响 AutoStats 生成。这意味着该统计信息可能无法更新的 afer 每 500 修改基数是 &lt; 500&gt; 500。比例因子

    深入解析SQL Server 2008

    本书全面探讨了sql server 2008的内部工作原理。全书共分为11章,首先在第1章中详细介绍了sql server 2008... 运行dbcc时,sqlserver在内部检查什么  处理多个并发用户时,如何在5个隔离级别和2个并发模型中做出选择

    在wincc中通过vbs操作SQL

    在项目中需要在一定条件满足时,保存一些数据到...考虑到WinCC6.2以后采用的就是SQL Server2005数据库,所以直接利用该数据库即可,通过SQL Server Management Studio(SSMS)可以创建自己的数据库,并安要求创建好表。

    Log Explorer for SQL Server v4.22 含注册机

    他可以支持SQLServer7.0、SQLServer2000和SQLServer2005,提取标准数据库的日志文件或者备份文件中的信息。 其中提供两个强大的工具:日志分析浏览,对象恢复。具体功能如下: l 日志文件浏览 l 数据库变更审查 l...

    Excel VBA与数据库整合应用范例精讲书及源代码

    实例7-7 将SQL Server数据库中的数据导入到Excel工作表(ADO) 实例7-8 将SQL Server数据库中的数据导入到Excel工作表(DAO) 实例7-9 查询获取SQL Server数据库的数据(ADO) 实例7-10 查询获取SQL Server...

    Excel VBA与数据库整合应用范例精讲

    实例7-8 将SQL Server数据库中的数据导入到Excel工作表(DAO) 实例7-9 查询获取SQL Server数据库的数据(ADO) 实例7-10 查询获取SQL Server数据库的数据(DAO) 实例7-11 将工作表数据导入到SQL Server数据库...

    SQL Server 2000 性能分析工具

    查看Server、Database及Objects的相关参数,分析Tables的行数及定义时间段的增量,可对Server设定若干有代表性的SQL语句,定期执行,以观测性能的变化,提供实时数据分析,对历史表中某连续时间字段分析平均响应时间...

    神通数据库-数据库快速入门.pdf

    库、Oracle、Microsoft SQL Server、IBM DB2、Microsoft Excel 97-2000、文本文件、其他支持 ODBC 的 数据源。在数据的转换过程中,向导能根据源数据和目标数据具体类型,通过内置的转换规则提供数据类型 的默认映射...

    三层架构 sqlServer数据访问底层

    ,对SqlServer数据库执行存储过程的功能进行封装. * 功能:1:向存储过程添加参数, * 清空存储过程参数。 * 2:执行存储过程返回DataTable,Dataset。 * 3:执行存储过程返回第一行第一列,受影响行数。 * 4:事务...

    sql表关系.txt

    表:具有固定列数和任意行数。 数据库:一些关联表的集合。 主键:一个数据表只能包含一个主键,使用主键来查询数据。 外键:用来关联两张表。 索引:快速访问数据库表的特定信息,索引是对数据库表一列和多列的...

    SqlDbx Pers

    SqlDbx 是简单易用的数据库设备,SQL... 可以看到库中有多少表、多少存储过程、多少触发器、多少视图、多少函数,可以直接看到每个表的数据行数,可以导出查询结果的insert语句,还可以对比不同库中同一个表的差异等等

    SQL SERVER的统计信息

    根据统计信息,查询优化器能评估查询过程中需要读取的行数及结果集情况,同时也能创建高质量的查询计划。有了统计信息,查询优化器可以使用基数估计来选择合理的索引,而不需要耗费更多的IO资源扫描来评估哪个索引...

    asp实现获取MSSQL数据库表指定条件行数的函数

    ‘数据库表行数函数,这是取表的行数 Function GetTblRows(TblName)  ‘如果TblName表名值为空,则  if TblName=”” Then  GetTblRows=”未知TblName”  exit Function  Else  set rec = server.createobject...

    通用数据库访问类sql server 版本常用方法封装

    /*============================================================================== ... * 学习和讨论有关asp.net mvc ,Ajax ,jquery ,,html/css,xml ,sqlserver ,wpf,IIS相关技术的交流和学习。

    SQL SERVER命令与数据字典工具 2.1.5

    2.功能菜单包含新建连接、打开SQL代码、保存SQL代码、载入数据架构、切换数据库、执行编辑区代码、终止编辑区代码、分析编辑区代码、导出数据到EXCEL 3.数据架构菜单包含相关查询、添加、删除、修改SQL代码模板、 ...

Global site tag (gtag.js) - Google Analytics