데이터베이스 노트/데이터베이스

Database를 Master/Slave 구성해야 하는 이유, Application에서는 어떻게 활용해야하는지에 관하여 정리해보려 한다. Database Replication의 동작원리나 Database의 구성형태에 대해서는 다루지 않는다. (사실 잘 모른다.) 왜 Database를 Master/Slave로 나누었을까? Application에서는 Master/Slave DB을 활용하기 위해 어떻게 구현을 했으며 어떤 고민들이 있었을까? Master Database만 구성하였을 때의 한계점 나의 첫번째 회사는 B2B서비스를 제공하는 회사였다. 그러다보니 시스템 사용자수는 한정되어(국내/해외 법인)있었고 트래픽이 증가할일이 거의 없었다. 그렇기 때문에 Application 구성도가 굉장히 단순했다. (극단적..
실행 계획이 SQL 구문의 성능을 결정 실행계획이 만들어지면 DBMS는 그것을 바탕으로 데이터 접근을 수행한다. 하지만, 데이터 양이 많은 경우에는 반응 지연이 발생하는데 첫번 째로, 앞에서 살펴본 통계정보가 부족한 경우 두번 째로는, SQL 구문이 복잡하여 옵티마이저가 최적의 경로를 선택하지 못할 경우 발생한다. => (이미 최적의 경로(방법)가 설정되어 있는데도 느린 경우) 실행계획 확인 방법 SQL 구문의 지연이 발생했을 경우 제일 먼저 실행 계획을 살펴본다. Oracle : set autotrace traceonly 3개의 기본적인 SQL 구문의 실행 계획 살펴보기 테이블 풀 스캔(Full Scan)의 실행 계획 인덱스 스캔의 실행 계획 간단한 테이블 결합의 실행 계획(조인) (Sql develo..
데이터에 접근하는 방법은 어떻게 결정할까? RDB에서 데이터 접근 절차를 결정하는 모듈을 쿼리 평가 엔진이라고 부른다. => SQL 구문(쿼리)을 처음 읽어 들이는 모듈이기도함 쿼리 평가 모듈은 추가로 파서 또는 옵티마이저와 같은 여러 개의 서브 모듈로 구성된다. 쿼리 => (1) 파서 => 파스된 쿼리 => 옵티마이저 => (2) 플랜생성, (3) 비용평가 => (4) 카탈로그 매니저 => 5.플랜평가 파서(Parser) 이름 그대로 파스(구문분석)을 하는 놈이다. 사용자로부터 입력받은 SQL구문이 문법적으로 오류가 있는지 검사해 준다. 옵티마이저(Optimizer) 서류 심사를 통과하면 쿼리는 옵티마이저로 전송된다. 옵티마이저는 최적화(데이터 접근법, 실행계획)를 수행하고, DBMS 두뇌의 핵심이다...
DBMS와 버퍼 기억장치의 분류 기억 비용 : '데이터를 저장하는데 소모되는 비용' DBMS와 기억장치의 관계 DBMS는 데이터 저장을 목적으로하는 미들웨어이기 때문에 기억장치와 떨어뜨릴 수 없는 관계이다. 하디드스크(HDD) DBMS가 데이터를 저장하는 매체(저장소)는 대부분 HDD이다. 메모리 메모리는 디스크에 비해 기억 비용이 비싸기 때문에, 하드웨어 1대에 탑재할 수 있는 양이 크지 않다. DBMS는 항상 디스크 이외의 장소에도 데이터를 올려 놓는데, 바로 1차 계층의 기억장치 메모리에 올려놓는다. 버퍼를 활용한 속도 향상 DBMS가 일부라도 데이터를 메모리에 올리는 것은 성능 향상 때문이다. 한마디로 SQL 구문의 실행 속도를 빠르게 만들기 위함이다. 따라서 자주 접근하는 데이터를 메모리 위에 ..
DBMS 아키텍처한국에서는 Oracle, Micrisoft SQL Server, DB2, PostgreSQL, MySQL 등 많은 RDB가 존재하고 이러한 제품은 각각의 특징이 있다. 하지만 RDB로써 기능을 제공한다는 목적은 모두 동일하므로, 기본적인 구조 자체는 모두 같다.DBMS 내부에는 어떠한 기능이 있을까 1. 쿼리 평가 엔진사용자로부터 입력받은 SQL 구문을 분석하고, 어떤 순서로 기억장치의 데이터에 접근할지를 결정한다.=> 이때 결정되는 계획을 '실행계획'이라고 함, 데이터에 접근하는 방법을 '접근 메서드(access method)'라고 함한마디로 쿼리 평가 엔진은 계획을 세우고 실행하는 DBMS의 핵심 기능을 담당하는 모듈이다. 2. 버퍼 매니저DBMS는 버퍼라는 특별한 용도로 사용하는 메..
조인 방법쿼리에 조인이 포함되어 있을 경우에는 옵티마이저 또한 테이블 간에 조인 작업을 수행하게 된다.옵티마이저는 Nested Loop Join, Sort Merge Join, Hash Join 등 세 가지 조인 방법(Join Method)을 사용하여 조인 작업을 수행하게 된다. 중첩 루프 조인(NLJ)WHERE 절에 있는 조건에 따라 두 테이블에서 하나의 테이블을 기준으로 삼아 다른 하나의 테이블에 있는 데이터를 읽는 방식이다.기준이 되는 테이블 => 드라이빙 테이블(Driving Table) 혹은 Outer Table나머지하나의 테이블 => Inner Table SELECT EMP.EMPLOYEE_ID, EMP.DEPARTMENT_ID, DEP.DEPARTMENT_NAMEFROM EMPLOYEES E..
옵티마이저가 각각의 실행계획에 따른 비용을 산정하는데 있어서 테이블이나 뷰의 데이터를 읽어오는 방식을 접근 경로(Acces Path)라 하는데, 이러한 접근 경로에는 다음과 같은 것들이 있다. Full Table Scan일반적으로 Full Table Scan은 인덱스를 사용한 검색에 비해 비효율적인 접근 방식으로 알려져 있고 많은 경우에 있어서 비효율적이다.테이블에 데이터가 적은 경우에는 성능차이가 미미하게 느껴질 수 있지만, 수십 혹은 수백만 건의 데이터를 가진 테이블에서 100건 정도의 데이터를 검색하기 위해 테이블 전체를 검색하는 것은 비효율적일 수 밖에없다.하지만 Full Table Scan방식이 항상 좋지 않은 것은 아니다.인덱스를 사용한 방법은 일단 인덱스 정보를 먼저 검색해서 실제 데이터를 ..
조인수행원리조인이란 두 개 이상의 테이블을 하나의 집합으로 만드는 연산조인 연산은 두 테이블 사이에서 수행된다.FROM절에 A, B, C라는 세 개의 테이블이 존재하더라도 세 개의 테이블이 동시에 조인이 수행되는 것이 아니라, 세 개의 테이블 중에서 먼저 두개의 테이블에 대해 조인이 수행되고 그 수행된 조인 결과와 나머지 테이블 사이에서 조인이 수행된다. 이러한 작업은 FROM 절에 나열된 모든 테이블을 조인할 때까지 반복 수행된다.A->B->C , A->C->B 이런 순서로 조인이 실행될 수 있음테이블 또는 조인 결과를 이용하여 조인을 수행할 때 조인 단계별로 다른 조인 기법을 사용할 수 있다. NL JoinNL Join은 프로그래밍에서 사용하는 반복문과 유사한 방식으로 조인을 수행한다.반복문 외부에 ..
인덱스 기본1. 인덱스 특징과 종류인덱스는 원하는 데이터를 쉽게 찾을 수 있도록 돕는 책의 색인과 유사한 개념이다.인덱스의 기본적인 목적은 검색 성능의 최적화이다. Insert, Update, Delete 등과 같은 DML 작업은 테이블과 인덱스를 함께 변경해야 하기 때문에 오히려 느려질 수 있는 단점이 존재한다. 트리 기반 인덱스DBMS에서 가장 일반적인 인덱스는 B-트리 인덱스이다.B-트리 인덱스는 브랜치 블록(Branch Block)과 리프 블록(Laef Block)으로 구성브랜치 블록 중에서 가장 상위에서 있는 블록을 루트 블록(Root Block)이라 한다.브랜치 블록은 분기를 목적으로 하는 블록이다. 다음 단계의 블록을 가리키는 포인터를 가지고 있다.리프 블록은 트리의 가장 아래 단계에 존재한..
실행계획(Execution Plan)실행계획(Execution Plan)이란 SQL에서 요구한 사항을 처리하기 위한 절차와 방법을 의미한다.동일한 SQL에 대해 결과를 낼 수 있는 다양한 처리 방법(실행계획)이 존재할 수 있지만 각 처리 방법마다 실행 시간(성능)은 서로 다를 수 있다.옵티마이저는 다양한 처리 방법들 중에서 가장 효율적인 방법을 찾아준다.(최적의 실행계획을 생성) 실행계획의 구성요소에는조인 순서(Join Order)조인 기법(Join Method)액세스 기법(Access Method)최적화 정보(Optimization Information)연산(Operation) 등이 있다. 조인순서(Join Order)수행할 때 참조하는 테이블의 순서FROM AINNER JOIN B일 때, 조인 작업을..
깡냉쓰
'데이터베이스 노트/데이터베이스' 카테고리의 글 목록