Sql-Server-2016

每天監控數據庫增長的腳本

  • May 13, 2020

我對數據庫相當陌生,我有一個特定的要求來編寫作業/儲存過程來監控數據庫的增長。

我們目前正在使用MS SQL Server 2016 Standard Editionwith Always-ON HA

我已經mail server在數據庫上設置了。

將作業的輸對外連結接到郵件會更有效。

有一個儲存過程叫做SpaceUsedRating

https://github.com/aleksey-vitsko/Database-Administrator-Tools

當您在exec SpaceUsedRating沒有任何參數的情況下執行它時,它將顯示給定數據庫中的空間使用統計資訊

SpaceUsedRating

也可以使用參數 @command = ’log’ 呼叫此過程

使用參數呼叫時,該 SP 會將結果記錄到數據庫@command = 'log'的日誌表中(需要創建數據庫和表)DatabaseGrowthLogger``ServerLogsDB

這是創建記錄表的腳本

使用 [伺服器日誌數據庫]
去

/****** 對象:表 [dbo].[DatabaseGrowthLogger] 腳本日期:5/12/2020 12:11:14 PM ******/
設置 ANSI_NULLS ON
去

設置 QUOTED_IDENTIFIER ON
去

創建表 [dbo].[DatabaseGrowthLogger](
[ID] [int] IDENTITY(1,1) 非空,
[Server_Name] [varchar](50) NULL,
[Database_Name] [varchar](250) 非空,
[Date_Full] [smalldatetime] 非空,
[Day_Of_Week] [tinyint] NULL,
[Log_Date] [日期] NULL,
[Log_Hour] [tinyint] NULL,
[Table_Count] [int] NULL,
[Total_Rows] [bigint] NULL,
[Database_Data_MB] [十進制](16, 2) NULL,
[Database_Index_MB] [十進制](16, 2) NULL,
[Database_Unused_MB] [十進制](16, 2) NULL,
[Database_Allocated_MB] [int] NULL,
[Database_File_Size_MB] [int] NULL,
[Percent_Used] [十進制](5, 2) NULL,
[Hours_Diff] [smallint] NULL,
[Database_Allocated_Delta] [int] NULL,
[Percent_Used_Delta] [十進制](5, 2) NULL,
主鍵集群
(
[數據庫名稱] ASC,
[Date_Full] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) 開 [主要]
去

ALTER TABLE [dbo].[DatabaseGrowthLogger] 為 [Hours_Diff] 添加預設值 ((0))
去

ALTER TABLE [dbo].[DatabaseGrowthLogger] 為 [Database_Allocated_Delta] 添加預設值 ((0))
去

ALTER TABLE [dbo].[DatabaseGrowthLogger] 添加預設值 ((0)) FOR [Percent_Used_Delta]
去

創建ServerLogsDB..DatabaseGrowthLogger數據庫和表並將儲存過程部署SpaceUsedRating到要監控其增長的所有數據庫之後,您需要安排一個每天執行一次的作業,例如在 23:58 UTC,並在 t-sql 下執行:

exec Database1..SpaceUsedRating @command = 'log' 
exec Database2..SpaceUsedRating @command = 'log'
...
-- create SP in whatever number of databases you need to monitor growth

這將記錄您的數據庫的每日增長,當您檢查ServerLogsDB..DatabaseGrowthLogger表時,它看起來類似於以下內容:

數據和指數增長率

查看日誌記錄表,您將了解數據庫中的數據隨時間增長了多少

最後,您可以向作業添加一個步驟,該步驟將從中讀取最後一行並使用過程ServerLogsDB..DatabaseGrowthLogger通過電子郵件發送sp_send_dbmail

引用自:https://dba.stackexchange.com/questions/266982