Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

SQL database groth by backupset sizes

What we want?
To get the databases groth.

We don't have a DMV that save the databases size history, so we can't know it exactly.

We can create a process that get in each day/week/... the current size and save it to a table that we'll create, but if we don't have such a process and we want to know how our databases are encreased, it won't help us.

So, what we can do?
Get the database groth by backupset sizes, it's not exact numbers, but it can help us to analize the databases groth.

; with DbSizeLog as
(
       SELECT
              [database_name] as DatabaseName,
              DATEPART(month,[backup_start_date]) as BackupMonth,
              DATEPART(year,[backup_start_date]) as BackupYear,
              AVG([backup_size]/1024/1024) as BackupSizeMB,
              LAG (AVG([backup_size]/1024/1024), 1, 0)
                     OVER (PARTITION BY [database_name] ORDER BY [database_name], DATEPART(year,[backup_start_date]), DATEPART(month,[backup_start_date]))
                     AS PrevBackupSizeMB
       FROM msdb.dbo.backupset
       WHERE  [type] = 'D'
       --AND         [database_name] = 'UniformStructure_Employers'
       GROUP BY [database_name], DATEPART(year,[backup_start_date]), DATEPART(mm,[backup_start_date])
       --ORDER BY [database_name], DATEPART(year,[backup_start_date]), DATEPART(mm,[backup_start_date])
)

SELECT DatabaseName, BackupYear, BackupMonth,
              cast(BackupSizeMB as decimal(20,2)) as BackupSizeMB,
              cast(PrevBackupSizeMB as decimal(20,2)) as PrevBackupSizeMB,
              cast(((case PrevBackupSizeMB when 0.0 then NULL else (BackupSizeMB - PrevBackupSizeMB) end)) as decimal(20,2)) as GrothMB,
              cast((((case PrevBackupSizeMB when 0.0 then NULL else (BackupSizeMB/PrevBackupSizeMB) end) -1) *100) as decimal(5,2)) as GrothPrecentage
FROM   DbSizeLog
--WHERE BackupYear = 2017
--AND         DatabaseName IN ('DatabaseName', 'AnotherDatabaseName')
ORDER BY DatabaseName, BackupYear, BackupMonth


No comments:

Post a Comment