배치작업이란
SQL Server 엔진에서 정해진 시간에, 정해진 작업을 수행하도록 하는 작업을 말합니다.
즉, 배치작업이 실패했다고 해서 이 후 계획된 시간에 수행이 안되는 것이 아니라 다시 수행되고 실패하는 식으로
계속해서 정해진 시간에 수행되는 작업을 의미합니다.
예를들면, 아래와 같은 배치작업 주로 이루어져 있겠죠?
1. 매일 정해진 시간 백업을 진행한다.
2. 매일 정해진 시간에 데이터 동기화 작업을 진행한다.
3. 매일 정해진 시간에 특정 일자보다 오래된 데이터는 삭제한다.
그런데, 이러한 작업들은 아무래도 일반적인 쿼리인 1건 조회, 1건 적재와 같은 비용보다는 크게 됩니다.
배치작업을 만들 때 고려할 점 3가지
중간 단계에서 실패하더라도, 이 후에 재처리가 가능하도록
작업 실패로 인해 제대로 정리되지 못한 쓰레기 값이 남아있다면, 이 값을 지우고 다시 수행되도록 해줍니다.
실패하는 원인을 고쳐 이 후 정상수행될 때, 실패함으로써 반영되지 않은 데이터들도 반영될 수 있도록
만약 하루한번 수행되는 배치작업이 전날 1일치 데이터를 분석서버에 동기화 한다고 합니다.
작업 실패 했을 때 1일치 데이터는 동기화가 되지 않습니다.
실패하는 원인을 고쳐 다음날 정상적으로 수행될 때 2일치의 데이터가 정상적으로 동기화 될 수 있도록 해줍니다.
가능하면 부하가 없는 시간으로 스케줄 잡기
사용자가 몰리는 오후시간에 데이터를 많이 읽거나 쓰는 배치작업이 수행된다면 서버에는 부하가 더 몰리게 됩니다.
가능하면 서버가 한산한 시간대에 배치작업을 수행해 주는 것이 좋습니다.
배치작업 여러개를 동시에 돌리게 된다면?
서버는 자원을 더 많이 사용하게 될 것입니다.
따라서 굳이 꼭 이 시간에 해야하는 이유가 아니라면 배치작업들을 동시에 실행할 이유가 없습니다.
오히려 하나의 시간에 합치는 것이 리스크를 키우는 것이 되겠죠?
( 사실 요즘에는 뭐... 서버 스펙들이 좋아서 그럴일이 거의 없습니다만.. )
DB 는 일시적인 지연에도 민감하게 반응하기 때문에 가능하면 배치작업들을 분산하여 처리하는 것이 좋습니다.
'Database > DBA 의 개인생각' 카테고리의 다른 글
[DBA] SQL Server 이전작업을 진행할 때 전/후 체크리스트 (0) | 2020.07.10 |
---|---|
[DBA] 로그인 계정을 삭제할 때 체크해야 할 리스트 (0) | 2020.07.06 |
[DBA] Order By 없는 쿼리의 위험성 (0) | 2020.02.03 |
[DBA] 삭제 조건에 적절한 인덱스가 없는 경우 단위처리 및 RowLock 으로 삭제하는 방법 (0) | 2019.12.26 |
[DBA] 데이터 변경시에는 PK 를 기준으로 진행 (0) | 2019.12.24 |