Πώς βρίσκουμε την αύξηση του μεγέθους μίας βάσης δεδομένων μέσα στον χρόνο σε SQL Server

- Πώς να γυρίσουμε μία Oracle Database πίσω στον χρόνο με χρήση restore point σε περιβάλλον Data Guard - 28 Απρίλιος 2025
- Πώς μπορούμε να αυξήσουμε την απόδοση στο target Replicat του Oracle GoldenGate με παραλληλία - 19 Μάρτιος 2025
- Πώς φτιάχνουμε χρήστες σε βάσεις δεδομένων που ανήκουν σε Always On Availability Group του SQL Server - 10 Φεβρουάριος 2025
Πολύ συχνά θα χρειαστεί να κάνουμε μια εκτίμηση του χώρου που θα χρειαστεί μελλοντικά μια βάση δεδομένων στον SQL Server. Για να γίνει αυτό χρειάζεται να γνωρίζουμε τον ρυθμό αύξησης του χώρο που χρησιμοποιείται από την βάση δεδομένων.
Που θα βρούμε την πληροφορία
Ότι χρειαζόμαστε υπάρχει στη συστημική βάση msdb και πιο συγκεκριμένα στον πίνακα backupset. Στον πίνακα υπάρχει το πεδίο backup_size που περιέχει το μέγεθος της βάσης και το compressed_backup_size που είναι το μέγεθος που compressed backup που πάρθηκε.
Η πληροφορία αυτή κρατιέται κάθε φορά που παίρνουμε backup μία βάση. Από default η πληροφορία στην msdb δεν σβήνεται αλλά κρατιέται για πάντα. Για να σβήστει ή τρέχουμε κάποιο maintenance plan με cleanup task ή την procedure msdb.dbo.sp_delete_backuphistory.
Πως λειτουργεί
Με το παρακάτω query μπορούμε να έχουμε το μέγεθος της βάσης κάθε φορά που η βάση είχε παρθεί backup. Έτσι μπορούμε να κάνουμε την εκτίμηση μας μέσα στον χρόνο.
*Βγάζοντας το σχόλιο από το πεδίο and msdb.dbo.backupset.database_name = ‘db_test’ μπορούμε να επιλέξουμε συγκεκριμένη μόνο βάση:
SELECT CONVERT(CHAR(100), SERVERPROPERTY('Servername')) as Server_Name, msdb.dbo.backupset.database_name, cast((msdb.dbo.backupset.backup_size/1024/1024) as int) as size_in_MB, cast((msdb.dbo.backupset.backup_size/1024/1024/1024) as int) as size_in_GB, DATEPART(year,[backup_start_date]) as Year, DATEPART(month,[backup_start_date]) as Month, DATEPART(DAY,[backup_start_date]) as Day, msdb.dbo.backupset.backup_start_date FROM msdb.dbo.backupmediafamily INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id WHERE 1=1 --and (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) between GETDATE()-359 and GETDATE()-365) and msdb.dbo.backupset.type ='D' --and msdb.dbo.backupset.database_name = 'db_test' ORDER BY msdb.dbo.backupset.database_name, msdb.dbo.backupset.backup_finish_date desc

Πως θα μπορούμε να δούμε το μέγεθος της βάσης πριν έναν χρόνο
Αν βγάλουμε από σχόλιο τον παρακάτω κώδικα στο where statement μπορούμε να δούμε μόνο τις εγγραφές για τα backups που πάρθηκαν στη βδομάδα πριν έναν ολόκληρο χρόνο:
and (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) between GETDATE()-359 and GETDATE()-365)