Created
August 19, 2018 23:26
-
-
Save LetsGoRafting/bcee7addee41f4d52586961940bafa35 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
USE [master] | |
GO | |
CREATE PROCEDURE [dbo].[sp_sizing] @granularity | |
varchar(1) = NULL, @database_name sysname = NULL AS | |
/*------------------------------------------------------------- | |
dbo.sp_sizing Stored Procedure | |
Created by Tim Ford, www.sqlcruise.com, www.thesqlagentman.com | |
Use freely but review code before executing. | |
Code downloaded from internet so execute at your own risk. | |
-------------------------------------------------------------*/ | |
DECLARE @sql_command VARCHAR(5000) | |
CREATE TABLE #Results ([server] NVARCHAR(128), [database_name] NVARCHAR(128), [file_name] NVARCHAR(128), [physical_name] NVARCHAR(260), | |
[file_type] VARCHAR(4), [total_size_mb] INT, [available_space_mb] INT, [growth_units] VARCHAR(15), [max_file_size_mb] INT) | |
SELECT @sql_command = | |
'USE [?] INSERT INTO #Results([server], [database_name], [file_name], [physical_name], | |
[file_type], [total_size_mb], [available_space_mb], | |
[growth_units], [max_file_size_mb]) | |
SELECT CONVERT(nvarchar(128), SERVERPROPERTY(''Servername'')), DB_NAME(), | |
[name] AS [file_name], | |
physical_name AS [physical_name], | |
[file_type] = | |
CASE type | |
WHEN 0 THEN ''Data''' | |
+ | |
'WHEN 1 THEN ''Log''' | |
+ | |
'END, | |
[total_size_mb] = | |
CASE ceiling([size]/128) | |
WHEN 0 THEN 1 | |
ELSE ceiling([size]/128) | |
END, | |
[available_space_mb] = | |
CASE ceiling([size]/128) | |
WHEN 0 THEN (1 - CAST(FILEPROPERTY([name], ''SpaceUsed''' + ') as int) /128) | |
ELSE (([size]/128) - CAST(FILEPROPERTY([name], ''SpaceUsed''' + ') as int) /128) | |
END, | |
[growth_units] = | |
CASE [is_percent_growth] | |
WHEN 1 THEN CAST([growth] AS varchar(20)) + ''%''' | |
+ | |
'ELSE CAST([growth]/1024*8 AS varchar(20)) + ''Mb''' | |
+ | |
'END, | |
[max_file_size_mb] = | |
CASE [max_size] | |
WHEN -1 THEN NULL | |
WHEN 268435456 THEN NULL | |
ELSE [max_size]/1024*8 | |
END | |
FROM sys.database_files WITH (NOLOCK) | |
ORDER BY [file_type], [file_id]' | |
--Print the command to be issued against all databases | |
--PRINT @sql_command | |
--======================================== | |
--RUN COMMAND AGAINST EACH DATABASE | |
--======================================== | |
EXEC sp_MSforeachdb @sql_command | |
--================================= | |
--RETURN THE RESULTS | |
--If @database_name is NULL: | |
--================================= | |
IF @database_name IS NULL | |
BEGIN | |
IF @granularity= 'd' /* Database Scope */ | |
BEGIN | |
SELECT | |
T.[server], T.[database_name], | |
T.[total_size_mb] AS [db_size_mb], | |
T.[available_space_mb] AS [db_free_mb], | |
T.[used_space_mb] AS [db_used_mb], | |
D.[total_size_mb] AS [data_size_mb], | |
D.[available_space_mb] AS [data_free_mb], | |
D.[used_space_mb] AS [data_used_mb], | |
CEILING(CAST(D.[available_space_mb] AS decimal(10,1)) / D.[total_size_mb]*100) AS [data_free_pct], | |
L.[total_size_mb] AS [log_size_mb], | |
L.[available_space_mb] AS [log_free_mb], | |
L.[used_space_mb] AS [log_used_mb], | |
CEILING(CAST(L.[available_space_mb] AS decimal(10,1)) / L.[total_size_mb]*100) AS [log_free_pct] | |
FROM | |
( | |
SELECT [server], [database_name], | |
SUM([total_size_mb]) AS [total_size_mb], | |
SUM([available_space_mb]) AS [available_space_mb], | |
SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb] | |
FROM #Results | |
GROUP BY [server], [database_name] | |
) AS T | |
INNER JOIN | |
( | |
SELECT [server], | |
[database_name], | |
SUM([total_size_mb]) AS [total_size_mb], | |
SUM([available_space_mb]) AS [available_space_mb], | |
SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb] | |
FROM #Results | |
WHERE #Results.[file_type] = 'Data' | |
GROUP BY [server], [database_name] | |
) AS D ON T.[database_name] = D.[database_name] | |
INNER JOIN | |
( | |
SELECT [server], | |
[database_name], | |
SUM([total_size_mb]) AS [total_size_mb], | |
SUM([available_space_mb]) AS [available_space_mb], | |
SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb] | |
FROM #Results | |
WHERE #Results.[file_type] = 'Log' | |
GROUP BY [server], [database_name] | |
) AS L ON T.[database_name] = L.[database_name] | |
ORDER BY D.[database_name] | |
END | |
ELSE /* File Scope */ | |
BEGIN | |
SELECT [server], | |
[database_name], | |
[file_name], | |
[physical_name], | |
[file_type], | |
[total_size_mb] AS [db_size_mb], | |
[available_space_mb] AS [db_free_mb], | |
CEILING(CAST([available_space_mb] AS DECIMAL(10,1)) / [total_size_mb]*100) AS [free_space_pct], | |
[growth_units], | |
[max_file_size_mb] /* AS [Grow Max Size (Mb)] */ | |
FROM #Results | |
ORDER BY database_name, file_type, [file_name] | |
END | |
END | |
--================================= | |
--RETURN THE RESULTS FOR A DATABASE | |
--If @database_name is provided: | |
--================================= | |
ELSE | |
BEGIN | |
IF @granularity= 'd' /* Database Scope */ | |
BEGIN | |
SELECT | |
T.[server], | |
T.[database_name], | |
T.[total_size_mb] AS [db_size_mb], | |
T.[available_space_mb] AS [db_free_mb], | |
T.[used_space_mb] AS [db_used_mb], | |
D.[total_size_mb] AS [data_size_mb], | |
D.[available_space_mb] AS [data_free_mb], | |
D.[used_space_mb] AS [data_used_mb], | |
CEILING(CAST(D.[available_space_mb] AS DECIMAL(10,1)) / D.[total_size_mb]*100) AS [data_free_pct], | |
L.[total_size_mb] AS [log_size_mb], | |
L.[available_space_mb] AS [log_free_mb], | |
L.[used_space_mb] AS [log_used_mb], | |
CEILING(CAST(L.[available_space_mb] AS DECIMAL(10,1)) / L.[total_size_mb]*100) AS [log_free_pct] | |
FROM | |
( | |
SELECT [server], [database_name], | |
SUM([total_size_mb]) AS [total_size_mb], | |
SUM([available_space_mb]) AS [available_space_mb], | |
SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb] | |
FROM #Results | |
WHERE [database_name] = @database_name | |
GROUP BY [server], [database_name] | |
) AS T | |
INNER JOIN | |
( | |
SELECT [server], [database_name], | |
SUM([total_size_mb]) AS [total_size_mb], | |
SUM([available_space_mb]) AS [available_space_mb], | |
SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb] | |
FROM #Results | |
WHERE #Results.[file_type] = 'Data' | |
AND [database_name] = @database_name | |
GROUP BY [server], [database_name] | |
) AS D ON T.[database_name] = D.[database_name] | |
INNER JOIN | |
( | |
SELECT [server], [database_name], | |
SUM([total_size_mb]) AS [total_size_mb], | |
SUM([available_space_mb]) AS [available_space_mb], | |
SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb] | |
FROM #Results | |
WHERE #Results.[file_type] = 'Log' | |
AND [database_name] = @database_name | |
GROUP BY [server], [database_name] | |
) AS L ON T.[database_name] = L.[database_name] | |
ORDER BY D.[database_name] | |
END | |
ELSE /* File Scope */ | |
BEGIN | |
SELECT [server], | |
[database_name], | |
[file_name], | |
[physical_name], | |
[file_type], | |
[total_size_mb] AS [db_size_mb], | |
[available_space_mb] AS [db_free_mb], | |
CEILING(CAST([available_space_mb] AS DECIMAL(10,1)) / [total_size_mb]*100) AS [free_space_pct], | |
[growth_units], | |
[max_file_size_mb] /* AS [Grow Max Size (Mb)] */ | |
FROM #Results | |
WHERE [database_name] = @database_name | |
ORDER BY file_type, [file_name] | |
END | |
END | |
GO |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment