SQL Server 데이터베이스 크기 결정
SQL Server 2005/2008 Express 버전에는 데이터베이스당 4GB의 제한이 있습니다.제가 알기로는 데이터베이스 엔진은 데이터만 고려하여 로그 파일, 사용되지 않은 공간 및 인덱스 크기는 제외합니다.
MDF 파일의 길이를 가져오는 것은 SQL Server 제한 측면에서 올바른 데이터베이스 크기를 제공해서는 안 됩니다.제 질문은 데이터베이스 크기를 어떻게 구하느냐는 것입니다.
sp_space 사용됨
sp_helpdb
사용된 sp_space와 달리 루프가 필요하지 않습니다.
SQL2000 도움말에 따르면 사용되는 sp_space에는 데이터와 인덱스가 포함되어 있습니다.
이 스크립트는 다음을 수행해야 합니다.
CREATE TABLE #t (name SYSNAME, rows CHAR(11), reserved VARCHAR(18),
data VARCHAR(18), index_size VARCHAR(18), unused VARCHAR(18))
EXEC sp_msforeachtable 'INSERT INTO #t EXEC sp_spaceused ''?'''
-- SELECT * FROM #t ORDER BY name
-- SELECT name, CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3)) FROM #t ORDER BY name
SELECT SUM(CONVERT(INT, SUBSTRING(data, 1, LEN(data)-3))) FROM #t
DROP TABLE #t
SQL Management Studio에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 상황에 맞는 메뉴에서 "속성"을 선택합니다."크기" 수치를 보세요.
가장 좋은 해결책은 다음과 같이 각 페이지의 크기를 고려하여 sys.sys 파일 보기를 사용하여 각 데이터베이스 파일의 크기를 계산하는 것입니다.
USE [myDatabase]
GO
SELECT
[size] * 8
, [filename]
FROM sysfiles
[field] 열은 파일의 크기를 페이지 단위로 나타냅니다(MSDN Reference to sysfiles).
적어도 두 개의 파일(MDF 및 LDF)이 있을 것입니다. 이러한 파일의 합은 전체 데이터베이스의 올바른 크기를 제공합니다.
나는 항상 그것을 직접 쫓는 것을 좋아했습니다.
SELECT
DB_NAME( dbid ) AS DatabaseName,
CAST( ( SUM( size ) * 8 ) / ( 1024.0 * 1024.0 ) AS decimal( 10, 2 ) ) AS DbSizeGb
FROM
sys.sysaltfiles
GROUP BY
DB_NAME( dbid )
이 구식도 쓸 수 있어요
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
DECLARE @iCount int, @iMax int, @DatabaseName varchar(200), @SQL varchar (8000)
Select NAME, DBID, crdate, filename, version
INTO #TEMP
from MAster..SYSDatabASES
SELECT @iCount = Count(DBID) FROM #TEMP
Select @SQL='Create Table ##iFile1 ( DBName varchar( 200) NULL, Fileid INT, FileGroup int, TotalExtents INT , USedExtents INT ,
Name varchar(100), vFile varchar (300), AllocatedSpace int NUll, UsedSpace int Null, PercentageFree int Null ) '+ char(10)
exec (@SQL)
Create Table ##iTotals ( ServerName varchar(100), DBName varchar( 200) NULL, FileType varchar(10),Fileid INT, FileGroup int, TotalExtents INT , USedExtents INT ,
Name varchar(100), vFile varchar (300), AllocatedSpace int NUll, UsedSpace int Null, PercentageFree int Null )
WHILE @iCount>0
BEGIN
SELECT @iMax =Max(dbid) FROM #TEMP
Select @DatabaseName = Name FROM #TEMP where dbid =@iMax
SELECT @SQL = 'INSERT INTO ##iFile1(Fileid , FileGroup , TotalExtents , USedExtents , Name , vFile)
EXEC (''USE [' + @DatabaseName + '] DBCC showfilestats'') ' + char(10)
Print (@SQL)
EXEC (@SQL)
SELECT @SQL = 'UPDATE ##iFile1 SET DBName ='''+ @DatabaseName +''' WHERE DBName IS NULL'
EXEC (@SQL)
DELETE FROM #TEMP WHERE dbid =@iMax
Select @iCount =@iCount -1
END
UPDATE ##iFile1
SET AllocatedSpace = (TotalExtents * 64.0 / 1024.0 ), UsedSpace =(USedExtents * 64.0 / 1024.0 )
UPDATE ##iFile1
SET PercentageFree = 100-Convert(float,UsedSpace)/Convert(float,AllocatedSpace )* 100
WHERE USEDSPACE>0
CREATE TABLE #logspace (
DBName varchar( 100),
LogSize float,
PrcntUsed float,
status int
)
INSERT INTO #logspace
EXEC ('DBCC sqlperf( logspace)')
INSERT INTO ##iTotals(ServerName, DBName, FileType,Name, vFile,PercentageFree,AllocatedSpace)
select @@ServerName ,DBNAME, 'Data' as FileType,Name, vFile, PercentageFree , AllocatedSpace
from ##iFile1
UNION
select @@ServerName ,DBNAME, 'Log' as FileType ,DBName,'' as vFile ,PrcntUsed , LogSize
from #logspace
Select * from ##iTotals
select ServerName ,DBNAME, FileType, Sum( AllocatedSpace) as AllocatedSpaceMB
from ##iTotals
Group By ServerName ,DBNAME, FileType
Order By ServerName ,DBNAME, FileType
select ServerName ,DBNAME, Sum( AllocatedSpace) as AllocatedSpaceMB
from ##iTotals
Group By ServerName ,DBNAME
Order By ServerName ,DBNAME
drop table ##iFile1
drop table #logspace
drop table #TEMP
drop table ##iTotals
Azure 및 On-Premise를 모두 지원하는 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_space used' 시스템 저장 프로시저 사용
EXEC sp_spaceused ;
언급URL : https://stackoverflow.com/questions/176379/determine-sql-server-database-size
'source' 카테고리의 다른 글
Qt Creator에서 CDB를 구성하는 방법은 무엇입니까? (0) | 2023.07.13 |
---|---|
Xcode 9 - "고정 폭 제약으로 인해 클리핑이 발생할 수 있음" 및 기타 현지화 경고 (0) | 2023.07.13 |
R에서 CSV 파일을 가져오려면 어떻게 해야 합니까? (0) | 2023.07.08 |
SQL Server에서 음의 데이터를 양의 데이터로 변환 (0) | 2023.07.08 |
strft time을 사용하여 기간(AM/PM)을 어떻게 계산할 수 있습니까? (0) | 2023.07.08 |