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

- Πώς φτιάχνουμε Logon Trigger για να ελέγχουμε τους χρήστες που επιτρέπουμε να συνδεθούν σε Oracle Database - 13 Ιανουάριος 2025
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε Oracle Database - 1 Νοέμβριος 2024
Πολύ συχνά θα χρειαστεί να κάνουμε μια εκτίμηση του χώρου που θα χρειαστεί μελλοντικά μια βάση δεδομένων στον 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)