본문 바로가기

IT Professional/Microsoft SQL Server

MS SQL 서버의 Transaction 로그 관리

 대용량 DBMS 를 사용하는 경우, 일부 사용자들은 Log 수준을 Simple 로 정의하므로서 I/O 성능적인 향상이 있을 것이라는 추측을 하게되고 실제로 그렇게 하는 경우가 있다.

 다른 제품들과는 다르게 SQL Server, RDBMS 의 로그는 단순한 로그가 아니라 Data 의 일부로 취급 받는다. 시스템의 상태 정도를 나타내는 로그의 수준이 아니라, 비정상적인 방법으로 Transcation-log 를 읽거나 줄이는 경우 정상적인 시작이 되지 않는 것도 이 때문이다.

 

 대용량 DBMS 를 사용하는 경우, 일부 사용자들은 Log  수준을 Simple 로 정의하므로서 I/O 성능적인 향상이 있을 것이라는 추측을 하게되고 실제로 그렇게 하는 경우가 있다.

 하지만 이는 잘못된 생각이다. Full 모드의 경우 알다 시피 Data 의 일관성과 정합성을 확보하기 위하여 진행중인 Transaction 은 Log 에 기록된다. 그리고 지속적으로 모든 Transaction 이 기록되면서 그 Log 의 크기도 증가하게 되는 것이다.

Simple Mode 에는 별로 다른 것이 없다. Simple 이니 아예 로그를 기록하지 않는다고 생각할 수도 있지만, Transaction  이 커질 경우, 그리고 DB 엔진의 비 정상적인 종료가 발생할 경우 전체적인 Data 의 정합성을 유지하기 위하여 모든 Transaction  은 Log  를 거치게 된다.

 다른 점은 Transaction 이 완료되면 해당 로그를 삭제해 버린다는 것...

 단순한 I/O 입장에서 보면 전혀 도움이 되지 않는다.

 

 재난시 그리고 업무상 매우 중요하게 쓰일 수 있는 Transaction 로그다. 왠만하면 포기하지 말아야 한다.

 

 하지만, Log 의 크기가 무지막지해서, 다른 말로 Transaction 의 발생이 무지막지 해서 로그의 크기가 감당하기 힘들고, 그 백업도 힘들다면, Transaction 의 백업과 복원을 포기할 수 밖에 없고, 그 Risk 도 감당할 수 있다면, 어쩔 수 없는 선택이기도 하다.

 

 하지만, 한번 물어 보자.

 현재의 한국의 IT  환경에서 백업이 불가능할 정도의 IO  가 발생하는 주요 DB 를 SQL 서버로 관리하는 환경이 얼마나 될지... 그리고, 그 정도의 Transaction 을 감당하는 시스템 이라면 백업의 IO 는 충분히 버틸 수 있다.

 

 재난시 그리고 업무상 매우 중요하게 쓰일 수 있는 Transaction  로그다. 왠만하면 포기하지 말아야 한다.

 

백업... 압축에 대한 고민

 

SQL 2005 까지만 해도 Standard  와 Enterprise 의 Feature 에 대한 차이는 확연했었다.

 특히 고가용성의 cluster 로 구축을 위해서는 Enterprise 의 기능이 필히 필요했기에, 대용량 또는 고가용성의 환경이 필요한 경우 Standard 는 고려 대상이 아니었다. 일부 기업에서는 SQL 은 백신 관리 서버 등의 패키지가 아니면 당연히 Enterprise 로 사용하는 것이 당연시 되었었다.

 

 솔직히 Enterprise 기능에 목숨을 거는 경우는 거의 없다. 말이 좋아 Partitioning 이지, 그걸 쓰는 개발자가 얼마나 되나... MSCS 가 Enterprise Edition 의 가장 핵심 요인이었다.

 

 SQL Server 2012 로 넘어오면서, 그 분위기가 많아 바뀌었다. 먼저 가격이 바뀌었다. Enterprise 의 가격이 Core 단위로 바뀌면서 기존의 Enterprise Agreement 의 서버 단위로 이용하던 고객들이 core 에 따라 적게는 5배 많게는 30여배의 가격으로만 구입할 수 있도록 바뀌었다.

 

 그리고 Standard 의 feature 가 급격하게 증가했다. CPU Slot 단위의 라이센스, 메모리 무제한, MSCS 지원.... 특별히 Enterprise 를 사용할 필요가 없어진 것이다. 그래서, 왠만하면 이젠 기업에서 Enterprise 의 도입이 줄기 시작했다....

 

백업 압축 기능

 그런데... 잘 모르고 있는 Feature 중에 하나가 백업 압축 기능이다. Enterprise 에서만 지원하는 이 기능을 사용할 경우, 압축의 공간이 주는 것은 물론, 백업 시간이 획기적으로 줄어드는 기능이 있다. ( 이 이야기는 천천히 하자.)

 

 특히 1일 50회 이상 주기적인 백업을 받아야 하는 대용량 DB 의 Transaction log 의 백업을 위해서는 그 기능이 매우 필수적인데.... Standard 에디션에는 그 기능이 없다는 것이 문제다. 그렇다고 40배 이상의 가격이 되는 Enterprise 를 도입할 수도 없는 상황....

 여기서 Dell 의 Lite Speed 를 고려해 보자. SQL 2000 부터 압축을 지원했으니, 버젼에 대한 제한은 없다. SQL Enterprise 1개 코어 가격보다 높지 않으니, 도입해서 쓰기에도 문제가 없으 듯 하다.

 이전에는 상상도 할 수 없는 Feature 가 Standard Edition 에 탑재되고 있는 지금, Enterprise 의 일부 기능을 사용하고 싶다고 해서, 무조건 비싼 enterprise 를 도입하는 것은 답이 아니다. 특히 Lite Speed 간은 Tool 이 제공하는 기능이 있는 경우에는...

 

 실제 압축 효울은 기존 압축 공간 대비 25% 이하의 공간을 차지하게 된다. 이는 단순한 공간의 절약 뿐만 아니라, 압축 시간도 획기적으로 줄여지게 되고, 이로 인한 서비스 품질의 향상까지  도모할 수 있다. 또한 이 Tool 에는 Log Explorer 가 탑재되는데... 그 Tool 의 이야기는 다음에 계속 하도록 하자.