DBAtlas · 数据库运维图谱

检查剩余空间 / 使用率

Oracle

SELECT df.tablespace_name,
       ROUND(SUM(df.bytes)/1024/1024) AS total_mb,
       ROUND(NVL(fs.free, 0)/1024/1024) AS free_mb,
       ROUND((1 - NVL(fs.free,0)/SUM(df.bytes)) * 100, 1) AS pct_used
FROM dba_data_files df
LEFT JOIN (SELECT tablespace_name, SUM(bytes) free
           FROM dba_free_space GROUP BY tablespace_name) fs
  ON df.tablespace_name = fs.tablespace_name
GROUP BY df.tablespace_name, fs.free;

对于开启 AUTOEXTEND 的文件,真正的上限是 maxbytes;MAXSIZE 请查看 dba_data_files.maxbytes。

PostgreSQL

-- Datafile usage is at the OS level (df -h). Tablespace sizes from inside the DB:
SELECT spcname, pg_size_pretty(pg_tablespace_size(spcname))
FROM pg_tablespace;

PostgreSQL 依赖操作系统提供剩余磁盘空间;对于关键阈值,操作系统监控(df)必不可少。

MySQL

SELECT table_schema,
       ROUND(SUM(data_free)/1024/1024, 1) AS reclaimable_mb
FROM information_schema.tables
GROUP BY table_schema;

data_free 是表内可回收(碎片化)的空间;磁盘剩余空间在操作系统层面查看。

SQL Server

SELECT name AS file_name,
       size/128.0 AS size_mb,
       size/128.0 - CAST(FILEPROPERTY(name,'SpaceUsed') AS int)/128.0 AS free_mb
FROM sys.database_files;

SpaceUsed 以页为单位;除以 128 得到 MB(8 KB 页)。

MongoDB

var s = db.stats();
({ fsTotalGB: +(s.fsTotalSize/1073741824).toFixed(1),
   fsUsedGB:  +(s.fsUsedSize/1073741824).toFixed(1) })

使用 WiredTiger 时,fsTotalSize / fsUsedSize 给出操作系统层面磁盘的总大小和已用大小。

Redis

INFO memory
CONFIG GET maxmemory
# Usage = used_memory / maxmemory

maxmemory 为 0 时不设上限,RAM 耗尽时由操作系统 OOM killer 介入。maxmemory-policy 决定淘汰行为。

在 DBAtlas 中打开 →