dimanche 24 décembre 2006

Informations sur la taille des fichiers d'une base de données

Bonjour à tous !

Je viens aujourd'hui traiter d'un sujet que bon nombre de DBA ont à affronter, et ne disposent que rarement des informations le concernant : je veux parler de l'espace restant sur les différents fichiers avant le désastreux et non moins célèbre "Auto-Growth" !

Voici donc quelques commandes très utiles que vous pourrez essayer sans risques...

1 - sp_helpdb :
La première procédure stockée à utiliser dès que l'on recherche des informations sur la taille des différentes bases de données.
Si l'on spécifie en argument le nom d'une base de données, on obtient les informations découpées par fichier... Bref, un sur ensemble de la procédure sp_helpfile !

2 - sp_helpfile :
Là encore, une des procédures stockées très utilisées. Si cette procédure ne permet pas d'obtenir des informations sur le taux d'utilisation des fichiers, elle permet de connaître d'un seul coup d'oeil la structure fichier de la base de données et la taille de chacun.

3 - sp_spaceused :
Une jolie procédure stockée qui permet de connaître les informations de taille de la base de données courante...
A noter qu'il est possible de préciser le nom d'un objet de la base de données pour obtenir des informations sur la taille occupée.
Cette procédure stockée peut s'avérer très utile lors d'un audit afin de repérer les objets volumineux et, le cas échéant, coûteux en ressource disque.

4 - DBCC SHOWFILESTATS :
Une commande non documentée de SQL Server... Et pourtant tellement importante !
En effet, il s'agit de la seule commande permettant d'obtenir le taux d'utilisation des fichiers de données d'une base... Sans recourrir aux tables système bien entendu ;)
Une information cependant : les informations délivrées par cette commande ont pour unité un "extent"... Dans la plupart des cas un extent est de 64 Ko... Alors à vos calculettes !

5 - DBCC SQLPERF(LOGSPACE) :
Si DBCC SHOWFILESTATS permet d'afficher le taux de remplissage des fichiers de données d'une base, DBCC SQLPERF(LOGSPACE) fournit cette information pour les journaux de transactions de toutes les bases de données... Et en Mo s'il vous plaît !
Bref, encore une commande très utile pour savoir si le journal de transactions va bientôt exploser ;)

Voilà donc pour quelques commandes à utiliser sans modération, qu'il s'agisse de SQL Server 2000 ou 2005 ! Et oui, la firme de Redmond a pour une fois choisi de rester compatible... Pour notre plus grand bonheur :D

2 commentaires:

grégory a dit…

Bonjour,
Je cherche a utiliser la procédure sp_spaceused.
En l excutant a partir de sql server, on peut voir les infos
suivantes: db_name, db_size...
mais aussi : reserved, unused...

ce que je cherche a faire c est d'executer cette procedure a partir de Excel, ce que j ai fait, mais la requete ne me fournit que les informations db_name, db_size et unolacted space, alors que jai également besoin des infis reserved...

Si vous avez une idée de comment lui dire d afficher ses infos contactez moi.

merci :D

Doohan a dit…

Bonjour,

tu peux utiliser les macros VB dans Excel à l'aide de la connectivité ADO. Certes, celà n'est pas très joli, mais c'est efficace.

Voici, par exemple, le code que l'on peut écrire en utilisant les macros VB dans Excel 2003 :

Sub Alim()
Dim rs As ADODB.Recordset
Dim cn As New ADODB.Connection
Dim i As Integer
Dim j As Integer
Dim k As Integer
cn.Open "Provider='sqloledb';Data Source='MonServeur';Initial Catalog='MaBase';Integrated Security='SSPI';"
Set rs = cn.Execute("exec sp_spaceused")
k = 1
Do While Not rs Is Nothing
rs.MoveFirst
For i = 0 To rs.Fields.Count - 1
Range(Chr(65 + i) & k).Select
ActiveCell.FormulaR1C1 = rs.Fields(i).Name
Next
j = 1
Do While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
Range(Chr(65 + i) & (k + j)).Select
ActiveCell.FormulaR1C1 = rs.Fields(i).Value
Next
rs.MoveNext
j = j + 1
Loop
Set rs = rs.NextRecordset
k = k + j + 1
Loop
cn.Close
End Sub