資料庫記錄檔空間

Microsoft.SQLServer.2012.Monitoring.DBLogFileSpaceMonitor (UnitMonitor)

監視記錄檔及主控記錄檔之媒體上的可用空間 (以百分比表示)。

Knowledge Base article:

摘要

監視記錄檔及裝載此記錄檔之媒體的可用空間。只有至少為其中一個檔案啟用自動成長之後,裝載此記錄檔的媒體上之可用空間,才會納入可用空間。

原因

所有記錄檔的可用空間不足,導致狀況不佳的狀態。造成可用空間不足的可能原因為:

請使用下列連結檢視效能資料: DB 檔案記錄檔可用空間效能資料

此監視器會依據每個檔案的組態,彙總資料庫內每個記錄檔的可用空間:

無自動成長

若是沒有自動成長的檔案,可用空間將會是檔案初始大小與已使用空間兩者之間的差值。

啟用自動成長

除了檔案大小與已使用空間兩者間的差值之外,啟用自動成長的檔案,其可用空間將會是大小上限與檔案大小的差值加上磁碟上剩餘的可用空間 (取兩者的最小值)。

具有自動成長的資料庫檔案可用空間不足,可能表示檔案已接近主控邏輯磁碟機的限制。對於啟用自動成長且有大小上限的檔案而言,可用空間不足也可能表示檔案已接近為檔案所指定的大小上限。

可用空間的計算也會考量以下情況: 如果檔案成長的幅度大於磁碟上剩餘的可用空間時,以及大小上限與目前檔案大小之間的差距小於成長幅度時,檔案也可能無法成長。在上述情況下,因為已經無法再繼續成長了,所以磁碟上剩餘的可用空間將不會納入可用空間。

解決方式

您可以使用以下任一方法來解決此問題:

請參閱《SQL Server 線上叢書》: 檔案與檔案群組架構

可覆寫的參數

名稱

描述

預設值

已啟用

啟用或停用該工作流程。

產生警示

定義工作流程是否會產生警示。

間隔 (秒)

執行工作流程的週期性時間間隔 (秒)。

900

臨界值下限

此監視器的臨界值下限。

10

同步處理時間

使用 24 小時制指定的同步處理時間。將會忽略。

 

逾時 (秒)

指定允許工作流程在關閉且標示為失敗之前執行的時間。

300

臨界值上限

此監視器的臨界值上限 (分鐘)。

20

Element properties:

TargetMicrosoft.SQLServer.2012.DBLogFile
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateFalse
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2012.DBLogFileSizeMonitorType
RemotableTrue
AccessibilityPublic
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2012.Monitoring.DBLogFileSpaceMonitor" Accessibility="Public" Enabled="true" Target="SQL2012Core!Microsoft.SQLServer.2012.DBLogFile" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2012.DBLogFileSizeMonitorType" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<OperationalStates>
<OperationalState ID="UnderThreshold1" MonitorTypeStateID="UnderThreshold1" HealthState="Error"/>
<OperationalState ID="OverThreshold1UnderThreshold2" MonitorTypeStateID="OverThreshold1UnderThreshold2" HealthState="Warning"/>
<OperationalState ID="OverThreshold2" MonitorTypeStateID="OverThreshold2" HealthState="Success"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<ConnectionString>$Target/Host/Host/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ConnectionString$</ConnectionString>
<ServerName>$Target/Host/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ServerName>
<SqlInstanceName>$Target/Host/Host/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</SqlInstanceName>
<ObjectName>SQL DB Log File</ObjectName>
<CounterName>DB Log File Free Space (%)</CounterName>
<InstanceName/>
<DatabaseName>$Target/Host/Property[Type="SQL!Microsoft.SQLServer.Database"]/DatabaseName$</DatabaseName>
<DBFileId>$Target/Property[Type="SQL!Microsoft.SQLServer.DBFile"]/FileID$</DBFileId>
<Value>$Data/Property[@Name='FreeSpacePercent']$</Value>
<Threshold1>10</Threshold1>
<Threshold2>20</Threshold2>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>