엄청나게 많은 로우(레코드)를 가진 테이블에 갑자기 인덱스를 생성할때 주의할점이 있을까요? 0 3 631

by 쿼리냠냠 [DB 기타] [2021.03.15 13:53:56]


데이터가 1억개 그이상의 데이터를 가지고있는 테이블에 인덱스를 설정하려고 가정할때 우려되는 문제나 어떻게 설정하는게 제일 바람직하나요? 

제가 교과서적으로 알고있는 내용은
조건절이나 order by에 자주 등장하는 컬럼을 인덱스로 설정하거나 인덱스를 테이블당 1~2개정도만 설정하는 것이 좋고 데이터 조회시 10~15%정도 쿼리결과가 나오는 것이 좋다.. 뭐 이런 얕은 지식만 가지고있습니다..

 

Q.1) 만약에 실무에서 엄청난 데이터를 가진 테이블을 인덱스 설정할때 주의깊게 보는 부분은 무엇이 있을까요?

 

by 우리집아찌 [2021.03.18 08:44:57]

일단 1억 넘으면 파티셔닝 테이블 고려 해야합니다다파티셔닝 테이블은 글로벌/로컬 인덱스로 구성할수 있으니 상황에 맞게 인덱스를 생성해여합니다.  

파티션 로컬인덱스는 해당 파티션에서만 동작하니 별문제(파티션을 잘 나눠놓으면) 없지만 글로벌 인데스 경우는 파티션 단위나 전체 테이블에 적용되므로 쓰지 않거나 적은갯수가 더 효율적일겁니다(글로벌 인덱스은 파티션 변경에 영향을 많이 받습니다) 물론 효율적이다는 것이지 어쩔수 없이 증가되는 경우도 많습니다.


by 우리집아찌 [2021.03.18 08:48:31]

아 대충 읽고 답해서 추가합니다

운영중인 일억건의 태이블에 인덱스는 바로 추가 하시면 안됩니다

다운타임을 충분히 주고 생성하거나  

다운타임 시간이 적다면 미리 만들어놓고 테이블 rename 하셔야합니다


by 쿼리냠냠 [2021.03.21 16:09:38]

감사합니다. 혹시 또 궁금한게 있습니다.

답변 달아주시면 감사합니다. 

제가 인프라관련된 책을 봤습니다. 
뭐 내용이 과부하에 대한 내용이였는데

보통 애플리케이션은 client -server-db server 로 되어있다고하더구요. 

보통의 부하는 서버와 디비서버에서 부하가되고 병목현상이 일어나는 지점이라고하더라구요. 

서버는 부하가되면 스케일 인이나 아웃이 편하지만 
디비서버는 병목현상이일어나면 어렵더라고하더라구요. 


근데 문득 궁금한게
클라이언트입장에서 서버가 먹통이 되었는데 서버의 부하문제인지? 디비서버의부하문제인지 어떻게 판별할수있나요?
그냥 단순히 제가 AWS 클라우드에접속하여 EC2(서버)나 RDS(디비서버)에 들어가서 커넥션수나 cpu를 확인하는거 말고 별도에 다른게 확인하는 방법이 있을까요?

만약에 제가 sql문을 잘못짜서 이부분에서 병목현상이 일어나고있으니 이부분을 수정해야겠다 이런 디테일을 전 공부해보고싶거든요. 
 


Q.1) 혹시 디비서버의 경우 부하가 일어나는지 판단하는 방법이있나요? 

Q.2) 어떤쿼리가 느린지 알수있는 방법 

 

혹시 어떤책이나 관련 내용을 참고할만한 자료가있으면 
알려주시면 제가 직접 공부하겠습니다 ㅠㅠ

감사합니다. 좋은 하루 보내세요!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입