본문 바로가기
기타 개념정리

DB Delete 시 Limit을 걸어야 하는 이유

by wakestand 2021. 6. 2.
반응형

실제 운영하는 서비스에서 대량의 데이터를 사용하는 경우에는

데이터가 쌓이면 쌓일수록 속도도 느려지고

용량도 커져서 부담이 가기 때문에

 

일정 기간이 지난 데이터들은

모두 삭제를 하도록 쿼리를 작성하게 될텐데

 

여기서 중요한 점은 데이터가 너무 많으면

가급적이면 LIMIT을 걸어두어야 한다는 거다

 

데이터가 몇억건이 넘어가는 테이블의 경우에는

자연스럽게 매일 몇백~몇천만건의

ROW가 쌓이는 경우도 많은데

 

한번에 다 지운다고

배치를 작성해서 DELETE를 해버리면

데이터 양 자체가 너무나도 많기 때문에

한참 동안 그거 지우고 있는다고

다른 트랜잭션 처리를 못하게 되는데

이러면 자연스럽게 데드락이 발생하게 된다

 

따라서 해결방법은 지울 항목을 조회한 뒤에

for 문을 돌리면서 해당 항목을 한개씩 delete 쳐주거나

혹은 LIMIT을 사용해서 특정 갯수의 항목만 지우고

다시 반복하는 식으로 지워주면 되는데

 

핵심은 데이터 양이 지나치게 많은 테이블에서

한번에 많은 양을 징우려고 하면 데드락에 걸리기 때문에

해당 현상 방지를 위해 Delete 시 Limit를 사용해야 한다는 거다

반응형

댓글