SQL Server/SQL Server Tip

트랜잭션 로그 여유 공간 모니터링

SungWookKang 2015. 7. 23. 09:29
반응형

트랜잭션 로그 여유 공간 모니터링

 

  • Version : SQL Server 2005, 2008, 2008R2, 2012

 

SQL Server에서 발생하는 트랜잭션은 모두 트랜잭션 로그에 기록된다. 간혹 트랜잭션 로그 공간이 가득 차서 데이터베이스 운영에 문제가 발생하는 경우가 있다.

 

다음 스크립트를 사용하여 주기적으로 트랜잭션 로그 공간을 모니터링 하여 안정적인 운영을 할 수 있도록 하자.

 

SELECT name

, db.log_reuse_wait_desc

, ls.cntr_value AS size_kb

, lu.cntr_value AS used_kb

, CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT)

AS used_percent

, CASE WHEN CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT) > .5 THEN

CASE

/* tempdb special monitoring */

WHEN db.name = 'tempdb'

AND log_reuse_wait_desc NOT IN ('CHECKPOINT', 'NOTHING') THEN 'WARNING'

/* all other databases, monitor foor the 50% fill case */

WHEN db.name <> 'tempdb' THEN 'WARNING'

ELSE 'OK'

END

ELSE 'OK' END

AS log_status

FROM sys.databases db

JOIN sys.dm_os_performance_counters lu

ON db.name = lu.instance_name

JOIN sys.dm_os_performance_counters ls

ON db.name = ls.instance_name

WHERE lu.counter_name LIKE 'Log File(s) Used Size (KB)%'

AND ls.counter_name LIKE 'Log File(s) Size (KB)%'

 

 

현재 스크립트에서는 사용률 50% 한도는 체크하고 있다. 다음 구문에서 사용자 요구사항을 수정하여 사용한다.

CASE WHEN CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT) > .5 THEN

 

 

[참고자료]

http://blogs.msdn.com/b/sqlcat/archive/2009/12/14/monitoring-free-space-in-tempdb-transaction-log.aspx

 

 

2013-12-12 / 강성욱 / http://sqlmvp.kr

 

반응형