본문 바로가기
반응형

전체 글351

MySQL 인덱스 기초 2023.10.10 복습 리팩토링 시작 디스크 읽기 이번에 인덱스에서 자주 나올 랜덤 I/O와 순차 I/O에 대한 개념을 정리하고 넘어가겠습니다. 하드 디스크 드라이브 (HDD)와 솔리드 스테이트 드라이브(SSD) 컴퓨터에서 CPU나 메모리 같은 주요 장치는 대부분 전자식 장치지만 하드 디스크 드라이브는 기계식 장치다. 그래서 데이터베이스 서버에서는 항상 디스크 장치가 병목이 된다. 이러한 HDD를 대체하기 위해 전자식 저장 매체인 SSD가 많이 출시되고 있다. SSD도 기존 하드디스크 드라이브에서 데이터 저장용 플래터(원판)을 제거하고 그 대신 플래시 메모리를 장착하고 있다. 그래서 원판을 기계적으로 회전시킬 필요가 없으므로 아주 빨리 데이터를 읽고 쓸 수 있다. 플래시 메모리는 전원이 공급되지 않아도.. 2022. 11. 30.
트랜잭션과 잠금 2023.10.9 복습 리팩토링 시작 트랜잭션 트랜잭션은 작업의 완전성을 보장해 준다. 즉, 정합성을 보장하기 위한 기능이다. 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어준다. MyISAM과 MEMORY 스토리지 엔진은 트랜잭션을 지원하지 않는다. 트랜잭션은 하나의 논리적인 작업 셋에 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계 없이 논리적인 작업 셋 자체가 100% 적용되거나(COMMIT을 실행했을 때) 아무것도 적용되지 않아야 (ROLLBACK 또는 트랜잭션을 ROLLBACK 시키는 오류 발생) 함을 보장해 주는 것이다. InnoDB : 트랜잭션 지원, 부분 업데이트 현상 발생 X MyISAM, M.. 2022. 11. 29.
MyISAM 스토리지 엔진 아키텍처 MyISAM 스토리지 엔진 아키텍처 MyISAM 스토리지 엔진의 성능에 영향을 미치는 요소인 키 캐시와 운영체제의 캐시/버퍼에 대해 살펴보자. 키 캐시 InnoDB 버퍼 풀과 비슷한 역할을 하는 것이 MyISAM의 키 캐시다. 하지만 이름 그대로 키 캐시는 인덱스만을 대상으로 작동하며, 또한 인덱스의 디스크 쓰기 작업에 대해서만 부분적으로 버퍼링 역할을 한다. 키 캐시가 얼마나 효율적으로 작동하는지는 다음 수식으로 확인할 수 있다. 키 캐시 히트율 (Hit rate) = 100 - (Key_reads / Key_read_requests * 100) Key_reads는 인덱스를 디스크에서 읽어 들인 횟수를 저장하는 상태 변수이며, Key_read_requests는 키 캐시로부터 인덱스를 읽은 횟수를 저장하.. 2022. 11. 27.
InnoDB 스토리지 아키텍처 2023.10.10 복습 리팩토링 시작 InnoDB 스토리지 아키텍처 InnoDB는 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반의 잠금을 제공하며, 그 때문에 높은 동시성 처리가 가능하고 안정적이며 성능이 뛰어나다. 이제 InnoDB 스토리지 엔진의 주요 특징들과 함께 아키텍처를 살펴보자. 프라이머리 키에 의한 클러스터링 InnoDB의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링 되어 저장된다. 즉 프라이머리 키 값의 순서대로 디스크에 저장된다는 뜻이며, 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다. 프라이머리 키가 클러스터링 인덱스이기 때문에 프라이머리 키를 이용한 레인지 스캔은 상당히 빨리 처리될 수 있다. 결.. 2022. 11. 26.
MySQL 엔진 아키텍처 2023.10.9 복습 리팩토링 시작 Real MySQL을 읽기 시작했는데, 이에 관한 공부 기록을 남겨보려고 합니다. 4장 아키텍처파트의 MySQL 엔진 아키텍처부터 시작하겠습니다. MySQL 엔진 아키텍처 MySQL 전체 구조 이미지 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있다. 이 둘을 모두 합쳐서 MySQL 또는 MySQL 서버라고 부른다. MySQL 엔진 MySQL엔진은 커넥션 핸들러, SQL 인터페이스, SQL 파서, SQL 옵티마이저, 캐시와 버퍼로 이루어진다. 표준 SQL인 ANSI SQL 문법을 지원하므로 타 DBMS에서 사용할 수 있다. 커넥션 핸들러를 사용해 접속 및 쿼리 요청을 처리하고 옵티마이저로 쿼리를 최적화한다. 스토리지 엔진 MySQL 엔진은 요.. 2022. 11. 25.
SLF4J, Logback 개념 이번에는 맨날 단순히 사용하기만 한 SLF4J와 Logback 개념을 정리해보려고한다. SLF4J SLF4J란 The Simple Logging Facade for Java의 약어다. 쉽게 말하면 SLF4J 자바 진영의 로깅 프레임워크 인터페이스이며 개발자가 배포 시 원하는 로깅 프레임워크를 연결할 수 있도록 도와준다. 즉 다양한 로깅 프레임워크 구현체들 (java.util.logging, logback 및 reload4j)을 쉽게 갈아끼워서 사용할 수 있게 도와준다. 그럼 이제 공식 문서에서 소개하는 SLF4J 내용에 대해 정리해보겠다. 레거시 로깅 API 사용 시 SLF4J 사용 만약 프로젝트에서 사용하는 로깅 프레임워크가 SLF4J 이외의 로깅 API에 의존한다고 생각해보자. 기존의 로깅 프레임워크.. 2022. 10. 10.
반응형