본문 바로가기

DB/mssql

[mssql] 튜닝 #1 - insert , delete 로 인한 duration



sql profiler 를 돌려보면 read / write row는 별로 없지만 duration 이 2000 ms 이상 씩 잡히는 쿼리들이 있습니다. 아무리 index 와 나누기 실행을 해도 쿼리 실행 시간이 줄어들지 않습니다.

이유는 db 의 복구 모델의 구분에서 찾을 수 있는데요.

insert, delete 시에는 로그를 생성하는데 전체, 대량로그 모델의 경우 로그 생성까지 실행 시간에 포함됩니다. 이런 작업들이 빈번한 테이블만 따로 단순 복구 모델의 db로 모아서 처리하면 insert,delete 로 인한 비용이 발생하지 않습니다. 단순 모델의 db에 적당한 테이블의 성격을 정리하면

1. 빈번하게 select 되는 퍼포먼스를 요하는 테이블
2. 원시 데이터가 존재하고 가공된 정보를 모으는 테이블

정도가 되겠습니다.

장애 발생시 단순 모델은 복구시점이 최종 백업 시점이 되므로 복구시 정보 손실이 발생합니다. 이럴 경우는 원시 데이터에서 다시 밀어 넣는 방식으로 손실 부분을 복구 해야합니다.

실제로 insert, delete 의 duration 만 없어도 쿼리 duration 은 50% 이상 향상 됩니다.

복구 모델의 변경에 있어서 기존의 db의 변경보다는 신규 db를 생성하고 테이블을 옮기는 걸 권장합니다. 주기적인 백업 정책과의 연계성이 있고 다른 성격의 테이블의 복구까지 영향을 줄 수 있으니까요. 용도에 맞게 잘 나눠서 최상의 퍼포먼스를 내는 것이 튜닝의 기본이 아닐까 합니다.