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은 디스크 여유 공간을 OS에 의존한다. 임계값 관리를 위해 운영 체제 모니터링(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는 테이블 내부의 회수 가능한(단편화된) 공간이다. 디스크 여유 공간은 OS 수준에서 확인한다.

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가 OS 수준의 디스크 전체 크기와 사용 크기를 보여 준다.

Redis

INFO memory
CONFIG GET maxmemory
# Usage = used_memory / maxmemory

maxmemory가 0이면 한도가 없으며, RAM이 가득 차면 OS OOM killer가 개입한다. eviction 동작은 maxmemory-policy가 결정한다.

DBAtlas에서 열기 →