데이터베이스 개발자 Tip & 강좌

SQLER의 개발자들이 만들어가는 데이터베이스 사용자 Tip & 강좌 게시판입니다. SQL서버, Oracle, MySQL 등 여러 클라우드/오픈소스 기반 데이터베이스 개발 및 운영 관련 팁과 쿼리 노하우를 이곳에서 가장 먼저 접하실 수 있습니다. 많은 도움 되시길 바랍니다.

VLF

이스트럭(강동운) 2014.04.11 09:55 Views : 8076

안녕하세요. 이스트럭(강동운) 입니다.


간만에 팁하나 쓰는군요 ^^;;


전에 VLF 관련해서 답글 달았던 적이 있는데.. 그 내용 그~~대로 올려드립니다.


감사합니다 ^^



질문글: http://www.sqler.com/bSQLQA/597442


LDF는 순환구조 형태로 되어있습니다.

아래 나오는 네모를 VLF라고 생각하시면 됩니다.


□: 트랜잭션 로그 백업이 되었거나 혹은 아직 사용되지 않은 것(DBCC LOGINFO 에서 Status 가 0인 값)

■: 현재 사용중이거 혹은 이미 사용했으나 트랜잭션 로그 백업이 되지 않은 것(DBCC LOGINFO 에서 Status 가 2인 값)


기본

■□□□□□□□□□□□□


DML이 많이 발생하면... 이렇게 로그가 많이 사용이 되겠지요~!

■■■■■■■□□□□□□



여기서 트랜잭션 로그 백업을 수행하면.. 아래처럼 현재 사용중인 VLF는 제외하고.. 백업이 됩니다.

□□□□□□■□□□□□□


하지만... 대량의 IO가 유발되고... 트랜잭션 로그 백업 시점에도 트랜잭션이 진행중이라면.. 아래 처럼 될 수도 있습니다 ^^

이 내용은 하단에 링크 참고하세요~

□□■■■■■□□□□□□



다시 원래대로 돌아와서..

DML이 발생하면서..  끝까지 다 쓰게 되면.. 순환해서 앞에서 부터 다시 이용하게 됩니다.

□□□□□□■■■■■■■


이런 식입니다.

■■■□□□■■■■■■■


이러다... 만약 전부 다 쓰게 되면.. 아래 처럼되겠죠~!

■■■■■■■■■■■■■


이 상태에선..더이상 공간이 없기 때문에.. 추가 사이즈를 할당하게 됩니다.

이런 식이 되겠죠. 추가되는 공간은.. 비율 혹은 MB로 설정하도록 되어있습니다.

■■■■■■■■■■■■■□□□


이러다보면... LDF 사이즈가 계속 증가가 되고... VLF 갯수역시 늘어나게 됩니다.

LDF 사이즈를 늘어나지 않게 하려면..반드시 트랜잭션 로그 백업을 수행해야 합니다.


이렇게 증가할때마다 VLF 갯수가 늘어나게 되고... 몇천개씩 되는 문제가 발생하게 됩니다.



보통.. 데이터베이스 잘 모르시는 분들이 풀백업만 수행하면 된다고 생각하는데.. 이는 정말 잘못된 생각입니다.

그러다... LDF 사이즈가 너무 커져서.. 줄이는 방법을 검색하게 되죠.


LDF 사이즈를.. 초반에 8GB로 설정하게 되면.. 16개의 VLF가 생성되게 됩니다.(각각 500MB 정도 되겠네요)


트랜잭션 백업직후 로그자르기 실패 확인

http://www.sqler.com/129852


이 글을 보시면.. Status가 2개 이상인 경우 .. DBA에게 알람을 주도록 권고 하고 있습니다.

개당 VLF 사이즈가 넉넉하기 때문에(500MB) .. 백업하면.. 반드시 한개만 사용하고 있다고 표시가 되야합니다.


하지만... 오랜 시간동안 처리되는 쿼리같은 경우.. 그리고 대량의 IO가 발생한다면... 여러 VLF에 걸쳐서 처리가 될 수 있습니다.

이 녀석 같은 경우는... 아직 트랜잭션이 끝나지 않았기 때문에.. 

트랜잭션 로그 백업을 수행하더라도 백업이 되질 않고 모두 2로 남아버리게 됩니다.



마지막으로.. (물론 정확한건 테스트를 해봐야 알겠지만..) MSDN에서 말하는 백업복원이 느려지는 경우는..

아무래도 VLF가 몇천개이상씩 있게 되면...  백업을 하게되는 경우.. 여러 개의 VLF를 읽으면서 백업이 되야하기 때문에 그런걸로 생각이 되네요~~ 복원 역시 마찬가지일테고요 ^^;


현재 38GB도 엄청 큰 사이즈로 판단됩니다. 보통 5G ~ 8G 정도로 설정해서 사용하시길 권장드립니다.

대량의 DML이 발생된다면.. 사이즈가 커질 수 있습니다.


참고가 되셨으면 좋겠네요~

감사합니다. ^^


민석님 답변!!(감사합니다 ^^)

한 2만개 넘으니 서버시작이 안되더군요 2시간쯤 있으면 올라와요 이럴때는 잘 올리고 나서 짜르던지 mdf 만 이용해 어태치 하는방법이 있어요 2만개 넘으니 로그 라이트가 느려 전체 쿼리가 느려지고 복제시 로그 읽기가 느려져 전체 복제가 엄청 느려질수 있어요 기타 로그파일을 이용한 오퍼레이션이 느려질수 있습니다





No. Subject Author Date Views
1613 extended events 를 이용한 wait 분석 minsouk 2014.07.25 6264
1612 동일기준에대해 복수컬럼 PIVOT 사용하기 열이 2014.06.27 21319
1611 SELECT / UPDATE / INSERT 쿼리를 쉽게 만들자... [1] Hisory 2014.05.12 10870
1610 ssms 자동 언어 변경이 되면, 이렇게 설정하세요 minsouk 2014.04.27 9566
1609 [QUERY] 그룹 번호 만들기 이스트럭(강동운) 2014.04.11 8680
1608 [QUERY]연승을 구해보자! [2] 이스트럭(강동운) 2014.04.11 9462
» VLF 이스트럭(강동운) 2014.04.11 8076
1606 extended events 용 excel view 공개 버전 minsouk 2014.04.07 6400
1605 [TIP] 한 라인에서 여러 테이블 삭제 하기. [3] 엘리엘1 2014.01.03 8616
1604 GhostRecord(인덱스에서 행 삭제시발생) jevida(강성욱) 2013.11.25 13560
1603 프로시저, 함수, 트리거 생성 정보 보기. jevida(강성욱) 2013.11.25 10632
1602 힙테이블에서 행을 삭제하면어떻게 처리 될까? [1] jevida(강성욱) 2013.11.25 9379
1601 SSMS의 디자이너에서 테이블 수정 시 발생하는 영향 [1] jevida(강성욱) 2013.11.25 10526
1600 SQL Server를 활용한 Perfmon 로그 저장 [1] jevida(강성욱) 2013.11.21 14751
1599 VLF 환경과 성능 jevida(강성욱) 2013.11.21 10060
1598 Block 모니터링 jevida(강성욱) 2013.11.21 8073
1597 추적파일을 테이블로 로드하기. jevida(강성욱) 2013.11.21 8895
1596 LOGON 트리거 jevida(강성욱) 2013.11.18 6562
1595 DeadLock(교착상태) 모니터 하기 [2] jevida(강성욱) 2013.11.18 11351
1594 Tempdb 경합(동시성 강화) jevida(강성욱) 2013.11.18 7566





XE Login