Database(20)
-
Row가 3억 개인 테이블에 column 추가/삭제하기(Online DDL)
Intro 최근에 RDB 테이블 중 하나에 column을 추가/삭제해야 하는 작업이 있었습니다. 다만, 이 테이블이 user 계정의 audit을 기록하는 테이블이라 row의 개수가 3억 건을 넘었고, 테이블의 크기도 70GB에 달했습니다. 무튼, 이 테이블에 더이상 사용하지 않는 컬럼이 있어서 drop하는 작업이 필요했는데요, 사용중인 MySQL은 DDL을 실행할 때 Table Lock이 걸리기때문에 무턱대고 쿼리를 날리면 안됩니다. 이 컬럼을 drop하는 트랜잭션이 종료될 때 까지 다른 트랜잭션들은 해당 테이블에 Insert/Update/Delete 작업이 불가능하기 때문입니다. 작업에는 2시간 33분가량 걸렸습니다. 이 시간동안 I/O 작업이 불가능해 데이터의 정합성이 깨지게 된다면 회사의 골프채가 ..
2023.11.18 -
AWS -> NCloud로 데이터베이스 옮기기(mysqldump, docker)
Intro AWS 지원이 중단되면서, NCP로 기존에 운영중인 서버를 옮겼습니다. 같은 Ubuntu 22.04 환경으로 설정한 덕분에 도커나 Nginx 설정은 금방 할 수 있었습니다. 하지만 기존 서버의 데이터는 다 날라가고 없었기 때문에 mysqldump를 이용해 기존 서버의 데이터를 그대로 가져와서 덮어쓰기 했습니다. 해당 포스팅은 mysqldump를 이용해 AWS -> NCloud로 이관하는 과정을 다룹니다. 작업은 크게 3단계로 나뉩니다. 1. AWS EC2의 도커 MySQL 컨테이너에 접속하여 dump 파일 생성 2. 생성한 dump 파일을 NCloud 서버로 전송 3. 전송한 dump 파일을 NCloud의 도커 MySQL 컨테이너로 전달 mysqldump란? MySQL의 대표적인 백업 프로그램..
2023.06.18 -
[DB] 파티셔닝(partitioning)
Intro 아래 영상을 보고, 글로 정리해서 포스팅합니다. https://youtu.be/P7LqaEO-nGU 파티셔닝이란? 데이터베이스의 테이블을 목적에 따라 작은 테이블들로 나누는 방식을 말합니다. 크게 수직 파티셔닝과 수평 파티셔닝으로 나뉩니다. 둘을 차례대로 살펴보도록 하겠습니다. 수직 파티셔닝 Column을 기준으로 테이블을 나누는 방식입니다. 아래는 게시글 정보를 저장하고 있는 일반적인 테이블입니다. Table name: Board id 제목 작성자id 생성 일자 조회 수 댓글 수 content 1 호식이 치킨 leehosik 2023-06-04 67 12 ... 2 날씨가 좋네요 niceWeather 2023-06-04 1 0 ... 만약 아래와 같은 게시글 목록을 구성하려면 필요한 데이터는..
2023.06.04 -
[DB] 반정규화(Denormalization)
Intro 지난 포스팅에서 정규화에 대해 알아보았습니다. 정규화는 요약하자면 데이터의 일관성을 지키고 중복을 막기 위해 데이터를 분해하는 과정입니다. 정규화를 거치면 불필요한 데이터를 입력하지 않아도 되므로, 중복 데이터가 제거된다는 장점이 있었습니다. 하지만 테이블을 분해할수록 조회 시 join 연산 수행이 많아지므로 CPU와 메모리를 많이 사용하게 된다는 단점도 존재합니다. 이때, join으로 인한 성능 저하가 예상될 때 반정규화를 적용해볼 수 있습니다. 반정규화란? 정규화된 엔티티, 속성, 관계에 대해 시스템의 성능향상과 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링의 기법으로, 의도적으로 정규화 원칙을 위배하는 행위입니다. 반정규화를 수행하는 이유 정규화에 충실하여 ..
2023.06.04 -
[DB] 정규화(Normalization)란?
정규화란? 정규화는 '이상현상'이 있는 릴레이션을 분해하여 이상현상을 없애는 과정입니다. 릴레이션을 분해하여 중복된 데이터를 줄이고 무결성(Integrity)를 유지하는 것이 정규화의 목표입니다. 정규화를 살펴보기 전에 반드시 짚고 넘어가야 하는 이상현상과 함수 종속성의 개념에 대해 알아보겠습니다. ** 해당 포스팅은 제4,5 정규형은 다루지 않습니다. 이상현상(Anomaly) 이란? 삽입 이상(Insertion Anomaly) : 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상 삭제 이상(Deletion Anomaly) : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상 => 아래의 테이블에서 장미란이라는 학생의 정보를 지울 경우, 강의실 103도 같이 사..
2023.05.28 -
트랜잭션과 격리수준, MVCC
몇 주 전 Real MySQL을 공부하며 정리했던 내용을 팀원들에게 공유한 적 있다. 오늘 들은 스프링 수업에서 이를 다루어서, 노션 페이지에 있는 포스팅을 블로그에 옮긴다. 트랜잭션 트랜잭션은 작업의 완전성을 보장해 준다. 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못 할 경우에는 원 상태로 복구해 작업의 일부만 적용되는 현상(Partial Update)이 발생하지 않게 만들어준다. 잠금과 트랜잭션은 비슷한 개념 같지만, 잠금은 동시성을 제어하는 기능이며 트랜잭션은 데이터 정합성을 보장 트랜잭션은 DBMS의 커넥션과 마찬가지로 최소의 코드에만 적용하는 것이 좋다. 트랜잭션의 범위를 최소화하라! 특히, 네트워크 작업 등 긴 시간이 걸리는 작업은 제외해야 한다. 메일 전송, 파일 전송 등 외부..
2022.11.12