CS study (51) 썸네일형 리스트형 인덱스 확장 기능 사용법 : 인덱스 스킵 스캔 외(친절한 SQL 튜닝) 인덱스 범위 스캔 vs 인덱스 풀 스캔Index Range Scan가장 기본적인 인덱스를 사용한 액세스 방식이다.아래와 같은 그림처럼 인덱스 루트(시작점)까지 수직 이동 후 필요한 범위를 스캔한다. 이전에 이야기했듯, 선두 컬럼을 가공하지 않는 등의 인덱스 순서를 그대로 사용할 수 있는 방법을 사용할 경우 일반적으로 Range Scan이 사용된다.Index Full Scan수직 탐색 없이 바닥의 리프 노드 블록을 ‘전부’ 순회하여 스캔할 경우를 의미한다. Index Full Scan은 그냥 순차 스캔과 동일한가? (인덱스 풀 스캔의 효용)인덱스 Full Scan과 순차 스캔은 비슷해 보이지만 완전히 동일하지 않다. 인덱스를 읽지만, 정렬된 상태로 인덱스의 모든 엔트리를 순차적으로 읽는 작업이다... Tomcat-Plain java 차이 (24.07.02) 이 글을 정리했던 핵심적인 이유는 순수 POJO 프로세스로도 Socket을 통해 외부 통신이 가능한데, 사람들은 왜 Tomcat을 개발했을까? 에 대한 궁금증에 있었다. 1. 톰캣을 사용하는 이유: 일반 Java 프로세스와의 차이점일반적인 Java 애플리케이션으로도 HTTP 서버를 구현할 수 있다.하지만 Tomcat을 사용하는 주된 이유는 Java Servlet과 JSP 표준을 지원하는 기능에 있다.주요 차이점과 Tomcat의 장점Java Servlet 및 JSP 지원:Tomcat은 Java 기반의 웹 애플리케이션을 쉽게 구축하고 관리하기 위한 표준인 Servlet API와 JSP(JavaServer Pages)를 지원한다. 이는 HTTP 요청과 응답을 처리하고, 동적 웹 페이지를 생성하기 위한 기능을 .. 인덱스 기본 사용법 : 연산 최적화(친절한 SQL 튜닝) 인덱스 기본 사용법인덱스 컬럼(선두 컬럼)을 가공하지 않아야 인덱스를 정상적으로 사용할 수 있다.즉, ‘인덱스를 정상적으로 사용한다’ 라는 개념은 리프 블록에서 ‘시작점’ 을 찾아 순차 스캔하며 결과를 찾는 것이다. 인덱스 기본 사용법인덱스 컬럼(선두 컬럼)을 가공하지 않아야 인덱스를 정상적으로 사용할 수 있다.즉, ‘인덱스를 정상적으로 사용한다’ 라는 개념은 리프 블록에서 ‘시작점’ 을 찾아 순차 스캔하며 결과를 찾는 것이다.이것은 결국 B-Tree의 그래프에서 리프 노드를 먼저 찾은 뒤, 인덱스 시작점부터 리프 블록의 일부분만 스캔하는 Range Scan을 의미한다.이는 일반적인 DB의 인덱스 구현은 B+Tree를 기반으로 하므로, 리프 노드에서 시작해 오른쪽 리프 노드로 자연스럽게 넘어가는 범위 탐.. 인덱스 구조 및 탐색 : 수직적 탐색 과정과 LMC(친절한 SQL 튜닝) 인덱스 구조 및 탐색 DBMS가 발명된지 수 십년이 지났지만, 사실상 현존하는 SQL의 테이블 스캔 방법은 두 가지다. 1. 테이블 전체를 스캔(Full Scan)2. 인덱스를 사용(Random Access) 이 두 가지 과정에서 당연하게도 인덱스를 사용하는 것이 실제 튜닝을 통해 성능을 개선할 요소가 많다.FS 자체는 그다지 (물리적으로 개선하는 것이 아니라면) 의미가 없을 것이다. 인덱스 튜닝의 핵심 요소 1. 인덱스 스캔 과정에서 발생하는 비효율을 줄이기 (인덱스 스캔 효율 튜닝) 소량 데이터 검색 시에는 인덱스 자체의 튜닝을 줄이는 것이 중요하다. 예시에서는 복합 인덱스의 순서처럼, 중복도가 낮은 순서대로 정렬하는 것의 예시를 들었다.이 경우 테이블 내에서 전체 스캔해야 할 내용은 적어지며, .. [DB]psql 하드웨어 성능 튜닝 (24.07.10) PostgreSQL을 처음 설치하면 기본 설정으로 작동한다. 하지만 하드웨어 사양에 맞춰 설정을 조정하면 성능을 크게 향상시킬 수 있다.메모리 설정shared_buffers를 늘리면 데이터 캐시가 증가하여 쿼리 성능이 향상된다.work_mem을 조정하면 복잡한 쿼리나 정렬 작업이 빨라진다.CPU 활용max_parallel_workers와 max_worker_processes를 통해 여러 CPU 코어를 효율적으로 사용할 수 있다. 이는 대용량 데이터 처리를 빠르게 해준다.디스크 I/O 최적화effective_io_concurrency를 통해 디스크 작업의 동시성을 최적화하면, 디스크 읽기/쓰기 속도가 향상된다.wal_buffers를 적절히 설정하면 쓰기 작업 성능이 개선된다.이러한 설정 조정을 통해 Pos.. JVM 영역의 기본 개념과 GC (24.06.19) JVM 영역 정리JVM은 크게 여러 메모리 영역으로 나눌 수 있다. 각 영역은 특정 목적을 가지고 있으며, 효율적인 메모리 관리를 위해 사용된다. 주요 메모리 영역은 다음과 같다 HeapYoung GenerationEden Space: 객체가 처음 생성되는 공간이다.Survivor Space: Eden에서 살아남은 객체들이 이동하는 공간이다. S0(Survivor 0)와 S1(Survivor 1) 두 개의 영역으로 나뉜다.Old Generation: Young Generation을 거쳐 오래 살아남은 객체들이 이동하는 공간이다.Metaspace클래스 메타데이터를 저장하는 공간이다. JVM 8부터 PermGen이 제거되고 Metaspace로 대체되었다.Stack각 스레드마다 별도로 존재하며, 메서드 호출.. [인덱스] 순차 증가 값은 항상 효율적인가? (24.06.12) 궁금증b-tree 기반의 인덱스에서, '삽입' 연산에서 일반적으로 순차적으로 증가하는 값이 성능상 이점이 있다고 알고 있다.그런데, 이는 Auto-increment같은 옵티마이저가 메타데이터를 통해 예측한 값들이 중점이 되는 이유를 들을 수 있었다. (이는 데이터가 증가할 것을 예상할 수 있기 때문에, 노드에 값을 삽입할 때 빠르게 넣을 수 있게 '예측'할 수 있다.)만약 데이터가 '아무런 메타데이터가 없지만', 실제로는 외부 로직에 의해 항상 순차적으로 증가하는 값이라고 할 때(즉, 옵티마이저는 값을 예상할 수 없지만 실제로는 항상 순차적으로 증가하는 값일때) 이것은 완전한 '랜덤 난수' 에 비해 삽입 측면에서 이점이 있을까?순차적으로 증가하는 값의 장점 : 리프 노드 분할 감소B-tree 인덱스는 데.. GC - Major, Minor 가비지 컬렉션에 대한 정리 (24.06.05) 개념Minor GC와 Major GC는 JVM의 가비지 컬렉션에서 중요한 역할을 하는 두 가지 유형의 가비지 컬렉션 이벤트이다. 이 두 가지 GC의 차이점과 동작 방식을 자세히 설명하겠다.Minor GC개요:Minor GC는 Young Generation에서 발생하는 가비지 컬렉션이다. Young Generation은 Eden 영역과 두 개의 Survivor 영역(S0, S1)으로 구성된다.동작 방식:Eden 영역이 가득 찰 때 발생:새로운 객체가 주로 Eden 영역에 할당된다. Eden 영역이 가득 차면 Minor GC가 발생한다.생존 객체 이동:Minor GC 동안, Eden 영역의 모든 객체가 검사된다. 살아남은 객체는 Survivor 영역(S0 또는 S1)으로 이동한다.하나의 Survivor 영역.. 이전 1 2 3 4 ··· 7 다음