暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle/SQLServer/达梦/mysql查看最大表和清理的方法

济南小老虎 2025-05-01
595

Oracle/SQLServer/达梦/mysql查看最大表和清理的方法


oracle

1. 查看表空间:
SELECT
  a.tablespace_name "表空间名",
  total "表空间大小",
  free "表空间剩余大小",
  ( total - free ) "表占用空间大小",
  ROUND( ( total - free ) total * 100, 2 ) || '%' "已使用空间百分比" 
FROM
  ( SELECT tablespace_name, SUM( bytes ) 1024 1024 total FROM dba_data_files GROUP BY tablespace_name ) a,
  ( SELECT tablespace_name, SUM( bytes ) 1024 1024 free FROM dba_free_space GROUP BY tablespace_name ) b 
WHERE
  a.tablespace_name = b.tablespace_name 
ORDER BY
  ( total - free ) DESC;


2. 查看最大的100张表
SELECT
    x.table_name AS table_nameinfo,
    x.表行数 AS table_rownum,
    x.表列数 AS table_colnum,
    y.表大小 AS table_size ,
    x.table_tablespace as table_tablespace
FROM
    (
    SELECT
        b.table_name,
        a.num_rows AS 表行数,
        b.count1 AS 表列数 ,
                                a.TABLESPACE_name as table_tablespace
    FROM
        dba_tables a
        INNER JOIN ( SELECT table_name, count( column_name ) AS count1 FROM dba_tab_columns GROUP BY table_name ) b ON a.table_name = b.table_name
    ORDER BY
        b.table_name
    ) x LEFT outer
    JOIN (
    SELECT
        sum( tablesize ) AS 表大小,
        tablename
    FROM
        (
        SELECT
            sum( C.bytes ) 1024 1024 AS tablesize,
            C.table_name AS tablename
        FROM
            ( SELECT A.table_name, B.bytes FROM dba_lobs A, dba_extents B WHERE A.segment_name = B.segment_name ) C
        GROUP BY
            C.table_name UNION ALL
        SELECT
            sum( bytes ) 1024 1024 AS tablesize,
            segment_name AS tablename
        FROM
            dba_extents
        WHERE
            segment_type = 'TABLE'
        GROUP BY
            segment_name
        )
    GROUP BY
        tablename
    ORDER BY
        1 DESC
    ) y ON x.table_name = y.tablename
ORDER BY
    nvl(y.表大小,0) desc FETCH NEXT 100 ROWS ONLY

3. 查看数据文件和表空间
select * from v$datafile;
select * from dba_tablespaces

4. 删除用户和表空间
drop user xxxx cascade 
drop tablespace xxxx including contents and datafile; 


MySQL

1. 查看表大小:
SELECT TABLE_SCHEMA AS `Database`, TABLE_NAME AS `Table`, ROUND(( DATA_LENGTH + INDEX_LENGTH ) 1024 1024,
  2 
) AS `Size (MB)` 
FROM
  INFORMATION_SCHEMA.TABLES 
ORDER BY
  ( DATA_LENGTH + INDEX_LENGTH ) DESC;

2. 按表前缀查看表的数量
SELECT LEFT
  ( TABLE_NAME, 3 ),
  count( 1 ) 
FROM
  INFORMATION_SCHEMA.TABLES 
GROUP BY
  LEFT ( TABLE_NAME, 3 ) 
ORDER BY
  2 DESC


达梦

create table table_count (owner varchar(100),table_name varchar(100),used_space_MB varchar(100));
truncate table table_count ;
declare
begin
for rec in
(
select owner, table_name from all_tables order by 1, 2
)
loop
insert into table_count
select
rec.owner ,
rec.table_name,
table_used_pages(rec.owner, rec.table_name)*(page()/1024)/1024
from
dual;
end loop;
end;
select * from table_count  order by to_number(used_space_mb) desc;


SQLServer

使用查询分析器
点击数据库->报表->按磁盘使用情况进行分析


PG

1. 查看最大的100张表
SELECT 
    nspname || '.' || relname AS "relation",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
FROM 
    pg_class C
LEFT JOIN 
    pg_namespace N ON (N.oid = C.relnamespace)
WHERE 
    nspname NOT IN ('pg_catalog''information_schema')
    AND C.relkind <> 'i'
    AND nspname !~ '^pg_toast'
ORDER BY 
    pg_total_relation_size(C.oid) DESC
LIMIT 10;


文章转载自济南小老虎,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论