log truncate interruption – open transaction

By | Y2016Y2016-9M-D

http://yoonsy.tistory.com/26

Case:

DB Type: MS SQL 2012

DB 복구모델: 전체

하루는 DB log size 가 크게 늘어나 디스크 용량을 압박하고 있다.

확인해보니 log 파일 사이즈가  크게 늘어나 있고, Transaction Log backup 은 정상적으로 이루어지고 있었지만 Log 가 줄지 않고 있다.

이를 처리하기 위해 DBCC SHRINKFILE 문으로 처리하려고 하나.. 응? 파일이 줄어들지 않는다?!

위에 언급해 둔 블로그의 내용을 참조해 보면..

장 시간 동작하고 있는 Open Transaction 인해 File Shrink 동작이 방해 받고 있다.

현재 동작하고 있는 Open Transaction 을 확인하려면 다음의 문을 수행 해 본다.

select name,state,state_desc,log_reuse_wait,log_reuse_wait_desc
from sys.databases with (NOLOCK)
where database_id=DB_ID(‘BBLEARN’);

dbcc opentran;

SELECT tl.resource_type, tl.request_type, tl.request_status, tl.request_owner_id, sp.waittime, t.text AS blocked_query, t2.text AS blocking_query
FROM
sys.dm_tran_locks tl
INNER JOIN sys.sysprocesses sp ON tl.request_session_id = sp.spid
INNER JOIN sys.sysprocesses sp2 ON sp.blocked = sp2.spid
CROSS APPLY sys.dm_exec_sql_text (sp.sql_handle) AS t
CROSS APPLY sys.dm_exec_sql_text (sp2.sql_handle) AS t2
WHERE request_status != ‘GRANT’;

–kill 559 — 해당 프로세스 강제 종료

— exec sp_lock; — Lock 도 확인해 보고,

–dbcc inputbuffer(301); — Lock 을 일으키는 쿼리도 확인 해 보자

확인 후, 해당 Transaction 을 일으키는 Application Logic 을 수정한다.

1,241 total views, 6 views today

댓글 남기기