목차
📌 트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
활동(Active) | 트랜잭션이 실행 중인 상태이다. |
실패(Failed) | 트랜잭션이 실행에 오류가 발생하여 중단된 상태이다. |
철회(Aborted) | 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태이다. |
부분 완료 (Partially Committed) |
트랜잭션을 모두 성공적으로 실행한 후 Commit 연산이 실행되기 직전인 상태이다. |
완료(Committed) | 트랜잭션을 모두 성공적으로 실행한 후 Commit 연산을 실행한 후의 상태이다. |
📌 다음은 데이터의 무결성(Integrity)을 보장하기 위하여 DBMS의 트랜잭션이 가져야 할 특성이다.
Atomicity(원자성) | - 트랜잭션의 연산은 데이터베이스에 모두 반영되도록 완료(Commit)되든지 아니면 전혀 반영되지 않도록 복구(Rollback) 되어야 한다. - 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다. |
Consistency(일관성) | - 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다. - 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다. |
Isolation (독립성, 격리성, 순차성) |
- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트른잭션의 연산이 끼어들 수 없다. - 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다. |
Durability (영속성, 지속성) |
성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다. |
📌 CRUD는 '생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete)'의 앞 글자만 모아서 만든 용어이며, CRUD 분석은 데이터베이스 테이블에 변화를 주는 트랜잭션의 CRUD 연산에 대해 CRUD 매트릭스를 작성하여 분석하는 것이다.
💡 CRUD 매트릭스는 2차원 형태의 표로서, 행에는 프로세스를, 열에는 테디블을, 행과 열이 만나는 위치에는 프로세스가 테이블에 발생시키는 변화를 표시하는 업무 프로세스와 데이터 간 상관 분석표이다.
📌 CRUD 매트릭스는 2차원 형태의 표로서, 행(Row)에는 프로세스를, 열(Column)에는 테이블을, 행과 열이 만나는 위치에는 프로세스가 테이블에 발생시키는 변화를 표시하는 업무 프로세스와 데이터 간 상관 분석표이다.
🔔 예) '주문 변경' 프로세스를 실행하려면 테이블의 데이터를 읽은(Read) 다음 수정(Update) 해야 하므로 R(Read)과 U(Update)가 필요하지만 CRUD 매트릭스에는 우선순위가 높은 'U'만 표시한다.
🔔 예) 온라인 쇼핑몰의 CRUD 매트릭스 예시
프로세스/테이블 | 회원 | 상품 | 주문 | 주문목록 | 제조사 |
신규 회원 등록 | C | ||||
회원정보 변경 | R, U | ||||
주문 요청 | R | R | C | C | |
주문 변경 | R | R, U | |||
주문 취소 | R, D | R, D | |||
상품 등록 | C | C, R | |||
상품정보 변경 | R, U | R, U |
📌 트랜잭션 분석의 목적은 CRUD 매트릭스를 기반으로 테이블에 발생하는 트랜잭션 양을 분석하여 테이블에 저장되는 데이터의 양을 유추하고 이를 근거로 DB 용량을 산정하고 DB 구조를 최적화하는 것이다.
💡 데이터 양 유추 : 직원이 10,000 명이고, 직원 한 명당 발령은 2번, 상여금 변경은 20번 발생한다면 발령 테이블에는 10,000 x 2 = 20,000건, 상여금 테이블에는 10,000 x 20 = 200,000 건의 데이터가 발생한다는 것을 유추할 수 있다.
※ 이 계산은 정확한 데이터 양을 계산한 것이 아니라 저장장치나 파일 등의 크기를 지정하기 위해 대략적으로 유추한 것이다.
💡 업무 개발 담당자는 애플리케이션을 분석 및 설계하는 일을 담당한다.
📌 트랜잭션 분석서는 단위 프로세스와 CRUD 매트릭스를 이용하여 작성하며, 구성 요소에는 단위 프로세스, CRUD 연산, 테이블명, 컬럼명, 테이블 참조 횟수, 트랜잭션 수, 발생 주기 등이 있다.
🔔 예) '주문요청' 프로세스에 대한 트랜잭션 분석서 예시
프로세스 | CRUD | 테이블명 | 컬럼명 | 참조횟수 | 트랜잭션 수 | 주기 |
주문요청 | R | 회원 | 회원번호, 회원명, 주소 | 1 | 150 | 일 |
R | 상품 | 상품번호, 상품명, 재고량 | 1 | 150 | ||
C | 주문 | 주문번호, 일자, 회원번호 | 3 | 450 | ||
C | 주문목록 | 주문번호, 상품번호, 수량, 가격 | 5 | 750 |
💡 TABLE SCAN은 테이블에 있는 모든 레코드를 순차적으로 읽는 것으로 FULL TABLE SACAN이라고도 한다. 일반적으로 적용 가능한 인덱스가 없거나 분포도가 넓은 데이터를 검색할 때는 FULL TABLE SCAN을 사용한다.
📌 트리 기반 인덱스는 인덱스를 저장하는 블록들이 트리 구조를 이루고 있는 것으로, 상용 DBMS에서는 트리 구조 기반의 B+ 트리 인덱스를 주로 활용한다.
구분 | B-tree | B+tree |
데이터 저장 | 리프 노드, 브랜치 노드 모두 데이터 저장 가능 | 오직 리프 노드에만 데이터 저장 가능 |
트리의 높이 | 높은 | 낮음(한 노드 당 key를 많이 담을 수 있음) |
풀 스캔 시, 검색 속도 | 모든 노드 탐색 | 리프 노드에서 선형 탐색 |
키 중복 | 없음 | 있음(리프 노드에 모든 데이터가 있기 때문) |
검색 | 자주 access되는 노드를 루트 노드 가까이 배치할 수 있고, 루트 노드에서 가까울 경우, 브랜치 노드에도 데이터가 존재하기 때문에 빠름 | 리프 노드까지 가냐 데이터 존재 |
링크드 리스트 | 없음 | 리프 노드끼리 링크드 리스트로 연결 |
📌 비트맵 인덱스는 인덱스 컬럼의 데이터를 Bit 값인 0 또는 1로 변환하여 키로 사용하는 방법이다.
💡 로우(Row)의 주소 : 비트맵에서 비트의 위치는 테이블에서 로우(Row)의 상대적인 위치를 의미한다. 해당 테이블이 시작되는 물리적인 주소를 기반으로 실제 로우의 물리적 위치를 계산할 수 있다.
💡 분포도, 선택성(Selectivity) : (조건에 맞는 레코드 수 / 전체 릴레이션 레코드 수) x 100, 분포도가 10~15%인 경우 효율적인 인덱스 검색을 할 수 있다. 분포도를 선택성(Selectivity)이란 용어로 사용하기도 한다.
📌 함수 기반 인덱스는 컬럼의 값 대신 컬럼에 특정 함수(Function)나 수식(Expression)을 적용하여 산출된 값을 사용하는 것으로, B+ 트리 인덱스 또는 비트맵 인덱스를 생성하여 사용한다.
💡 C allout은 어떤 함수를 호출한다라는 의미이다.
📌 비트맵 조인 인덱스는 다수의 조인된 객체로 구성된 인덱스로, 단일 객체로 구성된 일반적인 인덱스와 액세스 방법이 다르다.
📌 도메인 인덱스는 개발자가 필요한 인덱스를 직접 만들어 사용하는 것으로, 확장형 인덱스(Extensible Index)라고도 한다.
💡 도메인 인덱스 : 오라클 8i에서부터 새롭게 도입된 개념으로 개발자가 자신이 원하는 인덱스 타입을 생성할 수 있게 함으로써 오라클의 인덱스 시스템에 많은 확장을 가져다 주었다. 즉, 데이터베이스에는 아직 존재하지도 않는 새로운 인덱스 타입을 자신이 스스로 정의하여 오라클에서 지원하는 인덱스 처럼 사용할 수가 있다는 것이다.
📌 인덱스를 설계할 때는 분명하게 드러난 컬럼에 대해 기본적인 인덱스를 먼저 지정한 후 개발 단계에서 필요한 인덱스의 설계를 반복적으로 진행한다.
🔔 예) 인덱스 정의서 예시
엔티티명 | 테이블명 | 인덱스명 | 컬럼명 | 타입 | 테이블 스페이스 |
엔덱스 유형 |
정렬 |
사원 | EMP | PK_EMP | EMPNO | NUMBER(5) | ISTEXT01 | UNIQUE | ASC |
1_EMP2 | DEPTNO | NUMBER(5) | ISTEXT01 | NOT UNIQUE | ASC | ||
고객 | CUST | PK_CUST | CUSTNO | NUMBER(5) | ISTEXT01 | UNIQUE | ASC |
부서 | DEPT | PK_DEPT | DEPTNO | NUMBER(3) | ISTEXT01 | UNIQUE | ASC |
주문 | ORDER | PK_ORDER | ORDERNO | NUMBER(6) | ISTEXT01 | UNIQUE | ASC |
💡 인덱스 설계 : 프로젝트 진행 중에는 데이터나 프로세스 내용 등에 변경이 많기 때문에 처음부터 모든 인덱스를 한꺼번에 정의하는 것은 불가능 하다. 인덱스 설계 단계에서는 기본적인 인덱스를 지정하고 프로젝트를 진행하면서 SQL 문장 구조 등을 검토하여 반복적으로 인덱스 설계를 진행해야 한다.
💡 MULTI BLOCK READ란 ? 테이블 액세스 시 메모리에 한 번에 읽어 들일 수 있는 블록의 수를 말한다.
💡 ORDER B, GROUP BY, UNION : ORDER BY는 정렬, GROUP BY는 그룹 지정, UNION은 통합 지정 시 사용하는 SQL 명령어이다.
💡 결합 인덱스 : 결합 인덱스란 한 릴레이션 내에 존재하는 여러 컬럼들을 묶어 하나의 인덱스로 만드는 것을 말한다.
결합 인덱스는 컬럼 순서에 따라 액세스하는 범위가 달라질 수 있으므로 유의해야 한다.
💡 컬럼 순서 우선순위
1. 항상 사용되는 컬럼
2. '=' 연산이 되는 컬럼
3. 분포도가 좋은 컬럼
4. 정렬이 자주 발생하는 컬럼
💡 인덱스와 테이블 분리 : 인덱스와 테이블을 분리하는 형태는 데이터베이스의 가장 일반적인 형태로, 데이터 저장 시 인덱스의 영향을 받지 않아 저장이 빠르다.
📌 [정보처리기사] 물리 데이터베이스 설계 - 분산 데이터베이스 설계 (0) | 2024.02.15 |
---|---|
📌 [정보처리기사] 물리 데이터베이스 설계 - 뷰(View) 설계/클러스터 설계/파티션 설계/용량 설계 (2) | 2024.02.15 |
📌 [정보처리기사] 물리 데이터베이스 설계 - 사전 조사 분석/데이터베이스 저장 공간 설계 (2) | 2024.02.14 |
📌 [정보처리기사] 논리 데이터베이스 설계 - 정규화(Normalization)/반정규화(Denormalization)/시스템 카탈로그 (2) | 2024.02.14 |
📌 [정보처리기사] 논리 데이터베이스 설계 - 관계대수 및 관계해석 (0) | 2024.02.14 |