Zabbix告警:SQL Instance MSSQLSERVER: Could not allocate a new page


Zabbix的監控出現告警,具體的告警信息如下:SQL Instance MSSQLSERVER: Could not allocate a new pageD::Disk space is low(used > 80%)"

 

clip_image001

 

第一個告警是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單個數據文件的MaxSize10GB, 其總大小為80GB,但是這個仍然不能滿足問題SQL的需求,不能分配新的頁面,所以出現了上面告警。 

 

USE [tempdb]
GO
SELECT     @@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 0
                 END AS BIT) AS [IsOffline] 
         ,is_sparse AS [IsSparse]
FROM [sys].[database_files]
ORDER BY name;

 

image

 

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

 

clip_image003

 

雖然Zabbix比較擅長監控,但是它無法定位問題SQL,這個需要通過作業或擴展事件監控來捕獲問題SQL語句。這篇不打算展開介紹,后面單獨一篇講述如何捕獲這些問題SQL語句!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM