Guest User

Untitled

a guest
Aug 19th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.18 KB | None | 0 0
  1. USE [master]
  2. GO
  3.  
  4. CREATE PROCEDURE [dbo].[sp_sizing] @granularity
  5. varchar(1) = NULL, @database_name sysname = NULL AS
  6.  
  7. /*-------------------------------------------------------------
  8. dbo.sp_sizing Stored Procedure
  9. Created by Tim Ford, www.sqlcruise.com, www.thesqlagentman.com
  10. Use freely but review code before executing.
  11. Code downloaded from internet so execute at your own risk.
  12. -------------------------------------------------------------*/
  13.  
  14. DECLARE @sql_command VARCHAR(5000)
  15.  
  16. CREATE TABLE #Results ([server] NVARCHAR(128), [database_name] NVARCHAR(128), [file_name] NVARCHAR(128), [physical_name] NVARCHAR(260),
  17. [file_type] VARCHAR(4), [total_size_mb] INT, [available_space_mb] INT, [growth_units] VARCHAR(15), [max_file_size_mb] INT)
  18.  
  19. SELECT @sql_command =
  20. 'USE [?] INSERT INTO #Results([server], [database_name], [file_name], [physical_name],
  21. [file_type], [total_size_mb], [available_space_mb],
  22. [growth_units], [max_file_size_mb])
  23. SELECT CONVERT(nvarchar(128), SERVERPROPERTY(''Servername'')), DB_NAME(),
  24. [name] AS [file_name],
  25. physical_name AS [physical_name],
  26. [file_type] =
  27. CASE type
  28. WHEN 0 THEN ''Data'''
  29. +
  30. 'WHEN 1 THEN ''Log'''
  31. +
  32. 'END,
  33. [total_size_mb] =
  34. CASE ceiling([size]/128)
  35. WHEN 0 THEN 1
  36. ELSE ceiling([size]/128)
  37. END,
  38. [available_space_mb] =
  39. CASE ceiling([size]/128)
  40. WHEN 0 THEN (1 - CAST(FILEPROPERTY([name], ''SpaceUsed''' + ') as int) /128)
  41. ELSE (([size]/128) - CAST(FILEPROPERTY([name], ''SpaceUsed''' + ') as int) /128)
  42. END,
  43. [growth_units] =
  44. CASE [is_percent_growth]
  45. WHEN 1 THEN CAST([growth] AS varchar(20)) + ''%'''
  46. +
  47. 'ELSE CAST([growth]/1024*8 AS varchar(20)) + ''Mb'''
  48. +
  49. 'END,
  50. [max_file_size_mb] =
  51. CASE [max_size]
  52. WHEN -1 THEN NULL
  53. WHEN 268435456 THEN NULL
  54. ELSE [max_size]/1024*8
  55. END
  56. FROM sys.database_files WITH (NOLOCK)
  57. ORDER BY [file_type], [file_id]'
  58.  
  59. --Print the command to be issued against all databases
  60. --PRINT @sql_command
  61.  
  62. --========================================
  63. --RUN COMMAND AGAINST EACH DATABASE
  64. --========================================
  65. EXEC sp_MSforeachdb @sql_command
  66.  
  67.  
  68. --=================================
  69. --RETURN THE RESULTS
  70.  
  71. --If @database_name is NULL:
  72. --=================================
  73. IF @database_name IS NULL
  74. BEGIN
  75. IF @granularity= 'd' /* Database Scope */
  76. BEGIN
  77. SELECT
  78. T.[server], T.[database_name],
  79. T.[total_size_mb] AS [db_size_mb],
  80. T.[available_space_mb] AS [db_free_mb],
  81. T.[used_space_mb] AS [db_used_mb],
  82. D.[total_size_mb] AS [data_size_mb],
  83. D.[available_space_mb] AS [data_free_mb],
  84. D.[used_space_mb] AS [data_used_mb],
  85. CEILING(CAST(D.[available_space_mb] AS decimal(10,1)) / D.[total_size_mb]*100) AS [data_free_pct],
  86. L.[total_size_mb] AS [log_size_mb],
  87. L.[available_space_mb] AS [log_free_mb],
  88. L.[used_space_mb] AS [log_used_mb],
  89. CEILING(CAST(L.[available_space_mb] AS decimal(10,1)) / L.[total_size_mb]*100) AS [log_free_pct]
  90. FROM
  91. (
  92. SELECT [server], [database_name],
  93. SUM([total_size_mb]) AS [total_size_mb],
  94. SUM([available_space_mb]) AS [available_space_mb],
  95. SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb]
  96. FROM #Results
  97. GROUP BY [server], [database_name]
  98. ) AS T
  99. INNER JOIN
  100. (
  101. SELECT [server],
  102. [database_name],
  103. SUM([total_size_mb]) AS [total_size_mb],
  104. SUM([available_space_mb]) AS [available_space_mb],
  105. SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb]
  106. FROM #Results
  107. WHERE #Results.[file_type] = 'Data'
  108. GROUP BY [server], [database_name]
  109. ) AS D ON T.[database_name] = D.[database_name]
  110. INNER JOIN
  111. (
  112. SELECT [server],
  113. [database_name],
  114. SUM([total_size_mb]) AS [total_size_mb],
  115. SUM([available_space_mb]) AS [available_space_mb],
  116. SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb]
  117. FROM #Results
  118. WHERE #Results.[file_type] = 'Log'
  119. GROUP BY [server], [database_name]
  120. ) AS L ON T.[database_name] = L.[database_name]
  121. ORDER BY D.[database_name]
  122. END
  123. ELSE /* File Scope */
  124. BEGIN
  125. SELECT [server],
  126. [database_name],
  127. [file_name],
  128. [physical_name],
  129. [file_type],
  130. [total_size_mb] AS [db_size_mb],
  131. [available_space_mb] AS [db_free_mb],
  132. CEILING(CAST([available_space_mb] AS DECIMAL(10,1)) / [total_size_mb]*100) AS [free_space_pct],
  133. [growth_units],
  134. [max_file_size_mb] /* AS [Grow Max Size (Mb)] */
  135. FROM #Results
  136. ORDER BY database_name, file_type, [file_name]
  137. END
  138. END
  139.  
  140. --=================================
  141. --RETURN THE RESULTS FOR A DATABASE
  142.  
  143. --If @database_name is provided:
  144. --=================================
  145. ELSE
  146. BEGIN
  147. IF @granularity= 'd' /* Database Scope */
  148. BEGIN
  149. SELECT
  150. T.[server],
  151. T.[database_name],
  152. T.[total_size_mb] AS [db_size_mb],
  153. T.[available_space_mb] AS [db_free_mb],
  154. T.[used_space_mb] AS [db_used_mb],
  155. D.[total_size_mb] AS [data_size_mb],
  156. D.[available_space_mb] AS [data_free_mb],
  157. D.[used_space_mb] AS [data_used_mb],
  158. CEILING(CAST(D.[available_space_mb] AS DECIMAL(10,1)) / D.[total_size_mb]*100) AS [data_free_pct],
  159. L.[total_size_mb] AS [log_size_mb],
  160. L.[available_space_mb] AS [log_free_mb],
  161. L.[used_space_mb] AS [log_used_mb],
  162. CEILING(CAST(L.[available_space_mb] AS DECIMAL(10,1)) / L.[total_size_mb]*100) AS [log_free_pct]
  163. FROM
  164. (
  165. SELECT [server], [database_name],
  166. SUM([total_size_mb]) AS [total_size_mb],
  167. SUM([available_space_mb]) AS [available_space_mb],
  168. SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb]
  169. FROM #Results
  170. WHERE [database_name] = @database_name
  171. GROUP BY [server], [database_name]
  172. ) AS T
  173. INNER JOIN
  174. (
  175. SELECT [server], [database_name],
  176. SUM([total_size_mb]) AS [total_size_mb],
  177. SUM([available_space_mb]) AS [available_space_mb],
  178. SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb]
  179. FROM #Results
  180. WHERE #Results.[file_type] = 'Data'
  181. AND [database_name] = @database_name
  182. GROUP BY [server], [database_name]
  183. ) AS D ON T.[database_name] = D.[database_name]
  184. INNER JOIN
  185. (
  186. SELECT [server], [database_name],
  187. SUM([total_size_mb]) AS [total_size_mb],
  188. SUM([available_space_mb]) AS [available_space_mb],
  189. SUM([total_size_mb]-[available_space_mb]) AS [used_space_mb]
  190. FROM #Results
  191. WHERE #Results.[file_type] = 'Log'
  192. AND [database_name] = @database_name
  193. GROUP BY [server], [database_name]
  194. ) AS L ON T.[database_name] = L.[database_name]
  195. ORDER BY D.[database_name]
  196. END
  197. ELSE /* File Scope */
  198. BEGIN
  199. SELECT [server],
  200. [database_name],
  201. [file_name],
  202. [physical_name],
  203. [file_type],
  204. [total_size_mb] AS [db_size_mb],
  205. [available_space_mb] AS [db_free_mb],
  206. CEILING(CAST([available_space_mb] AS DECIMAL(10,1)) / [total_size_mb]*100) AS [free_space_pct],
  207. [growth_units],
  208. [max_file_size_mb] /* AS [Grow Max Size (Mb)] */
  209. FROM #Results
  210. WHERE [database_name] = @database_name
  211. ORDER BY file_type, [file_name]
  212. END
  213. END
  214. GO
Add Comment
Please, Sign In to add comment