ms-sql DB에서 전체용량 대비 각 테이블의 사용량 % 출력 0 1 793

by dizzyzz [SQLServer] [2021.04.16 10:52:30]


<테이블별 용량 (Table Size) 조회>

+-------------------+------------+
| Tables               | Size in MB |
+-------------------+------------+
| location              |       0.20 |  -> ? %
| data                  |       0.15 | -> ? %
| company            |       0.11 | -> ? %
| money               |       0.09 | - >? %
| pay                   |       0.08 | -> ? %
+-------------------+------------+

SELECT TABLE_NAME AS "Tables",
                   round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
FROM information_schema.TABLES
WHERE table_schema = 'kanu'
ORDER BY (data_length + index_length) DESC
LIMIT 5;


SELECT
    TABLE_NAME AS "Table Name"
    , ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Table Size(MB)"
    , ROUND(( (data_length+index_length) / SUM( (data_length + index_length) ) OVER() )*100, 2) AS sizePercent
    , ROUND( SUM( (data_length + index_length) ) OVER() /1024/1024 , 2) AS "TotalSize(MB)"
FROM information_schema.TABLES
WHERE table_schema = 'mysql'
ORDER BY (data_length + index_length) DESC

 

여기서 도움을 받아서 mysql에서 각 테이블의 사용량을 %로 출력하는 쿼리를 구했는데

mssql에서는 다르다는 것을 몰랐네요..

SELECT o.name
     , i.rows
FROM   sysindexes i
           INNER JOIN sysobjects o ON i.id = o.id
WHERE  i.indid < 2
   AND o.xtype = 'U'
ORDER BY
       i.rows DESC

해당 쿼리를 사용해서 테이블 수를 구하는 쿼리는 알아봤는데

mssql에서 각 테이블의 사용량을 %로 출력하는 쿼리는 어떻게 될까요

도움 부탁드리겠습니다.

by 뉴비디비 [2021.04.17 12:58:01]

이런 관리용 쿼리는 DB마다 아키텍쳐에 맞게 작성되어야 합니다.

-- MS SQL Server
SELECT 
	MIN(o.name) AS '테이블명'
	, SUM(reserved)*8192 /1024 AS '테이블용량(KB)'
	, SUM(SUM(reserved)*8192) OVER() /1024 AS '전체사용량(KB) '
	, ROUND(CAST(SUM(reserved)*8192 AS FLOAT) / CAST( SUM(SUM(reserved)*8192) OVER() AS FLOAT) *100, 2)  AS '사용율(%)'
FROM   sysindexes i
	JOIN sysobjects o ON o.id = i.id
WHERE  i.indid IN (0, 1, 255) AND o.xtype = 'U'
GROUP BY i.id
ORDER BY 테이블명

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입