web-dev-qa-db-fra.com

Requête pour calculer la croissance de la base de données

J'ai la requête suivante qui produise de bonnes informations à partir de collecteurs de données MDW concernant l'utilisation de l'espace de base de données. Je me demande avec les colonnes suivantes (taille DB, espace réservé, espace non utilisé, espace non alloué, date de collecte) Comment puis-je calculer correctement la tendance de la croissance de la base de données? J'essaie de garder si un dB se rétrécit ou pousse en considération pour que je ne puisse pas simplement prendre "taille max" et partir de cela. Voici la requête complète jusqu'à présent ...

DECLARE @ServerName VARCHAR(MAX);
DECLARE @SelectedDatabaseName VARCHAR(MAX);
DECLARE @snapshot_id INT;

SELECT TOP 1
        @snapshot_id = snapshot_id
FROM    ( SELECT DISTINCT TOP 100
                    d.snapshot_id
          FROM      snapshots.disk_usage d ,
                    core.snapshots ss
--WHERE ss.instance_name = @ServerName
--AND ss.snapshot_id = d.snapshot_id
ORDER BY            d.snapshot_id DESC
        ) AS q
ORDER BY snapshot_id ASC;

SELECT  database_name ,
        ss.instance_name ,
        CONVERT (DATETIME, SWITCHOFFSET(CAST (d.collection_time AS DATETIMEOFFSET),
                                        '+00:00')) AS collection_time ,
        d.snapshot_id ,
        ( ( CONVERT(DEC(15, 2), d.dbsize) + CONVERT(DEC(15, 2), d.logsize) )
          * 8192 / 1048576.0 ) AS 'database_size_mb' ,
        'reserved_mb' = ( d.reservedpages * 8192 / 1048576.0 ) ,
        'data_mb' = CONVERT(DEC(15, 2), d.pages) * 8192 / 1048576.0 ,
        'index_mb' = ( d.usedpages - d.pages ) * 8192 / 1048576.0 ,
        'unused_mb' = ( ( CONVERT(DEC(15, 2), d.reservedpages)
                          - CONVERT(DEC(15, 2), d.usedpages) ) * 8192
                        / 1048576.0 ) ,
        'unallocated_space_mb' = ( CASE WHEN d.dbsize >= d.reservedpages
                                        THEN ( CONVERT (DEC(15, 2), d.dbsize)
                                               - CONVERT (DEC(15, 2), d.reservedpages) )
                                             * 8192 / 1048576.0
                                        ELSE 0
                                   END )
FROM    snapshots.disk_usage d ,
        core.snapshots ss
WHERE   --database_name =@SelectedDatabaseName
/*AND*/ d.snapshot_id >= @snapshot_id
--AND ss.instance_name = @ServerName
        AND d.snapshot_id = ss.snapshot_id
ORDER BY d.database_name ASC ,
        collection_time;

Espérons-le à la fin de cela, je pourrai voir en un an à partir de maintenant combien de fois chaque instance, base de données et serveur se développe par an.

4
choloboy7

Méthode 1 : vient avec un coût

Vous pouvez utiliser un logiciel tiers qui fera tout pour vous en termes de rassemblement des données et de présenter les rapports de la croissance de la base de données et de prédire la même chose en fonction des données rassemblées comme expliqué ici

Méthode 2 : Créer une table, exécutez la procédure stockée à l'aide du travail de l'agent SQL et planifiée en conséquence pour rassembler les données dans la table créée, puis la questionner sur une période. de temps pour voir ce qui a été collecté et prédit avec tout ce que vous êtes des calculs utiles:

Vous pouvez utiliser ceci comme expliqué ici

Méthode 3 : Peu plus sur le côté manuel mais fonctionne bien, utilise la trace par défaut. Utilisez la trace par défaut pour capturer les événements de croissance sur les données et les journaux de cette base de données, en fonction de la fréquentation ou de la fréquentation du fichier de trace par défaut et ne se déclenche pas:

Méthode 4 Mon préféré personnel et celui que j'ai utilisé:

Cet excellent article du Tchad Miller Planification de la capacité de la base de données qui utilise T-SQL et PowerShell ainsi que des rapports SSRS pour vous donner la croissance de la base de données souhaitée sur une période de temps.

5
KASQLDBA