긍정적인 사고와 행동으로 선한 영향력을 줄 수 있도록

Database 19

Hash Join

1. 선행 테이블에 조건을 만족하는 행을 찾아서 조인 키(컬럼) 기준으로 hash 알고리즘을 적용하여 hash 테이블 생성2. 후행 테이블도 동일하게 생성하는데 선행 테이블의 해쉬값과 맞는지(등가 =) 찾음3. 이후 JOIN 수행항상 HASH 값이 같아야 조인이 수행되므로 동등 조인에서만 사용가능선행 테이블의 결과값(ROWS)이 작아야 유리CPU,메모리 작업 위주 데이터 처리해쉬 함수를 이용하여 조인을 수행하기 때문에 '='로 수행하는 조인에서만 사용가능 합니다.

Database 2025.12.04

Sort Merge Join

1. 선행 테이블에 조건을 만족하는 행을 찾는다 후행 테이블도 동일하게2. PGA 공간에 조인컬럼을 기준으로 정렬을 수행3. 이후 두 테이블을 JOIN 수행해당 조인은 정렬할 데이터가 많은경우 TEMP 영역을 사용하기 때문에 대량 조인 작업에서는 Hash Join이 유리INDEX 있으면 자동정렬대부분 해시조인인 보다 느린 성능을 보이나, 아래와 같은 상황에서는 소트머지 조인이 유용하다.First 테이블에 소트연산을 대체할 인덱스가 있을 때조인할 First 집합이 이미 정렬되어 있을 때조인 조건식이 등차(=)조건이 아닐 때두 테이블의 사이즈가 비슷한경우에 유리하며, 사이즈 차이가 큰 경우에는 불리하고, 비효율적인 방법이다.

Database 2025.12.04

NL(Nested Loop) Join

NL 조인은 조인컬럼에 인덱스를 이용하는 방식, INDEX SCAN(RANDOM I/O) 사용1. 선행 테이블을 순차적으로 읽어 조건 만족하는 행 찾음, 만족하지 않으면 필터링2. 그 조인키를 가지고 후행 테이블에서 접근하여 조인키를 찾는다 조인 시도(inner[driven] 조인키에 인덱스가 없으면 풀스캔)3. 후행 테이블에 조인 키가 없으면 필터링4. 있으면 추출 버퍼에 넣음5. 반복 수행중첩 FOR 문 이라고 보면됨.선행 테이블의 처리 범위(ROW) 가 성능을 결정, 양이 많지 않으면 인덱스 없이 Full Scan해도 한번만 하면 됨.후행테이블에 대해서는 반드시 인덱스가 존재해야 NL 조인이 가능하다.랜덤 엑세스 위주라 대용량 처리 시 불리함,유니크 인덱스를 이용하여 소량 테이블 조인시 유리

Database 2025.12.04

배치 I/O

인덱스를 통한 Table Random Access는 Single Block I/O으로 작동하기에 엄청난 부하를 유발하는데, 심지어 버퍼 캐시 경유 비용 + 래치 경합까지 발생할 수 있어 로우가 많아 질수록 각종 Wait Event가 발생해 성능이 급격히 저하되었다.-> 실행계획 : TABLE ACCESS BY INDEX ROWID BATCHED-> 위 성능 개선을 위해 12c 부터 batch I/O 추가BATCH I/O1. 인덱스를 통해 버퍼 캐시에서 찾지 못하면 DISK I/O(TABLE SCAN) 했던 SINGLE I/O 방식이 아니라2. DISK I/O 를 잠시 미루고 일정량 모은 뒤 일괄 처리 방식* ROWID 로 버퍼 캐시 조회 -> 실패 시 ROWID 저장* 위 과정 반복하여 ROWID 일정량..

Database 2025.12.04

부분범위 처리

