tnblog
首页
视频
资源
登录

查看数据库中表的资源占用

3451人阅读 2021/12/30 14:36 总访问:8755 评论:0 收藏:0 手机
分类: 数据库
BEGIN
  --查询目前数据库中的用户表
  DECLARE @currentTable TABLE (tableName NVARCHAR(50));
  INSERT INTO @currentTable (tableName)
  SELECT name
  FROM sysobjects
  WHERE xtype = 'U';
  --缓存系统存储过程的表变量
  DECLARE @temp TABLE(tableName NVARCHAR(50), rows NVARCHAR(50), reserved NVARCHAR(50),
                      data NVARCHAR(50), indexSize NVARCHAR(50), unused NVARCHAR(50));
  DECLARE i_cursor CURSOR FOR SELECT tableName FROM @currentTable;
  OPEN i_cursor;
  DECLARE @tableName NVARCHAR(50);
  FETCH NEXT FROM i_cursor INTO @tableName;
  WHILE @@FETCH_STATUS = 0
  BEGIN
    INSERT INTO @temp
    --调用系统存储过程,查询表的资源占用情况
    EXEC sp_spaceused @tableName;
    FETCH NEXT FROM i_cursor INTO @tableName;
  END
  CLOSE i_cursor;
  DEALLOCATE i_cursor;
  DECLARE @temp1 TABLE(tableName NVARCHAR(50), rows INT, reserved INT, data INT, indexSize INT, unused INT);
  INSERT INTO @temp1
  SELECT tableName
  ,      rows
  ,      convert(INT, substring(reserved, 1, len(reserved) - 3))
  ,      convert(INT, substring(data, 1, len(data) - 3))
  ,      convert(INT, substring(indexSize, 1, len(indexSize) - 3))
  ,      convert(INT, substring(unused, 1, len(unused) - 3))
  FROM @temp;
  --统计比例
  DECLARE @dataSum INT, @indexSum INT;
  SELECT @dataSum = sum(data), @indexSum = sum(indexSize) FROM @temp1;
  DECLARE @result TABLE(tableName NVARCHAR(50), rows INT, data DECIMAL(10,2), dataRate DECIMAL(10,2),
                        indexSize DECIMAL(10,2), indexRate DECIMAL(10,2))
  INSERT INTO @result
  SELECT tableName
  ,      rows
  ,      data * 1.0 / 1048576 --KB转为GB
  ,      data * 1.0 / @dataSum
  ,      indexSize * 1.0 / 1048576
  ,      indexSize * 1.0 / @indexSum
  FROM @temp1
  SELECT * FROM @result ORDER BY data DESC;
END


评价
没有个性,不需要签名
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
欢迎加群交流技术