DBAtlas · 数据库运维图谱

列出最大的表 / 集合

Oracle

SELECT segment_name, segment_type,
       ROUND(bytes/1024/1024, 1) AS mb
FROM dba_segments
WHERE segment_type IN ('TABLE','TABLE PARTITION')
ORDER BY bytes DESC
FETCH FIRST 10 ROWS ONLY;

去掉 segment_type 过滤条件即可同时查看索引。

PostgreSQL

SELECT relname AS table,
       pg_size_pretty(pg_total_relation_size(relid)) AS total
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 10;

pg_total_relation_size 是表 + 索引 + TOAST 的总和;仅看表本身使用 pg_relation_size。

MySQL

SELECT table_name,
       ROUND((data_length + index_length)/1024/1024, 1) AS mb
FROM information_schema.tables
WHERE table_schema = DATABASE()
ORDER BY (data_length + index_length) DESC
LIMIT 10;

针对特定 schema,使用 WHERE table_schema = 'name'。

SQL Server

SELECT TOP 10 OBJECT_NAME(object_id) AS table_name,
       SUM(reserved_page_count) * 8 / 1024 AS mb
FROM sys.dm_db_partition_stats
GROUP BY object_id
ORDER BY mb DESC;

reserved_page_count 涵盖所有已保留页(数据 + 索引)。

MongoDB

db.getCollectionNames()
  .map(c => ({ name: c, mb: +(db[c].stats().storageSize/1048576).toFixed(1) }))
  .sort((a, b) => b.mb - a.mb)
  .slice(0, 10)

storageSize 是压缩后的磁盘占用大小。即使在大集合上,stats() 的开销也很低。

Redis

redis-cli --bigkeys
# To rank by memory (bytes): redis-cli --memkeys

两者都通过 SCAN 扫描整个键空间(不会阻塞服务器,但会增加负载);区别在于指标:--bigkeys 按每种类型的元素数/长度报告最大的键,--memkeys 通过 MEMORY USAGE 按内存消耗报告。单个键使用 MEMORY USAGE <key>。

在 DBAtlas 中打开 →