[MySQL] 버퍼풀과 innodb 버퍼풀 인스턴스 설정
·
DB
버퍼 풀(Buffer Pool)버퍼 풀은 주 메모리(RAM) 안에 있는 영역으로, InnoDB가 접근되는 테이블 데이터와 인덱스 데이터를 캐시(저장)하는 곳이다. 버퍼 풀 덕분에 자주 쓰는 데이터는 메모리에서 바로 접근할 수 있어 처리 속도가 빨라진다. 전용 서버에서는 보통 물리 메모리의 최대 80%까지 버퍼 풀에 할당하는 경우도 많다.대량 읽기(read)를 효율적으로 처리하기 위해, 버퍼 풀은 페이지(page) 단위로 나뉘며, 한 페이지에는 여러 행(row)이 들어갈 수 있다. 캐시 관리를 효율적으로 하기 위해 버퍼 풀은 페이지들의 연결 리스트(linked list)로 구현되어 있고, 거의 사용되지 않는 데이터는 LRU(Least Recently Used) 알고리즘의 변형으로 캐시에서 밀려나게 된다.버..
MySQL의 Using filesort와 Using temporary
·
DB
MySQL의 filesortMySQL 8.0 버전 기반으로 공식문서에는“filesort is the algorithm MySQL uses to sort results when it cannot use an index to retrieve the rows in sorted order.”MySQL 8.0 Reference Manual, 8.2.1.14 How MySQL Optimizes ORDER BY즉, 인덱스를 통해 정렬된 순서로 가져올 수 없을 때 MySQL이 사용하는 정렬 알고리즘을 의미합니다.“파일”이라는 단어 때문에 디스크에 쓰는 정렬이라고 오해하기 쉽지만, filesort는 ‘정렬 알고리즘’이며, 반드시 파일(디스크)를 쓰는 것은 아닙니다. MySQL의 정렬 방식MySQL이 조회한 데이터를 정..
[이음] 프로젝트에 쿼리의 실행계획을 분석하며 최적화 해보기
·
DB
게시글의 댓글 조회 기존의 쿼리는SELECT c.* from comments c WHERE c.post_id = :postId and c.is_deleted = false ORDER BY c.created_at asc 입니다. 댓글을 조회할 게시글의 id 값으로 한번 필터링한 후 삭제 여부가 false인 것들을 조회해 생성일자 오름차순으로 조회했습니다. explain으로 실행계획을 분석했을 때 개선할 수 있는 점을 발견했습니다.각각의 칼럼별로 간단히 결과를 하나하나 분석해보겠습니다.id select_type table partitions type possible_keys key key_len ref rows filtered Extra id: 쿼리 내부의 SELECT 단위 번호.select_t..
[DB] B+Tree 란? 그리고 자바 구현
·
DB
B+Tree데이터베이스의 인덱스에 자주 사용된다.B-Tree 계열의 Balanced Tree 종류 중 하나이다.B+Tree는 데이터베이스 인덱스와 파일 시스템 사용에 더 적합할 수 있도록 만들어졌다.구조이름처럼 트리 구조 - 바이너리 트리랑 개념적으로는 비슷함key 값으로 정렬되어 있다.자식 노드가 여러개다.각각의 노드가 메모리가 아닌 디스크에 저장되어 있다.데이터는 leaf노드에만 있다. 디스크에서도 메모리에서처럼 포인터 개념을 사용할 수 있다.각각의 노드에 sibling으로 가는 포인터가 존재한다.⇒ Range 쿼리하기에 좋다.→ 예시: SELECT * FROM table WHERE age >= 30 AND age B+ Tree 읽기key 3인 데이터 찾기binary search를 통해 자식 노드 ..
[DB] VACUUM vs GC ?! 데이터베이스 최적화의 첫 걸음
·
DB
DB를 직접 만들어보면서 내부적으로 optimizing을 어떻게 하는지 궁금했습니다.레코드를 삭제하고 삭제된 데이터는 어떤 흐름으로 처리되는지가 궁금했고VACUUM과 GC의 개념에 대해 알게되었습니다.VACUUM 은 파일을 재작성하거나 페이지를 재배치하여 내부의 쓸모없는 공간(삭제 처리된 레코드 등)을 물리적으로 회수(축소)하는 작업을 말한다. 반면, GC(가비지 콜렉션)은 DB 내에서 더 이상 참조되지 않는(예시: 과거 버전 트랜잭션) 레코드나 페이지를 논리적으로 해제하는 과정을 의미한다.(특히, 멀티 버전 방식 DB에서 오래된 버전은 아무도 안 쓰면 제거 가능이라는 식의 로직을 ‘가비지 컬렉션’이라 부를 때가 많다.)즉, 둘 다 ‘사용하지 않는 공간을 정리한다”는 취지는 같지만, 구체적 매커니즘과 시..