본문 바로가기

전체 글18

[MariaDB] InnoDB의 DELETE와 단편화, 그리고 파티셔닝 검토 작업중인 프로젝트에서 시간이 지나면서 데이터가 계속 누적되는 테이블을 어떻게 관리할지 고민하게 되었다. 처음에는 일정 기간이 지난 데이터를 활성테이블에서 삭제하고 별도 테이블로 아카이빙하는 방식을 고민하다가 MariaDB의 파티셔닝을 도입하는 것도 방법이 되겠다는 생각을 했다.아카이빙 한 데이터를 삭제하는 방법에 대해 검토하다가, 디스크 단편화와 InnoDB 테이블 최적화 방식에 대해 알게 되었고 알게된 내용과 결론을 도출하면서 배운점을 정리하게 되었다. InnoDB 테이블 단편화와 최적화InnoDB에서 행을 DELETE 할 때, 행들이 즉시 물리적으로 제거되지 않는다. 백그라운드 스레드인 purge 스레드가 인덱스 키와 데이터 행을 삭제하지만, 삭제로 생긴 여유공간(free space)은 OS에 반환되.. 2026. 5. 15.
[클린 아키텍처] 설계원칙과 컴포넌트 원칙 (3~4부) 클린 아키텍처 책으로 스터디를 진행 중인데, 책을 읽고 이해한 내용을 정리하고자 글로 작성하게 되었다. 3부와 4부 SOLID 원칙과 컴포넌트 원칙에 대해 정리해보자. 설계 원칙 (SOLID)SOLID 원칙은 변경에 유연하고, 이해하기 쉽고, 다른 시스템에도 사용될 수 있게 만드는데 목적이 있다.→ 즉, 유지보수가 쉬운 소프트웨어로 만드는데 목적 [SRP - 단일 책임 원칙]“하나의 클래스는 하나의 책임만 갖는다.” 라고 보통 생각하는데 이는 오해이다.정확히는 “변경의 이유가 오직 하나뿐이어야 한다”가 SRP의 의미이다.일반적으로 중복을 제거하기 위해서 동일한 로직을 하나의 메서드로 생성하여 호출하게 소스코드를 작성한다. 만약, 두개의 다른 목적을 가진 Actor(집단)에 의해 같은 메서드가 호출된다면.. 2026. 4. 15.
[MySQL] InnoDB의 Buffer pool과 Redo log (2) 버퍼풀 설정과 Flush 와 백업 저번시간에는 버퍼풀의 구조, 리두로그 동작 방식에 대해 알아보았고 이번에는 플러시 기능과 관련 버퍼풀 관련 설정값에 대해 정리했다.버퍼풀 크기 설정MySQL을 설치하는 서버의 메모리가 8GB 미만이라면 운영체제의 전체 메모리의 50프로만 버퍼풀로 설정하고, 나머지는 MySQL서버와 운영체제가 사용할 공간으로 두는걸 책에서는 권장한다.서버의 메모리가 8GB 이상이라면 50프로부터 조금씩 올려가면서 최적점을 찾는 것을 권장한다고 한다.innodb_buffer_pool_instances 변수를 이용하여 버퍼풀을 여러개로 분리해서 관리할 수 있는데, 버퍼풀의 사이즈가 1GB미만이라면 인스턴스 수는 1개만 생성되고, 1GB 이상이면 8개로 초기화된다.버퍼풀 사이즈가 40GB를 넘는다면 인스턴스 당 5GB 정도가 .. 2026. 3. 16.
[MySQL] InnoDB의 Buffer pool과 Redo log (1) 기본 개념편 InnoDB 버퍼풀이란 디스크에서 읽은 데이터 파일이나 인덱스 정보를 메모리에 캐시해두는 공간이다.적절한 사이즈를 설정하면 캐시 히트율이 높아지고 디스크 I/O가 적어질 확률이 높아지기 때문에 읽기와 쓰기 성능이 좋아진다.aws의 rds를 사용하는 경우 버퍼풀 사이즈(innodb_buffer_pool_size) 가 서버 사양에 맞게 적절히 설정되지만 ec2 인스턴스에 직접 설치해서 사용하는 경우 별도 설정을 하지 않으면 128MB로 할당된다.SHOW VARIABLES LIKE 'innodb_buffer_pool_size';// innodb_buffer_pool_size 134217728 (128MB) 서버 사양에 비해 적절한 사이즈를 설정해주지 않으면 데이터베이스의 버퍼풀에 따른 성능에 대한 이점을 온전.. 2026. 3. 14.