PostgreSQL에서 “부분 범위 처리”를 잘 하려면WHERE + ORDER BY + LIMIT를 인덱스 구조와 일치시키는 방식 사용 유도그러면 상위 N개만 읽고 스캔을 멈출 수 있어 성능 향상-> 테이블 전체를 읽지 않고, 인덱스 풀 스캔도 하지않고, 인덱스 자체로 정렬되어 있기 때문에 정렬된 엔트리를 위에서 순차적으로 20건만 스캔하고 끝남Oracle 은 자동으로 범위처리가 된다고함 ;;인덱스가 없거나, ORDER BY랑 안 맞는 경우 모든 row 스캔 후 정렬이 필요한 컬럼 기준으로 전체 정렬-> 이러면 최종 출력 수 는 소량이지만 작업은 전체 대상임

Database 2025.12.04

다중 컬럼 인덱스(복합 인덱스)

선두 컬럼부터 연속해서 조건/정렬을 사용해야 효율적선두 컬럼을 건너뛰고 그 뒤에 있는 컬럼만으로는 인덱스를 제대로 못탐선두 컬럼에는 =(동등 조건), 뒤에는 범위 조건(LIKE, BETWEEN) 이 베스트조건절에 선두 컬럼이 없으면, 옵티마이저가 TABLE FULL SCAN 혹은 INDEX FULL SCAN(데이터가 적으면) 으로 유도한다인덱스 컬럼에 함수/표현식 씌워서 인덱스를 못 타는 경우 많음인덱스 컬럼을 WHERE , ORDER BY, GROUP BY 에 사용 되어야 함그리고 인덱스에 포함되지 않는 컬럼이 들어오면(SELECT) TABLE HEAP 스캔 발생

Database 2025.12.04

[Database] DR 이란? 재해복구(Disaster Recovery) 의 개념

재해복구(Disaster Recovery, 이하 DR) 최근 판교 데이터센터 화재로 인해 카카오 서비스 장애가 10시간 이상 이어지면서 데이터 재해 복구의 중요성이 크게 대두되었다. 재해복구(DR)는 예상치 못한 재해로부터 서비스 연속성을 유지하기 위한 보호 전략이다. 재해에는 지진, 태풍, 홍수, 화재 등의 자연재해를 비롯해 전쟁, 해킹, 통신장애, 전력공급차단 등 외부요인과 시스템 결함, 기계적 오류, 관리정책 오류 등 내부적 요인에 의한 장애를 모두 포함한다. DR센터는 운영방침에 따라 ▲미러사이트(1등급) ▲핫사이트(2등급) ▲웜사이트(3등급) ▲콜드사이트(4등급) 등으로 나뉘며, 클라우드 또는 온프레미스로 구축할 수 있다. 운영서버에서의 장애로 인해 복구가 불가능 또는 지연될 경우 실시간 Rep..

Database 2023.03.27

[Database] ssh 통신이란?

SSH 란? 시큐어 셀(Secure SHell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 응용 프로그램 또는 그 프로토콜을 가리킨다. 즉, 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 인터넷과 같은 Public Network를 통해서 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜이다. 대표적인 사용 데이터 전송 원격 제어 원격 제어의 예 AWS와 같은 클라우드 서비스는 인스턴스 서버에 접속하여 해당 머신에 명령을 내리기 위해서 SSH을 통한 접속을 해야한다. 사용 이유 보안때문에 FTP나 Telnet과 같은 다른 컴퓨터 통신을 사용하지 않는다. SSH는 보안적으로 훨씬 안전한 채널을 ..

Database 2023.03.22

[Database] 버퍼와 캐시의 특징과 차이

Buffer VS Cache Cache 캐시(Cache)란 처리속도 향상을 위해, 자주 사용하는 데이터나 값들을 캐시 메모리에 임시 저장 [ 데이터를 미리 읽어옴 ] CPU는 항상 캐시 메모리를 먼저 탐색한다. Buffer 버퍼(Buffer)란 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 데이터를 보관하는 메모리 영역 주로 입/출력 프로세스 에 사용됩니다 Dirty Buffer : 버퍼 캐시로부터 변경되었지만 아직 디스크에 기록되지 않아 동기화가 필요한 버퍼 블록 예를 들면, 메모리의 속도가 100이고, 하드디스크의 속도를 1이라고 가정 한다고 했을 때, 이 때 갑자기 어떤 데이터(용량이 50)를 메모리가 하드디스크에서 읽어 오려고 할 경우 속도가 1인 하드디스크가 50인 용량을 읽기 위해서..

Database 2023.03.20