Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- mssql insert
- 자바
- solvesql
- SQLite
- 테이블용량조회
- jtds
- jdbc bulk insert
- 윈도우함수
- MS-SQL
- sql index
- lag
- jdbc
- Java
- MSSQL INDEX
- c#
- MSSQL
- 포인터
- SQL
- C++
- mssql 대용량 데이터 insert
- MSSQL 인덱스
- SQL Server
- mssql 대용량 데이터
- 자바 어노테이션
- select count
- annotation
- 어노테이션
- mssql bulk insert
- sql insert
Archives
- Today
- Total
Basic Byte Bites
MS-SQL 테이블 용량 조회 쿼리 (+ 간단한 설명) 본문
MSSQL에서 테이블이 차지하는(할당된) 용량을 확인하기 위해서는 sys 스키마의 allocation_units 뷰값을 통해 확인한다.
select * from sys.allocation_units

참조
페이지 및 익스텐트 아키텍처 가이드 - SQL Server
이 가이드에서는 모든 SQL Server 버전에서 페이지 및 익스텐트를 관리하는 데 사용되는 데이터 구조에 대해 설명합니다.
learn.microsoft.com
제공되는 컬럼중 total_pages와 used_pages를 확인하여 계산하면 되는데 1페이지당 8KBytes의 용량을 가지고 있으므로
각 페이지에 8을 곱하여 계산하면 간단하다.
테이블 식별자는 많이 사용되는 object_id가 아닌 partition_id를 사용하기때문에 테이블명을 알아내기 위해서는 partitions뷰와 조인을 하여 확인한다.
SELECT DISTINCT
object_name(p.object_id) as 'TableName'
FROM sys.allocation_units U
INNER JOIN sys.partitions P on U.container_id = P.partition_id
식별자를 object_id가 아닌 partition_id를 제공하는 이유는 MSSQL에서 관리하는 페이지는 모두 동일한 종류의 페이지가 아닌 데이터, 인덱스, LOB(대형 객체 VARCHAR(MAX) 등) 등을 나누어서 관리하기때문.
아래와 같이 간단하게(?) 테이블이 차지하는 용량을 확인할 수 있다.
SELECT
object_name(p.object_id) as 'TableName',
CAST(ROUND(sum(total_pages*8) / 1024.00, 0) as INT) as 'TOTAL MB',
CAST(ROUND(sum(used_pages*8) / 1024.00, 0) as INT) as 'USED MB',
CAST(ROUND(sum(total_pages*8) / 1024.00, 0) as INT)
- CAST(ROUND(sum(used_pages*8) / 1024.00, 0) as INT) as 'UNUSED MB'
FROM sys.allocation_units U
INNER JOIN sys.partitions P on U.container_id = P.partition_id
WHERE P.Object_id = object_id('조회 할 테이블 이름!')
GROUP BY p.object_id
'DataBase > MS_SQL' 카테고리의 다른 글
[MS-SQL, SQL Server] 비효율적인(사용량이 적은) 인덱스 찾기 (0) | 2025.02.25 |
---|---|
SQL 행의 개수 구하기 COUNT(*) vs sys.sysindexes (0) | 2024.07.15 |