Zabbix的監控出現告警,具體的告警資訊如下:“SQL Instance MSSQLSERVER: Could not allocate a new page”和“D::Disk space is low(used > 80%)"

第一個告警是Zabbix template for Microsoft SQL Server模板發出的告警,查看其具體資訊,可以看到如下具體資訊:
Msg 1101 or 1105 was logged in the Windows Application Event Log. These errors indicate that SQL server could not allocate a new page for database because of insufficient disk space in filegroup. Create the necessary space by dropping objects in the filegroup, adding additional files to the filegroup, or setting Autogrowth on for existing files in the filegroup.
簡單一點說,就是因為服務器由于磁盤空間不足或資料庫檔案限制了最大大小,導致SQL Server無法為資料庫分配新的頁面,請檢查磁盤空間是否足夠或給資料庫檔案設定自動增長,
但是其不能明確的提示是那個資料庫出現問題,雖然結合磁盤空間告警,我們已經能夠猜測是tempdb出現了問題,另外,SQL Server Alert也發出了告警郵件,具體資訊如下,這個告警就能明確是那個資料庫出現問題了:
DATE/TIME: 2020/11/11 9:35:34
DESCRIPTION: Could not allocate space for object '<temporary system object: 1225067284549599232>' in database 'tempdb' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
其實綜合上面資訊,就是因為一些問題SQL,在短時間內消耗了資料庫tempdb大量的空間,導致tempdb資料庫大小短時間內迅猛增長,我們這臺服務器的tempdb資料庫(單獨放置在D盤),雖然設定了自動增長,但是我們設定了tempdb單個資料檔案的MaxSize為10GB, 其總大小為80GB,但是這個仍然不能滿足問題SQL的需求,不能分配新的頁面,所以出現了上面告警,
USE [tempdb]GOSELECT @@SERVERNAME AS [ServerName]
,[name] AS [LogicalName] ,[type_desc] AS [TypeDesc] ,[physical_name] AS [PhysicalName],CONVERT(NUMERIC(10,2),ROUND([size]/128.,2)) AS [Size(MB)]
,CONVERT(NUMERIC(10,2),ROUND(FILEPROPERTY([name],'SpaceUsed')/128.,2)) AS [Used(MB)]
,CONVERT(NUMERIC(10,2),ROUND(([size]-FILEPROPERTY([name],'SpaceUsed'))/128.,2)) AS [Unused(MB)]
,CASE WHEN is_percent_growth = 1
THEN RTRIM(CAST(Growth AS CHAR(10))) + '%'
ELSE RTRIM(CAST(Growth*8.0/1024 AS CHAR(18))) + 'M'
END AS [Growth(MB)]
,CASE WHEN max_size = -1 THEN 'Unlimit'
ELSE CAST(CAST(max_size * CONVERT(FLOAT, 8)/1024/1024 AS NUMERIC(10,2)) AS VARCHAR(32))
END AS [MaxSize(GB)]
,is_media_read_only AS [IsReadOnlyMedia] ,is_read_only AS [IsReadOnly] ,CAST(CASE state
WHEN 6 THEN 1
ELSE 0END AS BIT) AS [IsOffline]
,is_sparse AS [IsSparse]FROM [sys].[database_files]ORDER BY name;

另外,我們通過zabbix監控的磁盤D的空間消耗情況如下,可以看到其在短時間內被消耗殆盡,

雖然Zabbix比較擅長監控,但是它無法定位問題SQL,這個需要通過作業或擴展事件監控來捕獲問題SQL陳述句,這篇不打算展開介紹,后面單獨一篇講述如何捕獲這些問題SQL陳述句!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/210540.html
標籤:其他
