데이터 대량 변경 작업 시 체크해야 할 리스트
1. 서비스 영향도 확인
1. 시간이 얼마나 소요될지에 대해 파악되면 이에대한 영향도를 개발팀에 확인 요청합니다.
2. 데이터 프리징이 가능한지 확인
1. TAB LOCK 으로 대량 변경 작업 진행 시 더 빠르게 처리할 수 있습니다.
이는 ROW Lock 과 TAB Lock 에서 트랜잭션 로그가 쌓이는 방식에 대해 이해하고 있어야 합니다.
2. 이 때는 점검을 걸어야 하고, 서비스가 불가능 합니다.
3. 대량 DELETE 작업 시 INSERT 작업이 더 효율적인지 비교
1. ROW 별로 DELETE 작업을 진행하는 것보다 DELETE 대상이 아닌 데이터를 새로운 테이블에 INSERT 하는 작업이 효율적일 수 있습니다.
프리징이 되었다는 가정에서 새로운 테이블로 INSERT 할 때는 원본 테이블에 Lock 을 잡지 않아도 됩니다.
DELETE 원본 테이블 vs INSERT INTO 신규 WITH(TABLOCK) SELECT 원본 테이블 WITH(NOLOCK)
2. DELETE 시 빈 페이지가 생기게 되는데, INSERT 로 새로 구성하는 경우 빈 페이지가 없기 때문에 부분범위 처리시 읽어야 하는 페이지를 줄일 수 있습니다.
3. 단, 새로운 테이블로 구성하게 되면 메타정보가 변경되면서 기존 쿼리의 실행계획이 변경될 수 있습니다.
4. 대량 UPDATE 작업 시 INSERT 작업이 더 효율적인지 비교
위와 비슷한 이유입니다.
5. 단위처리 할 수 있는지 확인
1. 현재 처리되고 있는 진행상황을 알 수 있어야 합니다.
한번에 처리 도중 예측한 시간보다 작업시간이 훨씬 오래 걸려 취소해야 하는 경우 Rollback 에 걸리는 시간또한 예측할 수 없습니다.
6. 변경 시 원본 데이터를 보관
1. 작업이 예측과 다르게 된 경우, 해당 이유에 대해서 추적할 수 있어야 합니다.
7. 작업으로 쌓이는 트랜잭션 로그 크기 확인
1. 트랜잭션 로그가 많이 생성되는 경우 로그파일 크기를 키우는 것 또한 비용입니다.
로그가 생성이 많이 될 것으로 보이면 크기를 미리 키워두는 것도 좋은 방법입니다.
'Database > DBA 의 개인생각' 카테고리의 다른 글
[DBA] foreign key(외래키) 단점과 위험성에 대해 (0) | 2019.12.15 |
---|---|
[DBA] SP 검수 시 체크해야 할 리스트 (1) | 2019.12.09 |
[DBA] 인덱스 삭제 시 체크해야 할 리스트 (0) | 2019.12.08 |
[DBA] 테이블 삭제 시 체크해야 할 리스트 (0) | 2019.12.08 |
[DBA] 컬럼 추가 시 체크해야 할 리스트 (0) | 2019.12.08 |