✨ 경험·생각·독서

mysql 파티션 연장 이슈

토심 2022. 2. 16. 19:13

디비에 무슨 일이 생겼다면 가장 먼저 확인하러 달려가는 나는

업무 중에 여러 테이블의 파티션 기간이 2021년까지인 것을 확인했고

앞으로 한동안은 추가할 일 없도록 넉넉하게 파티션 기간을 늘리기 위해

한 달 텀으로 기존에 있던 파티션에 새로운 기간을 추가를 하려고 했다.

 

2021 파티션 기간 뒤에 2022 파티션을 연결하는 연장 방식으로.

 

그래서 파티션 추가를 검색하니

주로 파티션이 하나도 없는 퓨어한 테이블에 파티션 추가하는 쿼리가 나왔는데

그 방법은 MAXVALUE 가 있는 테이블에는 적용할 수 없는 쿼리였다.

 

어떻게 할까 고민하다가 MAXVALUE 파티션을 삭제해봤는데  (MAXVALUE 파티션에는  아무 데이터도 없었다.)

삭제가 매우 간단히 되었고, 그 뒤에 연장하니까 가능했다.

 

 

MAXVALUE 가 있는 테이블에 파티션을 추가하는 방법!

1. MAXVALUE 파티션에 아무 데이터가 없다면 MAXVALUE를 잠시 삭제한다.

2. 남은 파티션 뒤로 새로운 파티션을 추가한다.

3. 다시 MAXVALUE를 추가한다.

 

 

 

~ 여기까지는 문제가 없었으나 ~

 

 

 

이게 어느 날부터 디비 insert 속도가 굉장히 느려진 것이다?

왜일까.. 왜일까... 하다가 내가 추가한 파티션의 기간이 문제였다는 사실을 깨달았다.

 

 

내가 추가한 파티션은 파티션 당 1달 의 기간을 가졌는데

기존 파티셔닝은 파티션 당 10일 간격으로 되어있었다.

이 글의 세번째 줄의 행동은 하지 말았어야 한다. 하하

 

 

파티션 기간이 늘어남에 따라 안에 파티션에 Rows가 어마어마하게 증가해서

서비스 시간이 점점 밀리게 되었고,

결국 파티션을 촘촘하게 수정하기로 했다.

 

 

개발 테스트 DB에서 열심히 테스트해보고

테스트 완료 땅땅! 운영에 적용하세요! 처리를 받고

운영에 적용하려 했으나...

 

 

운영 디비에 lock이 걸려서 결국 적용하지 못했다.ㅠㅠ

이미 걷잡을 수 없이 많아진 Rows들..

 

에러 코드가 무시무시하게 떴는데

구글링 했을 때 나와 동일한 에러는 볼 수 없었고

그나마 해석하기에

"니가 날린 쿼리를 디비가 감당하지 못해서 에러 난 거임!"

이런 뜻 이어서...

 

 

결국 기존 디비 네임을 "_OLD"로 바꾸고

파티셔닝을 10일 간격으로 한 "_NEW" 테이블로

스위칭하는 결말을 맞이했다. (ToT)

 

 

그전에 만들어둔 파티션 기간이 있다면

웬만하면 그것을 따르자

그렇게 만든 데는 이유가 있을 것이다..

 

 

 

 

 

 

 


커피 한 잔 후원하기