MSSQL - SSMS에서 쿼리로 데이터베이스 용량 확인하는 방법

반응형

특정 데이터베이스 디스크 용량 확인 쿼리

데이터베이스 행 데이터 확인 쿼리

데이터베이스의 용량을 확인할 수 있는 쿼리이다.

DB_ID() 괄호 사이에는 데이터베이스의 이름을 넣어주면 된다.

 

메가 바이트 단위로 데이터베이스의 용량을 조회하는 쿼리

SELECT 
    name AS logical_name,
    size * 8.0 / 1024 AS size_in_mb
FROM 
    sys.master_files
WHERE 
    database_id = DB_ID('데이터베이스_이름');

 

용량이 클 경우, GB(기가바이트) 단위로 조회하고 싶으면 1024를 또 나누면 된다.

기가 바이트 단위로 데이터베이스의 용량을 조회하는 쿼리

SELECT 
    name AS logical_name,
    size * 8.0 / 1024 / 1024 AS size_in_gb
FROM 
    sys.master_files
WHERE 
    database_id = DB_ID('데이터베이스_이름');

 

데이터베이스 행 + 로그 데이터 확인 쿼리

현재 접속중인 데이터베이스의 로그 데이터까지 포함한 데이터베이스의 총 용량을 확인하는 쿼리이다.

SELECT 
    DB_NAME() AS DatabaseName,
    SUM(CASE WHEN type = 0 THEN size END) * 8 / 1024 AS DataFileSizeMB,
    SUM(CASE WHEN type = 1 THEN size END) * 8 / 1024 AS LogFileSizeMB
FROM sys.database_files

 

데이터베이스의 테이블별 용량 조회 쿼리

현재 접속중인 데이터베이스의 테이블별 용량을 조회하는 쿼리이다.

아래의 쿼리에서는 다음과 같은 디스크 용량 공간을 조회 가능하다.

단위는 메가 바이트를 기준으로 한다.

  • 테이블에 할당된 총 공간
  • 실제 데이터가 저장된 공간
  • 할당되었지만 현재 사용되지 않는 공간
SELECT 
    t.name AS table_name,
    SUM(p.rows) AS row_count,
    SUM(a.total_pages) * 8 / 1024 AS total_space_mb,
    SUM(a.used_pages) * 8 / 1024 AS used_space_mb,
    (SUM(a.total_pages) - SUM(a.used_pages)) * 8 / 1024 AS unused_space_mb
FROM 
    sys.tables t
INNER JOIN 
    sys.indexes i ON t.object_id = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
INNER JOIN 
    sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY 
    t.name
ORDER BY 
    total_space_mb DESC;

 

용량 확인 쿼리에서 8 혹은 8.0을 곱하는 이유는?

각 데이터베이스 파일은 크기를 페이지 단위로 나타낸다.

즉, 위의 쿼리들을 활용하여 시스템 뷰를 통해 반환되는 데이터베이스의 크기는 페이지 단위로 반환된다는 것이다.

실제로 반환되는 것은 디스크의 용량이 아닌 페이지 수이다.

SQL Server에서 각 페이지는 8KB를 차지한다.

따라서 페이지 수를 실제 크기로 변환하려면 8KB를 곱해야 한다.

 

메가 바이트, 기가 바이트를 구하려면 1024를 나누는 이유는?

컴퓨터는 2진수를 사용한다.

보통 우리에게 익숙한 1000 = 1k 와 같이,

컴퓨터에서는 2진수를 이용하여 가장 근사한 숫자인 1024를 사용한다.

즉, 1024KB는 1MB이기 때문에 메가 바이트, 기가 바이트를 구하려면 1024를 나누는 것이다.

 

일상 생활에서 우리가 사용하는 단위는 1000을 단위로 하기 때문에

실제 저장 매체의 디스크가 1테라라고 해도 실제 용량은 1테라가 아닌 것을 많이들 경험해 봤을 것이다.

같은 이치다.

 

참고

반응형