2012 DB のトランザクション ログの空き領域 (\%) の監視
SQL 2012 DB のトランザクション ログの空き領域 (%) モニター
異常な状態になるのは、すべてのログ ファイルで空き領域が不足しているためです。空き領域の不足の原因として、次のことが考えられます。
ファイルの構成設定 (サイズ、最大サイズ、自動拡張など) が不適切である
メディアの空き領域が不十分である
定期的なバックアップが行われていない
ログが切り捨てられていない
ファイルの拡張が期待されるワークロードでこのモニターの "ディスク領域を含める" 設定が FALSE に設定されている。
パフォーマンス データを表示するには、次のリンクを使用します。
データベース パフォーマンス データ
このモニターは、各ファイルの構成に応じて、データベース内の各ログ ファイルで使用可能な領域を集計します。
自動拡張なし
自動拡張のないファイルの場合、空き領域はファイルの初期サイズと使用済み領域の差になります。
自動拡張有効
ファイル サイズと使用済み領域の差に加えて、自動拡張が有効になっているファイルの空き領域は、最大サイズとファイル サイズの差、およびディスクの空き領域のいずれか小さい方になります。
自動拡張が行われるデータベース ログ ファイルの空き容量が少ない場合、ホストしている論理ドライブの制限にファイルが近づいていることを示します。自動拡張が有効で最大サイズが指定されたファイルでは、空き領域が少ない場合、ファイルが指定された最大サイズに近づいていることを示します。
空き領域の計算では、ファイルの拡張量がディスクの残り領域よりも大きい場合にファイルが拡張できない可能性や、最大サイズと現在のファイル サイズの差が拡張領域よりも小さい場合にファイルが拡張できない可能性についても考慮します。これらの状況では、ファイルをこれ以上拡張できないため、ディスクに残っている使用可能な空き領域は空き領域の一部に含まれません。
この問題は、次のいずれかの方法で解決できる場合があります。
自動拡張が無効に設定されている場合は、ログ ファイルの割り当てサイズを増やす
自動拡張が有効に設定されている場合は、ログ ファイルの最大サイズ値を増やす
少なくとも 1 つのファイルで自動拡張を有効にする
拡張領域が制限されている場合は、空き領域の多い別のドライブにログ ファイルを移動する
完全復旧モードと一括ログ復旧モードでログ ファイルの定期バックアップを実行する
ログが切り捨てられていない理由を調べます。
アクティブな実行中のトランザクションが長時間開いている
バックアップ操作が長時間実行されている
レプリケートされたトランザクションが長時間開いている (トランザクション レプリケーション)
ミラーリングがプリンシパル サーバーに遅れている (データベース ミラーリング)
ファイルの拡張が期待されるワークロードでこのモニターの "ディスク領域を含める" 設定を TRUE に設定する。
ワークロードに合うようにこのモニターのしきい値を変更する
また、データベースのログ ファイルの空き領域に問題がない場合は、次の方法をとることもできます。
この特定のデータベースまたはすべてのデータベースについて、このモニターを無効にする
詳細については、SQL Server オンライン ブックの「 ファイルとファイル グループのアーキテクチャ」を参照してください。
名前 | 説明 | 既定値 |
アラートの優先度 | アラートの優先順位を定義します。 | 中 |
アラートの重要度 | アラートの重大度を定義します。 | エラー |
有効 | ワークフローを有効または無効にします。 | いいえ |
アラートを生成する | ワークフローがアラートを生成するかどうかを定義します。 | はい |
間隔 (秒) | ワークフローを実行する定期的な実行間隔 (秒)。 | 900 |
しきい値 | 通知しきい値 | 10 |
タイムアウト (秒) | ワークフローが終了して失敗とマークされるまでの、ワークフローの許容実行時間を指定します。 | 300 |
Target | Microsoft.SQLServer.2012.Database | ||
Parent Monitor | Microsoft.SQLServer.2012.Database.DBSpaceMonitor | ||
Category | PerformanceHealth | ||
Enabled | False | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2012.Database.TransactionLogSpaceFreePercent.MonitorType | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Default |
<UnitMonitor ID="Microsoft.SQLServer.2012.Database.TransactionLogSpaceFreePercentMonitor" Accessibility="Public" Enabled="false" Target="SQL2012Core!Microsoft.SQLServer.2012.Database" ParentMonitorID="Microsoft.SQLServer.2012.Database.DBSpaceMonitor" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2012.Database.TransactionLogSpaceFreePercent.MonitorType" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2012.Database.TransactionLogSpaceFreePercentMonitor.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="SQL!Microsoft.SQLServer.Database"]/DatabaseName$</AlertParameter1>
<AlertParameter2>$Target/Host/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</AlertParameter2>
<AlertParameter3>$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Normal" MonitorTypeStateID="Normal" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
</OperationalStates>
<Configuration>
<IntervalSeconds>900</IntervalSeconds>
<TimeoutSeconds>300</TimeoutSeconds>
<Threshold>10</Threshold>
<ConnectionString>$Target/Host/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/ConnectionString$</ConnectionString>
<ServerName>$Target/Host/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ServerName>
<SqlInstanceName>$Target/Host/Property[Type="SQL!Microsoft.SQLServer.ServerRole"]/InstanceName$</SqlInstanceName>
<ObjectName>$Target/Host/Property[Type="SQL!Microsoft.SQLServer.DBEngine"]/PerformanceCounterObject$:TransactionLog</ObjectName>
<CounterName>Log Free Space (%)</CounterName>
<InstanceName/>
<DatabaseName>$Target/Property[Type="SQL!Microsoft.SQLServer.Database"]/DatabaseName$</DatabaseName>
<Value>$Data/Property[@Name='DBLogFreeSpacePercent']$</Value>
</Configuration>
</UnitMonitor>