Voici quelques requêtes pour vous permettre d’auditer vos fichiers de base de données :
=> Par une requête
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | ------------------------------- -- Nicolas SOUQUET - 26/01/2010 ------------------------------- ;WITH CTE AS ( SELECT name AS nomLogique, physical_name AS nomPhysique, CASE is_percent_growth WHEN 0 THEN CAST(growth * 8 / 1024 AS VARCHAR(8)) + ' MB' ELSE CAST(growth AS VARCHAR(3)) + ' %' END AS accroissement, CAST((size * 8) / CAST(1024 AS NUMERIC(14, 2)) AS NUMERIC(14, 2)) AS tailleFichier_MB, CAST((FILEPROPERTY(name, 'SpaceUsed') * 8) / CAST(1024 AS NUMERIC(14, 2)) AS NUMERIC(14, 2)) AS espaceOccupe FROM sys.database_files ) SELECT nomLogique, nomPhysique, tailleFichier_MB, accroissement, espaceOccupe AS espaceOccupe_MB, tailleFichier_MB - espaceOccupe AS espaceLibre_MB, CAST((CAST(espaceOccupe AS NUMERIC(14, 2)) / tailleFichier_MB) * 100 AS NUMERIC(14, 2)) AS [%occupe], CAST((CAST(tailleFichier_MB - espaceOccupe AS NUMERIC(14, 2)) / tailleFichier_MB) * 100 AS NUMERIC(14, 2)) AS [%libre] FROM CTE |
=> Avec l’instruction DBCC SHOWFILESTATS (non documentée):
Elle donne le nombre d’étendues (extents) occupées et le nombre total d’étendues allouées pour le fichier.
Une étendue étant constituée de 8 pages, et une page faisant 8192 octets, il vous faudra donc multiplier les nombres obtenus par 64Ko.
=> Avec la procédure stockée système sp_spaceused :
Elle retourne deux ensemble de résultats :
- l’espace occupé pour toute la base de données, mais attention seulement l’espace libre dans le fichier de données.
- le nombre de Ko réservés (= taille du fichier), utilisés (colonne data), dédiés aux index et inutilisés.
=> Avec l’instruction DBCC SQLPERF(logspace)
Celle-ci ne procure que la taille totale du fichier du journal des transactions, ainsi que son pourcentage d’occupation.
Bonne gestion d’espace disque
ElSuket.
=>=>=> 12/05/2010 : MAJ : un script pour connaître l’espace occupé par et dans les fichiers, pour toutes les bases de données d’une instance SQL Server :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | ------------------------------- -- 12/05/2010 - Nicolas SOUQUET ------------------------------- SET NOCOUNT ON GO DECLARE @sql varchar(1024) SET @sql = 'SELECT name AS file_logical_name,' + CHAR(13) + CHAR(10) + CHAR(9) + 'physical_name AS file_physical_name,' + CHAR(13) + CHAR(10) + CHAR(9) + 'CASE is_percent_growth' + CHAR(13) + CHAR(10) + CHAR(9) + CHAR(9) + 'WHEN 0 THEN CAST(growth * 8 / 1024 AS varchar(8)) + '''' MB''''' + CHAR(13) + CHAR(10) + CHAR(9) + CHAR(9) + 'ELSE CAST(growth AS varchar(3)) + '''' %''''' + CHAR(13) + CHAR(10) + CHAR(9) + 'END AS file_growth,' + CHAR(13) + CHAR(10) + CHAR(9) + 'CAST((size * 8) / CAST(1024 AS numeric(14, 2)) AS numeric(14, 2)) AS file_size_MB,' + CHAR(13) + CHAR(10) + CHAR(9) + 'CAST((FILEPROPERTY(name, ''''SpaceUsed'''') * 8) / CAST(1024 AS numeric(14, 2)) AS numeric(14, 2)) AS file_used_space_MB' + CHAR(13) + CHAR(10) + 'FROM sys.database_files''' + CHAR(13) + CHAR(10) DECLARE @exec_sql varchar(1024) DECLARE @instance_database_file_space TABLE ( database_name sysname , file_logical_name sysname , file_physical_name nvarchar(260) , file_growth varchar(8) , file_size_MB numeric(14,2) , file_used_space_MB numeric(14,2) , file_free_space_MB numeric(14,2) , file_used_space_percent numeric(5,2) , file_free_space_percent numeric(5,2) ) DECLARE @database_file_space TABLE ( file_logical_name sysname , file_physical_name nvarchar(260) , file_growth varchar(8) , file_size_MB numeric(14,2) , file_used_space_MB numeric(14,2) ) DECLARE db_cur CURSOR LOCAL FAST_FORWARD FOR SELECT name FROM sys.databases WHERE source_database_id IS NULL FOR READ ONLY DECLARE @database_name sysname OPEN db_cur FETCH NEXT FROM db_cur INTO @database_name WHILE @@fetch_status = 0 BEGIN DELETE @database_file_space SET @exec_sql = 'EXEC ' + @database_name + '.dbo.sp_executeSQL N''' + @sql + '' BEGIN TRY INSERT @database_file_space EXEC (@exec_sql) END TRY BEGIN CATCH PRINT @database_name + ' : ' + ERROR_MESSAGE() END CATCH INSERT @instance_database_file_space SELECT @database_name , file_logical_name , file_physical_name , file_growth , file_size_MB , file_used_space_MB , file_size_MB - file_used_space_MB AS file_free_space_MB , CAST((CAST(file_used_space_MB AS numeric(14, 2)) / file_size_MB) * 100 AS numeric(14, 2)) AS file_used_space_percent , CAST((CAST(file_size_MB - file_used_space_MB AS numeric(14, 2)) / file_size_MB) * 100 AS numeric(14, 2)) AS file_free_space_percent FROM @database_file_space FETCH NEXT FROM db_cur INTO @database_name END CLOSE db_cur DEALLOCATE db_cur SELECT * FROM @instance_database_file_space |
Il arrive que la procédure stockée système sp_executeSQL ne soit pas trouvée dans la base de données.
Quand tel est le cas, la liste des bases de données est affichée dans la console de SSMS.