Study
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 - 메모리 할당과 회수 전략Study/JVM 밑바닥까지 파헤치기 2025. 3. 27. 22:27
JVM이 제공하는 자동 메모리 관리의 근본적인 목표는 객체의 메모리를 '자동으로 할당'하고 객체에 할당된 메모리를 '자동으로 회수'하는 것객체 메모리 할당이란 개념적으로는 힙에 할당한다는 뜻참고)객체 할당 규칙은 고정된 게 아님현재 사용하는 가비지 컬렉터와 메모리 관련 가상 머신 매개 변수 설정값에 따라 달라질 수 있음 여기서는 시리얼 컬렉터를 사용한 가장 기본적인 메모리 할당 정책을 알아본다.(모든 상황에서 최고인 단 하나의 컬렉터나 매개 변수 조합이란 없다) 1. 객체는 먼저 에덴에 할당된다.대부분의 경우 객체는 신세대의 Eden 영역에 할당됨Eden 영역의 공간이 부족해지면 가상 머신은 Minor GC를 시작함Eden과 현재 사용중인 Survivor 영역(from)에 있는 객체 중 살아남은 객체들을..
-
[MySQL] 실행 계획 > Extra 컬럼 > 커버링 인덱스 (Using Index)Study 2025. 3. 26. 00:37
데이터 파일을 전혀 읽지 않고 인덱스만으로 쿼리가 처리되는 것실행 계획 확인 시 Extra 컬럼에 "Using Index"가 표시됨이점인덱스를 이용해 처리하는 쿼리에서 가장 큰 부하를 차지하는 부분은 인덱스 검색에서 일치하는 키 값들의 레코드를 읽기 위해 데이터 파일을 검색하는 작업임커버링 인덱스로 처리될 경우 데이터 파일을 읽지 않아도 되기 때문에 쿼리 처리 성능 향상됨주의) 무조건 커버링 인덱스가 정답은 아니다커버링 인덱스로 처리하기 위해 인덱스에 많은 컬럼을 추가하면 인덱스의 크기가 커짐이로인해 메모리 낭비가 심해지고, 레코드를 저장하거나 변경하는 작업이 매우 느려질 수 있음 예시)InnoDB의 모든 테이블은 클러스터링 인덱스로 구성돼 있음InnoDB 테이블의 모든 세컨더리 인덱스는 데이터 주소값으..
-
[MySQL] 인덱스 > 클러스터링 인덱스Study 2025. 3. 26. 00:16
MySQL 서버에서 클러스터링은 클러스터링 키를 사용해 테이블의 레코드를 비슷한 것들끼리 묶어서 저장하는 형태로 구현됨주로 비슷한 값들을 동시에 조회하는 경우가 많다는 점에 착안한 것MySQL에서 클러스터링 인덱스는 InnoDB 스토리지 엔진에서만 지원함 클러스터링 인덱스테이블의 PK에 대해서만 적용되는 내용즉, PK 값이 비슷한 레코드끼리 묶어서 저장하는 것을 '클러스터링 인덱스'라고 표현함중요한 것은 PK 값에 의해 레코드의 저장 위치가 결정된다는 것PK 값이 변경되면 그 레코드의 물리적인 저장 위치가 바뀌어야 한다는 것을 의미하기도 함인덱스 알고리즘이라기보다 테이블 레코드의 저장 방식이라고 볼 수 있음클러스터링 인덱스와 클러스터링 테이블은 동의어로 사용되기도 함클러스터링의 기준이 되는 PK를 '클러..
-
[MySQL] 인덱스Study 2025. 3. 25. 00:56
디스크 읽기 방식데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건데이터베이스는 디스크를 사용해 데이터를 저장한다. 이때 대용량의 요청에도 어떻게 고성능을 낼 수 있게 할까?에 대한 의문이다.즉, 결론부터 말하자면 필요한 데이터만 읽도록 쿼리를 개선해야 한다. 랜덤 I/O와 순차 I/O공통점하드 디스크 드라이브의 플래터(원판)을 돌려 데이터를 읽거나 써야 할 위치로 디스크 헤더를 이동시켜야 함차이점순차 I/O : 위치를 찾기 위해 디스크의 헤더 1번 움짐임랜덤 I/O : 위치를 찾기 위해 디스크의 헤더 3번 움직임디스크에 데이터를 쓰고 읽는 데 걸리는 시간은 디스크 헤더를 움직여서 읽고 쓸 위치로 옮기는 단계에서 결정됨디스크의 성능은 디스크 헤더의 위치 이동 없이 얼마나 많은 데이터를 한 ..