Skip to content

Commit 3f01d44

Browse files
authored
Create spReport_Database_Sizes.sql
1 parent 665efbd commit 3f01d44

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed

Reports/spReport_Database_Sizes.sql

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
2+
SET ANSI_NULLS ON
3+
GO
4+
SET QUOTED_IDENTIFIER ON
5+
GO
6+
7+
CREATE OR ALTER PROCEDURE [dbo].[spReport_Database_Sizes]
8+
AS
9+
BEGIN
10+
11+
DECLARE @lcSQL NVARCHAR(MAX), @lcDB_Name VARCHAR(128), @lcDB_Id INT;
12+
DECLARE @lcTemp_Pages TABLE([DB_Id] INT, Reserved_Pages BIGINT, Used_Pages BIGINT, Pages BIGINT);
13+
DECLARE @lcTemp_File_Size TABLE([DB_Id] INT, Data_File_Size BIGINT, Log_File_size BIGINT);
14+
DECLARE @lcTemp_Log_Usage TABLE([DB_Name] VARCHAR(128), Log_Size_MB DECIMAL(15, 2), Log_Space_Use_Perc DECIMAL(10, 7), [Status] SMALLINT);
15+
16+
INSERT INTO @lcTemp_Log_Usage
17+
EXEC ('dbcc sqlperf(logspace) WITH NO_INFOMSGS')
18+
19+
DECLARE DBs_Cursor CURSOR FOR
20+
SELECT name, database_id FROM sys.databases ORDER BY name
21+
22+
OPEN DBs_Cursor
23+
FETCH NEXT FROM DBs_Cursor INTO @lcDB_Name, @lcDB_Id
24+
WHILE @@FETCH_STATUS=0
25+
BEGIN
26+
--Pages
27+
SELECT @lcSQL = 'SELECT ' + CONVERT(VARCHAR(10), @lcDB_Id) + ', SUM(a.total_pages), SUM(a.used_pages), ' +
28+
'SUM(CASE WHEN it.internal_type IN (202,204) THEN 0 ' +
29+
'WHEN a.type != 1 THEN a.used_pages ' +
30+
'WHEN p.index_id < 2 THEN a.data_pages ' +
31+
'ELSE 0 END) ' +
32+
'FROM [' + @lcDB_Name + '].sys.partitions p ' +
33+
'JOIN [' + @lcDB_Name + '].sys.allocation_units a on p.partition_id = a.container_id ' +
34+
'LEFT JOIN [' + @lcDB_Name + '].sys.internal_tables it on p.object_id = it.object_id '
35+
INSERT INTO @lcTemp_Pages([DB_Id], Reserved_Pages, Used_Pages, Pages)
36+
EXEC (@lcSQL)
37+
--PRINT (@lcSQL)
38+
39+
--File Sizes
40+
SELECT @lcSQL = 'SELECT ' + CONVERT(VARCHAR(10), @lcDB_Id) +
41+
', SUM(CONVERT(BIGINT, CASE WHEN type = 0 THEN size ELSE 0 END)), ' +
42+
'SUM(CONVERT(BIGINT, CASE WHEN type = 1 THEN size ELSE 0 END))' +
43+
'FROM sys.master_files WHERE database_id = ' + CONVERT(VARCHAR(10), @lcDB_Id)
44+
45+
INSERT INTO @lcTemp_File_Size([DB_Id], Data_File_Size, Log_File_size)
46+
EXEC (@lcSQL)
47+
--PRINT (@lcSQL)
48+
49+
FETCH NEXT FROM DBs_Cursor INTO @lcDB_Name, @lcDB_Id
50+
END
51+
CLOSE DBs_Cursor
52+
DEALLOCATE DBs_Cursor
53+
54+
SELECT D.name,
55+
CONVERT(DECIMAL(15,2), (F.Data_File_Size * 8192)/1048576.0) AS [Data_File_Size(MB)],
56+
CONVERT(DECIMAL(15,2), (F.Log_File_size * 8192)/1048576.0) AS [Log_File_size(MB)],
57+
CONVERT(DECIMAL(15,2), LU.Log_Space_Use_Perc) AS [Log_Space_Used(%)],
58+
CONVERT(DECIMAL(15,2), (CASE WHEN F.Data_File_Size >= P.Reserved_Pages
59+
THEN (F.Data_File_Size - P.Reserved_Pages) * 8192 / 1048576.0
60+
ELSE 0 END)) AS [Unallocated_Space(MB)],
61+
CONVERT(DECIMAL(15,2), (P.Reserved_Pages * 8192) / 1048576.0) AS [Reserved(MB)],
62+
CONVERT(DECIMAL(15,2), (P.Pages * 8192) / 1048576.0) AS [Data_Size(MB)],
63+
CONVERT(DECIMAL(15,2), ((P.Used_Pages - P.Pages) * 8192) / 1048576.0) AS [Index_Size(MB)],
64+
CONVERT(DECIMAL(15,2), ((P.Reserved_Pages - P.Used_Pages) * 8192) / 1048576.0) AS [Unused(MB)]
65+
FROM sys.databases D
66+
JOIN @lcTemp_File_Size F ON D.database_id = F.[DB_Id]
67+
JOIN @lcTemp_Pages P ON D.database_id = P.[DB_Id]
68+
JOIN @lcTemp_Log_Usage LU ON D.name = LU.[DB_Name]
69+
ORDER BY D.name;
70+
71+
END

0 commit comments

Comments
 (0)