Pertanyaan Tentukan Ukuran Database SQL Server


SQL Server 2005/2008 Express edition memiliki batasan 4 GB per basis data. Sejauh yang saya tahu mesin database hanya menganggap data, sehingga tidak termasuk file log, ruang yang tidak terpakai, dan ukuran indeks.

Memperoleh panjang file MDF seharusnya tidak memberikan ukuran database yang benar dalam batasan SQL Server. Pertanyaan saya adalah bagaimana cara mendapatkan ukuran basis data?


75
2017-10-06 21:59


asal


Jawaban:


sp_spaceused


96
2017-10-06 22:02



sp_helpdb

tidak diperlukan perulangan, tidak seperti sp_spaceused.


75
2018-02-05 18:23



Menurut bantuan SQL2000, sp_spaceused termasuk data dan indeks.

Skrip ini harus dilakukan:

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

16
2017-10-06 22:18



Di SQL Management Studio, klik kanan pada database dan pilih "Properties" dari menu konteks. Lihatlah sosok "Ukuran".


14
2017-10-06 22:14



Solusi terbaik adalah mungkin untuk menghitung ukuran setiap file database, menggunakan tampilan sys.sysfiles, mempertimbangkan ukuran 8 KB untuk setiap halaman, sebagai berikut:

USE [myDatabase]
GO

SELECT
    [size] * 8
    , [filename]
FROM sysfiles

Kolom [bidang] mewakili ukuran file, di halaman (Referensi MSDN untuk sysfiles).

Anda akan melihat setidaknya akan ada dua file (MDF dan LDF): jumlah file-file ini akan memberi Anda ukuran yang benar dari seluruh database ...


7
2017-08-02 14:08



Saya selalu suka pergi setelah itu secara langsung:

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 )

5
2018-03-27 08:31



Kamu bisa menggunakan yang kuno ini juga ...

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

2