[SQL] 선택 SQL Server 데이터베이스 크기
SQL선택 SQL Server 데이터베이스 크기
내가 어떻게 데이터베이스의 수 크기에 내 SQL 서버를 조회 할 수 있습니다?
나는 이것을 사용 :
use "MY_DB"
exec sp_spaceused
알았어 :
database_name database_size unallocated space
My_DB 17899.13 MB 5309.39 MB
그것은 나에게 내가 필요가 없습니다 여러 열 반환, 어쩌면이 저장 프로 시저에서 database_size 열을 선택하는 트릭이있다?
나는 또한이 코드를 시도 :
SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name,
(size * 8) / 1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = 'MY_DB'
그것은 나에게이 결과를 제공합니다 :
DatabaseName Logical_Name Physical_Name SizeMB
MY_DB MY_DB D:\MSSQL\Data\MY_DB.mdf 10613
MY_DB MY_DB_log D:\MSSQL\Data\MY_DB.ldf 7286
그래서 나는이 작성 :
SELECT SUM(SizeMB)
FROM (
SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name,
(size * 8) / 1024 SizeMB
FROM sys.master_files
WHERE DB_NAME(database_id) = 'MY_DB'
) AS TEMP
내가 가지고 : 1183
그래서 작동하지만 어쩌면이 얻을 수있는 적절한 방법은 무엇입니까?
해결법
-
==============================
1.이거 한번 해봐 -
이거 한번 해봐 -
질문:
SELECT database_name = DB_NAME(database_id) , log_size_mb = CAST(SUM(CASE WHEN type_desc = 'LOG' THEN size END) * 8. / 1024 AS DECIMAL(8,2)) , row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(8,2)) , total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2)) FROM sys.master_files WITH(NOWAIT) WHERE database_id = DB_ID() -- for current db GROUP BY database_id
산출:
-- my query name log_size_mb row_size_mb total_size_mb -------------- ------------ ------------- ------------- xxxxxxxxxxx 512.00 302.81 814.81 -- sp_spaceused database_name database_size unallocated space ---------------- ------------------ ------------------ xxxxxxxxxxx 814.81 MB 13.04 MB
함수:
ALTER FUNCTION [dbo].[GetDBSize] ( @db_name NVARCHAR(100) ) RETURNS TABLE AS RETURN SELECT database_name = DB_NAME(database_id) , log_size_mb = CAST(SUM(CASE WHEN type_desc = 'LOG' THEN size END) * 8. / 1024 AS DECIMAL(8,2)) , row_size_mb = CAST(SUM(CASE WHEN type_desc = 'ROWS' THEN size END) * 8. / 1024 AS DECIMAL(8,2)) , total_size_mb = CAST(SUM(size) * 8. / 1024 AS DECIMAL(8,2)) FROM sys.master_files WITH(NOWAIT) WHERE database_id = DB_ID(@db_name) OR @db_name IS NULL GROUP BY database_id
UPDATE 2016년 1월 22일 :
크기, 여유 공간에 대한 정보 표시, 마지막 데이터베이스 백업
IF OBJECT_ID('tempdb.dbo.#space') IS NOT NULL DROP TABLE #space CREATE TABLE #space ( database_id INT PRIMARY KEY , data_used_size DECIMAL(18,2) , log_used_size DECIMAL(18,2) ) DECLARE @SQL NVARCHAR(MAX) SELECT @SQL = STUFF(( SELECT ' USE [' + d.name + '] INSERT INTO #space (database_id, data_used_size, log_used_size) SELECT DB_ID() , SUM(CASE WHEN [type] = 0 THEN space_used END) , SUM(CASE WHEN [type] = 1 THEN space_used END) FROM ( SELECT s.[type], space_used = SUM(FILEPROPERTY(s.name, ''SpaceUsed'') * 8. / 1024) FROM sys.database_files s GROUP BY s.[type] ) t;' FROM sys.databases d WHERE d.[state] = 0 FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, '') EXEC sys.sp_executesql @SQL SELECT d.database_id , d.name , d.state_desc , d.recovery_model_desc , t.total_size , t.data_size , s.data_used_size , t.log_size , s.log_used_size , bu.full_last_date , bu.full_size , bu.log_last_date , bu.log_size FROM ( SELECT database_id , log_size = CAST(SUM(CASE WHEN [type] = 1 THEN size END) * 8. / 1024 AS DECIMAL(18,2)) , data_size = CAST(SUM(CASE WHEN [type] = 0 THEN size END) * 8. / 1024 AS DECIMAL(18,2)) , total_size = CAST(SUM(size) * 8. / 1024 AS DECIMAL(18,2)) FROM sys.master_files GROUP BY database_id ) t JOIN sys.databases d ON d.database_id = t.database_id LEFT JOIN #space s ON d.database_id = s.database_id LEFT JOIN ( SELECT database_name , full_last_date = MAX(CASE WHEN [type] = 'D' THEN backup_finish_date END) , full_size = MAX(CASE WHEN [type] = 'D' THEN backup_size END) , log_last_date = MAX(CASE WHEN [type] = 'L' THEN backup_finish_date END) , log_size = MAX(CASE WHEN [type] = 'L' THEN backup_size END) FROM ( SELECT s.database_name , s.[type] , s.backup_finish_date , backup_size = CAST(CASE WHEN s.backup_size = s.compressed_backup_size THEN s.backup_size ELSE s.compressed_backup_size END / 1048576.0 AS DECIMAL(18,2)) , RowNum = ROW_NUMBER() OVER (PARTITION BY s.database_name, s.[type] ORDER BY s.backup_finish_date DESC) FROM msdb.dbo.backupset s WHERE s.[type] IN ('D', 'L') ) f WHERE f.RowNum = 1 GROUP BY f.database_name ) bu ON d.name = bu.database_name ORDER BY t.total_size DESC
산출:
database_id name state_desc recovery_model_desc total_size data_size data_used_size log_size log_used_size full_last_date full_size log_last_date log_size ----------- -------------------------------- ------------ ------------------- ------------ ----------- --------------- ----------- -------------- ----------------------- ------------ ----------------------- --------- 24 StackOverflow ONLINE SIMPLE 66339.88 65840.00 65102.06 499.88 5.05 NULL NULL NULL NULL 11 AdventureWorks2012 ONLINE SIMPLE 16404.13 15213.00 192.69 1191.13 15.55 2015-11-10 10:51:02.000 44.59 NULL NULL 10 locateme ONLINE SIMPLE 1050.13 591.00 2.94 459.13 6.91 2015-11-06 15:08:34.000 17.25 NULL NULL 8 CL_Documents ONLINE FULL 793.13 334.00 333.69 459.13 12.95 2015-11-06 15:08:31.000 309.22 2015-11-06 13:15:39.000 0.01 1 master ONLINE SIMPLE 554.00 492.06 4.31 61.94 5.20 2015-11-06 15:08:12.000 0.65 NULL NULL 9 Refactoring ONLINE SIMPLE 494.32 366.44 308.88 127.88 34.96 2016-01-05 18:59:10.000 37.53 NULL NULL 3 model ONLINE SIMPLE 349.06 4.06 2.56 345.00 0.97 2015-11-06 15:08:12.000 0.45 NULL NULL 13 sql-format.com ONLINE SIMPLE 216.81 181.38 149.00 35.44 3.06 2015-11-06 15:08:39.000 23.64 NULL NULL 23 users ONLINE FULL 173.25 73.25 3.25 100.00 5.66 2015-11-23 13:15:45.000 0.72 NULL NULL 4 msdb ONLINE SIMPLE 46.44 20.25 19.31 26.19 4.09 2015-11-06 15:08:12.000 2.96 NULL NULL 21 SSISDB ONLINE FULL 45.06 40.00 4.06 5.06 4.84 2014-05-14 18:27:11.000 3.08 NULL NULL 27 tSQLt ONLINE SIMPLE 9.00 5.00 3.06 4.00 0.75 NULL NULL NULL NULL 2 tempdb ONLINE SIMPLE 8.50 8.00 4.50 0.50 1.78 NULL NULL NULL NULL
-
==============================
2.또한 다음 쿼리의 결과에 결과를 비교
또한 다음 쿼리의 결과에 결과를 비교
EXEC sp_helpdb @dbname= 'MSDB'
그것은 다음과 유사한 결과를 생산
SQL Server 데이터베이스 및 데이터베이스 파일에 대한 여유 공간을 결정하는 다른 방법 - 좋은 기사가있다
-
==============================
3.SQL 서버 2012에서 계산 SQL 데이터베이스 크기에 완벽하게 나를 위해 일했다
SQL 서버 2012에서 계산 SQL 데이터베이스 크기에 완벽하게 나를 위해 일했다
exec sp_spaceused
-
==============================
4.
SELECT sys.databases.name AS [Database Name], CONVERT(VARCHAR,SUM(size)*8/1024)+' MB' AS [Size] FROM sys.databases JOIN sys.master_files ON sys.databases.database_id=sys.master_files.database_id GROUP BY sys.databases.name ORDER BY sys.databases.name
-
==============================
5.EXEC의 sp_spaceused @oneresultset = 1 1 행에 결과 모두 표시
EXEC의 sp_spaceused @oneresultset = 1 1 행에 결과 모두 표시
당신이 실행하면 당신이 두 개의 행을 볼 수 있습니다 'EXEC는 sp_spaceused를' SQL 서버 관리 스튜디오 v17.9에서 일
-
==============================
6.이 쿼리가이 링크를 어떻게 작동하는지 확인할 수 있습니다.
이 쿼리가이 링크를 어떻게 작동하는지 확인할 수 있습니다.
IF OBJECT_ID('tempdb..#spacetable') IS NOT NULL DROP TABLE tempdb..#spacetable create table #spacetable ( database_name varchar(50) , total_size_data int, space_util_data int, space_data_left int, percent_fill_data float, total_size_data_log int, space_util_log int, space_log_left int, percent_fill_log char(50), [total db size] int, [total size used] int, [total size left] int ) insert into #spacetable EXECUTE master.sys.sp_MSforeachdb 'USE [?]; select x.[DATABASE NAME],x.[total size data],x.[space util],x.[total size data]-x.[space util] [space left data], x.[percent fill],y.[total size log],y.[space util], y.[total size log]-y.[space util] [space left log],y.[percent fill], y.[total size log]+x.[total size data] ''total db size'' ,x.[space util]+y.[space util] ''total size used'', (y.[total size log]+x.[total size data])-(y.[space util]+x.[space util]) ''total size left'' from (select DB_NAME() ''DATABASE NAME'', sum(size*8/1024) ''total size data'',sum(FILEPROPERTY(name,''SpaceUsed'')*8/1024) ''space util'' ,case when sum(size*8/1024)=0 then ''divide by zero'' else substring(cast((sum(FILEPROPERTY(name,''SpaceUsed''))*1.0*100/sum(size)) as CHAR(50)),1,6) end ''percent fill'' from sys.master_files where database_id=DB_ID(DB_NAME()) and type=0 group by type_desc ) as x , (select sum(size*8/1024) ''total size log'',sum(FILEPROPERTY(name,''SpaceUsed'')*8/1024) ''space util'' ,case when sum(size*8/1024)=0 then ''divide by zero'' else substring(cast((sum(FILEPROPERTY(name,''SpaceUsed''))*1.0*100/sum(size)) as CHAR(50)),1,6) end ''percent fill'' from sys.master_files where database_id=DB_ID(DB_NAME()) and type=1 group by type_desc )y' select * from #spacetable order by database_name drop table #spacetable
-
==============================
7.
SELECT DB_NAME (database_id) as [Database Name], name as [Database File Name], [Type] = CASE WHEN Type_Desc = 'ROWS' THEN 'Data File(s)' WHEN Type_Desc = 'LOG' THEN 'Log File(s)' ELSE Type_Desc END, size*8/1024 as 'Size (MB)', physical_name as [Database_File_Location] FROM sys.master_files ORDER BY 1,3
산출
Database Name Database File Name Type Size (MB) Database_File_Location --------------------------- ------------------------------- ------------------- ----------- --------------------------------------------------------------- AdventureWorksDW2017 AdventureWorksDW2017 Data File(s) 136 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2017.mdf AdventureWorksDW2017 AdventureWorksDW2017_log Log File(s) 72 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2017_log.ldf DBA_Admin DBA_Admin Data File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\DBA_Admin.mdf DBA_Admin DBA_Admin_log Log File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\DBA_Admin_log.ldf EventNotifications EventNotifications Data File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\EventNotifications.mdf EventNotifications EventNotifications_log Log File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\EventNotifications_log.ldf master master Data File(s) 4 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\master.mdf master mastlog Log File(s) 2 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\mastlog.ldf model modeldev Data File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\model.mdf model modellog Log File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\modellog.ldf msdb MSDBData Data File(s) 19 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\MSDBData.mdf msdb MSDBLog Log File(s) 13 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\MSDBLog.ldf tempdb temp2 Data File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_2.ndf tempdb temp3 Data File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_3.ndf tempdb temp4 Data File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb_mssql_4.ndf tempdb tempdev Data File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\tempdb.mdf tempdb templog Log File(s) 8 E:\MSSQL14.MSSQLSERVER\MSSQL\DATA\templog.ldf
-
==============================
8.하늘빛과 온 Premises- 모두 SQL Server의 데이터베이스 크기를 확인
하늘빛과 온 Premises- 모두 SQL Server의 데이터베이스 크기를 확인
방법 1 - 사용 'sys.database_files'시스템보기
SELECT DB_NAME() AS [database_name], CONCAT(CAST(SUM( CAST( (size * 8.0/1024) AS DECIMAL(15,2) ) ) AS VARCHAR(20)),' MB') AS [database_size] FROM sys.database_files;
방법 2 - 'sp_spaceused를'시스템 저장 프로 시저 사용
EXEC sp_spaceused ;
-
==============================
9.이 큰 응답의 많은 이미 여기에 있지만 간단하고 표준 보고서를 사용하여 SQL Server 관리 Studio (SSMS)와 SQL Server 데이터베이스 크기를 얻을 수있는 빠른 방법을 언급 그것의 가치.
이 큰 응답의 많은 이미 여기에 있지만 간단하고 표준 보고서를 사용하여 SQL Server 관리 Studio (SSMS)와 SQL Server 데이터베이스 크기를 얻을 수있는 빠른 방법을 언급 그것의 가치.
당신이 필요로하는 보고서를 실행하려면 :
그것은 좋은 보고서를 인쇄합니다
총 공간 예약은 디스크의 데이터베이스의 전체 크기이며 모든 데이터 파일의 크기와 모든 트랜잭션 로그 파일의 크기를 포함한다.
후드, SSMS는 dbo.sysfiles 보거나 sys.database_files이와 전체 공간 예약 값을 얻기 위해이 쿼리의 어떤 종류 (MSSQL의 버전에 따라) 볼 사용
SELECT sum((convert(dec (19, 2), convert(bigint,SIZE))) * 8192 / 1048576.0) db_size_mb FROM dbo.sysfiles;
from https://stackoverflow.com/questions/18014392/select-sql-server-database-size by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 엑셀 워크 시트에서 SQL 삽입 스크립트를 생성 (0) | 2020.05.17 |
---|---|
[SQL] 내부는 여러 컬럼에 가입 할 방법 (0) | 2020.05.17 |
[SQL] 어떻게 급여 테이블에서 세 번째 또는 n 번째 최대 급여를 찾는 방법은? (0) | 2020.05.17 |
[SQL] # 1273 - 알 수없는 정렬 : 'utf8mb4_unicode_520_ci' (0) | 2020.05.17 |
[SQL] MySQL은 컬럼에서 동일한 값이 행을 찾기 (0) | 2020.05.17 |