1 votes

Suivre l'évolution de la taille de la base de données

Existe-t-il un moyen de suivre la croissance de la taille de ma base de données dans le temps pour SQL Server 2008 ? Est-ce que je peux voir cela à partir d'un tableau de bord quelque part ou dois-je script une requête pour effectuer cela ?

Gracias

3voto

yrushka Points 600

Je pense que la meilleure façon de suivre la croissance de la taille d'une base de données est de collecter chaque semaine ou aussi souvent que vous le souhaitez leurs tailles et de les insérer dans une table statique d'une autre instance SQL, différente de celle de la base de données surveillée.

Vous pouvez utiliser la requête ci-dessous qui renvoie les tailles des fichiers de données et de journaux en mégaoctets et insère les données dans une autre table tempdb. Au bout d'un mois ou d'un an, vous pourrez vérifier la croissance en analysant la sortie de cette table et même créer un graphique.

CREATE TABLE tempdb..DB_size_growth
  (dbname       NVARCHAR(256), 
   mb_data_file     NUMERIC(12,2), 
   data_file_nr     INT          , 
   mb_log_file      NUMERIC(12,2), 
   log_file_nr  INT)

DECLARE @dbname     AS NVARCHAR(3000) 
DECLARE @exec   AS NVARCHAR(3999) 

DECLARE DB_NAME CURSOR FOR
SELECT name FROM master.dbo.sysdatabases where has_dbaccess(name) = 1
OPEN DB_NAME
FETCH NEXT FROM DB_NAME INTO @dbname

TRUNCATE TABLE tempdb..DB_size_growth

WHILE @@FETCH_STATUS = 0
BEGIN 

SELECT @exec =  'INSERT INTO tempdb..DB_size_growth (dbname, mb_data_file, data_file_nr, mb_log_file, log_file_nr)
SELECT b.name AS dbname
,(SELECT convert(numeric(12,3),convert(numeric(12,2),((sum(a1.size))*8))/1024)
from ' + QUOTENAME(@dbname, '[') + '.dbo.sysfiles as a1 where a1.groupid <> 0 ) as mb_data_file
,(SELECT count(a1.size) from ' + QUOTENAME(@dbname, '[') + '.dbo.sysfiles as a1 where a1.groupid <> 0 ) as data_file_nr
,(SELECT convert(numeric(12,3),convert(numeric(12,2),((sum(a.size))*8))/1024)  
from ' + QUOTENAME(@dbname, '[') + '.dbo.sysfiles as a where a.groupid = 0 ) as mb_log_file
,(SELECT count(a.size) from ' + QUOTENAME(@dbname, '[') + '.dbo.sysfiles as a where a.groupid = 0 ) as log_file_nr
FROM  master.dbo.sysdatabases as b WHERE name = '''+ @dbname +'''
group by b.name'
EXEC (@exec)

FETCH NEXT FROM DB_NAME INTO @dbname
END

CLOSE DB_NAME
DEALLOCATE DB_NAME

select * from tempdb..DB_size_growth

0voto

Nomad Points 471

Les informations contenues dans le tableau de bord sont obtenues en lisant la trace par défaut. Vous pouvez lire la base de données par défaut comme suit aquí

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X