MySQL GTID Replication
들어가며 데이터베이스를 운영하다 보면 복제(Replication)라는 단어를 자주 접하게 된다. 단순히 "백업용 아닌가?"라고 생각할 수 있지만, 실제로 복제는 다양한 목적으로 사용된다. 복제를 사용하는 이유: 고가용성(High Availability) : Source 서버 장애 시 Replica로 페일오버 읽기 부하 분산 : 쓰기는 S...
들어가며 데이터베이스를 운영하다 보면 복제(Replication)라는 단어를 자주 접하게 된다. 단순히 "백업용 아닌가?"라고 생각할 수 있지만, 실제로 복제는 다양한 목적으로 사용된다. 복제를 사용하는 이유: 고가용성(High Availability) : Source 서버 장애 시 Replica로 페일오버 읽기 부하 분산 : 쓰기는 S...
들어가며 MySQL에서 BOOLEAN 타입을 사용해본 적이 있는가? 아마 대부분의 개발자가 "있다"라고 답할 것이다. 하지만 MySQL에는 진짜 BOOLEAN 타입이 존재하지 않는다. CREATE TABLE test ( is_active BOOLEAN ); SHOW CREATE TABLE test; -- 결과: CREATE TABLE `...
들어가며 이 글은 Real MySQL 8.0의 13장 파티션을 읽고 정리한 내용이다. 파티션의 개념, 내부 동작 원리, 주의사항, 그리고 각 파티션 종류별 특징을 다룬다. 파티션은 하나의 테이블을 물리적으로 여러 개로 분리하여 저장하는 기법 이다. 논리적으로는 하나의 테이블이지만, 내부적으로는 파티션 키를 기준으로 데이터가 나뉘어 ...
들어가며 서비스를 운영하다 보면 테이블에 데이터가 수천만, 수억 건씩 쌓이게 된다. 이렇게 테이블이 커지면 쿼리 성능이 떨어지고, 오래된 데이터를 정리하는 것도 쉽지 않다. 이런 상황에서 고려해볼 수 있는 것이 파티셔닝 이다. 파티셔닝이란 파티셔닝은 하나의 큰 테이블을 작은 단위로 나누어 관리하는 기법 이다. 논리적으로는 하나의 테이블이지만,...
들어가며 Real MySQL 8.0을 공부하면서 MySQL의 공간 검색 기능을 살펴봤다. ST_Distance_Sphere, ST_Contains, 공간 인덱스 등 MySQL도 나름 위치 기반 검색을 지원하지만, 찾아보니 위치 기반 서비스에 특화된 도구들 이 따로 있었다. 바로 Redis Geo 와 PostGIS 다. 여러 블로그와 벤치마크를 찾아...
들어가며 MySQL에서 쿼리를 작성했다면, 그 성능을 정확하게 측정하는 것이 중요하다. 하지만 쿼리 성능 테스트는 생각보다 많은 변수가 존재한다. 운영체제 캐시, 버퍼 풀, 네트워크 등 다양한 요소가 쿼리 실행 시간에 영향을 미치기 때문이다. 이번 글에서는 쿼리 성능 테스트 시 고려해야 할 요소 들을 살펴보고, MySQL의 강력한 확장 검색 기능인...
들어가며 MySQL에서 JOIN UPDATE는 다른 테이블의 데이터를 참조하여 특정 테이블을 업데이트할 때 사용하는 강력한 기능이다. 그런데 여기에 GROUP BY를 사용하려 하면 갑자기 문법 오류가 발생한다. 왜 그럴까? 이번 글에서는 JOIN UPDATE에서 GROUP BY가 왜 안 되는지, 그리고 이 문제를 해결하기 위한 파생 테이블 , STR...
들어가며 SELECT 문은 데이터를 조회하는 데 사용되지만, 실제 서비스에서는 데이터의 생성, 수정, 삭제가 빈번하게 발생한다. INSERT, UPDATE, DELETE는 데이터를 변경하는 DML(Data Manipulation Language)로, 잘못 사용하면 성능 저하는 물론 데이터 무결성에도 심각한 영향을 줄 수 있다. 이번 글에서는 Real...
들어가며 Real MySQL 8.0 2권 11장에서는 쿼리 작성과 최적화에 대해 다룬다. 이 글에서는 그중 11.4.10 서브쿼리, 11.4.11 CTE(Common Table Expression), 11.4.13 잠금을 사용하는 SELECT를 정리한다. 서브쿼리는 MySQL 5.5 이하에서 성능이 좋지 않아 기피 대상이었지만, MySQL 8.0에...
들어가며 Real MySQL 8.0 11.4.13 "잠금을 사용하는 SELECT" 를 읽다 보면, 선착순 쿠폰 발급 시 동시에 1000개의 요청이 들어오는 상황을 예로 들며 NOWAIT과 SKIP LOCKED를 설명한다. 책에서는 간단히 언급하고 넘어가지만, 실제로 이 문제를 해결하려면 상당히 깊은 이해가 필요하다. 특히 배달, 커머스 기업 등에서...