7. 물리데이터모델 품질 검토 & 분산 데이터 베이스
지난 시간에는 키와 무결성등 데이터베이스의 주요개념에 대해 배웠습니다. 개체, 참조, 도메인은 직접 쓸 수 있을 정도로 암기가 되어야합니다.
이번 시간에는 물리데이터 모델 품질 검토와 분산 데이터 베이스에 대해 알아보도록하겠습니다. 주요 개념은 CRUD와 옵티마이저, 트랜잭션이됩니다. ACID 와 투명성은 꼭 챙겨가시기 바랍니다..
목차
CRUD란?
CRUD는 "Create, Read, Update, Delete"의 약어로, 소프트웨어 개발에서 가장 일반적으로 사용되는 네 가지 기본 데이터 조작 기능을 가리킵니다.
CRUD는 클라우드 매트릭스라고 읽습니다.
업무/테이블 | 회원 | 상품 | 주문 |
회원가입 | C | ||
로그인 | R | ||
상품보기 | R | ||
상품주문 | CUD | ||
상품취소 | UD |
- Create (생성)
- 새로운 데이터를 생성하거나 기존 데이터를 복제하여 새로운 데이터를 만드는 동작입니다.
- 이는 데이터베이스나 파일 시스템에서 새로운 레코드를 추가하는 것과 같은 의미를 갖습니다.
- Read (읽기)
- 데이터를 조회하고 검색하는 동작입니다.
- 데이터베이스에서 특정 레코드를 읽거나 파일 시스템에서 파일의 내용을 읽는 것과 같은 의미를 갖습니다.
- Update (갱신)
- 기존 데이터를 수정하거나 업데이트하는 동작입니다.
- 데이터베이스에서 레코드를 수정하거나 파일 시스템에서 파일의 내용을 변경하는 것과 같은 의미를 갖습니다.
- Delete (삭제)
- 데이터를 삭제하는 동작입니다.
- 데이터베이스에서 레코드를 삭제하거나 파일 시스템에서 파일을 삭제하는 것과 같은 의미를 갖습니다.
CRUD 필요성
모델링 작업 검증
중요 산출물
테스트 시 사용
인터페이스 현황 파악
옵티마이저란?
옵티마이저(optimizer)는 데이터베이스 관리 시스템(DBMS)에서 쿼리의 실행 계획을 결정하는 핵심 구성 요소입니다. 쿼리를 실행할 때 옵티마이저는 다양한 실행 계획을 평가하여 최적의 실행 경로를 선택하고 최적화합니다. 이를 통해 쿼리의 성능을 향상시키고 데이터베이스 시스템의 전체 성능을 향상시킵니다.
SQL 처리 절차
SQL → 구문 분석(Data Base 통계자료 참조) → 실행 → 인출(Database Data) → 결과
- SQL 구문 분석 (SQL Parsing)
- insert, update, select 사용
- 문법적인 오류가 있는지 확인하는 절차
- 이미 처리된 적이 있으면 구문분석 Pass
- 클라이언트로부터 SQL 쿼리가 전송됩니다.
- DBMS는 이 쿼리를 받아서 구문 분석기에 전달합니다.
- 구문 분석기는 SQL 문장을 토큰으로 분해하고 구문을 분석하여 문법적 오류를 확인합니다.
- 구문 분석기가 쿼리를 파싱하고 문법 오류가 없으면 파싱 트리 또는 구문 트리를 생성합니다.
- 실행 (Execution)
- insert, update, select 사용
- 데이터 버퍼 캐시 영역에 있는지 검사
- 선택된 실행 계획에 따라 쿼리가 실행됩니다.
- 이 단계에서는 데이터베이스가 필요한 데이터를 검색하고 처리합니다.
- 테이블 액세스, 인덱스 스캔, 조인, 정렬 등의 작업이 수행됩니다.
- 실행된 쿼리는 CPU 및 I/O 리소스를 사용하여 결과를 생성합니다.
- 결과 인출 (Result Fetching)
- Select에서만 실행
- 실행된 쿼리가 결과를 반환합니다.
- 결과는 클라이언트로 전송되어 사용자에게 표시될 수 있습니다.
- 결과가 클라이언트에게 전달되면 SQL 처리 과정이 완료됩니다.
옵티마이저 구분
- 규칙 기반 옵티마이저 (Rule-Based Optimizer)
- 규칙(우선순위)을 가지고 실행 계획을 생성
- 규칙 기반 옵티마이저는 실행 계획을 결정할 때 사전에 정의된 규칙 집합을 사용합니다.
- 이 규칙 집합은 일반적으로 DBMS 제조업체나 사용자가 제공합니다.
- 이 옵티마이저는 각 유형의 쿼리에 대한 실행 계획에 대해 사전에 정의된 규칙을 적용합니다.
- 규칙 기반 옵티마이저는 쿼리의 통계 정보나 데이터 분포를 고려하지 않으며, 단순한 쿼리나 작은 규모의 데이터베이스에 적합할 수 있습니다.
- 비용 기반 옵티마이저 (Cost-Based Optimizer)
- 비용(소요시간, 자원사용량) = 통계를 활용하여 실행계획생성
- 비용 기반 옵티마이저는 쿼리 실행 계획을 선택할 때 각 실행 계획의 예상 비용을 고려합니다.
- 이를 위해 테이블의 통계 정보, 인덱스 정보, 시스템 리소스 상태 등을 고려하여 각 실행 계획의 비용을 계산합니다.
- 그런 다음 가장 낮은 비용을 가진 실행 계획을 선택합니다.
- 비용 기반 옵티마이저는 대부분의 현대적인 DBMS에서 사용되며, 데이터의 크기와 분포에 따라 최적의 실행 계획을 선택하는 데 유용합니다.
SQL 성능 튜닝이란?
빠른 시간 내에 원하느 결과값을 얻기 위한 작업
주어진 하드웨어 환경을 통해 처리량과 응답속도를 개선하기 위해 수행
SQL문의 성능을 최적화
튜닝접근 방법
튜닝 접근 방법 | 설명 |
부하 감소 | 시스템에 가해지는 부하를 줄이기 위해 리소스 사용을 최적화하거나 부하를 줄이는 방법을 적용합니다. 예를 들어, 쿼리 최적화, 인덱스 사용, 쿼리 캐싱, 쿼리 리팩터링 등을 통해 쿼리 실행 속도를 향상시켜 부하를 감소시킵니다. |
부하 조정 | 부하를 균형있게 분산하거나 조절하여 시스템의 성능을 최적화합니다. 이는 서버 클러스터링, 로드 밸런싱, 캐싱 전략, 데이터 파티셔닝 등을 통해 구현될 수 있습니다. 목표는 각 리소스의 효율적인 활용과 부하의 공정한 분배를 보장하는 것입니다. |
부하 병렬의 수행 | 시스템의 처리량을 높이기 위해 작업을 병렬로 수행하거나 분산합니다. 이는 데이터베이스 샤딩, 병렬 쿼리 처리, 분산 시스템 구축 등을 통해 구현될 수 있습니다. 목표는 시스템의 확장성을 향상시키고 처리량을 증가시켜 대규모 작업을 효율적으로 처리하는 것입니다. |
튜닝 영역
데이터베이스 설계 튜닝
- 데이터베이스의 논리적 및 물리적 설계 단계부터 최적화합니다.
- 적절한 테이블 구조, 인덱스, 관계, 제약 조건 등을 설계하여 데이터의 효율적인 관리와 접근을 보장합니다.
- 논리적 설계 측면에서는 테이블 및 관계의 정규화, 외래 키 관리 등을 고려합니다.
- 물리적 설계 측면에서는 데이터 저장 구조, 인덱스 생성, 파티셔닝 등을 고려하여 성능을 향상시킵니다.
- 설계 튜닝은 다하고 나면 Migration을 해야합니다.
데이터베이스 환경 튜닝
- 데이터베이스 시스템의 환경 설정을 최적화합니다.
- 메모리 할당, 디스크 공간 할당, 캐시 설정, 로깅 및 복구 설정 등을 조정하여 시스템의 전반적인 성능을 향상시킵니다.
- 데이터베이스 서버의 하드웨어 및 네트워크 구성도 고려하여 성능을 최적화합니다.
SQL 문장 튜닝
- SQL 쿼리의 성능을 향상시키는데 초점을 맞춥니다.
- 쿼리 실행 계획을 최적화하기 위해 인덱스를 사용하고, 조인 순서를 조정하며, 필요한 경우 서브쿼리를 최적화합니다.
- 쿼리 튜닝 도구를 사용하여 쿼리의 실행 계획을 분석하고 최적화합니다.
- 쿼리의 블로킹이나 데드락 등과 같은 성능 문제를 해결하기 위해 적절한 트랜잭션 관리도 중요합니다.
튜닝 절차
- 시스템 현황 분석
- 데이터베이스 및 시스템의 현재 상태를 파악합니다.
- 리소스 사용, 성능 지표, 작업 부하 등을 분석합니다.
- 문제점 탐지 및 원인 분석
- 시스템에서 발생하는 성능 문제를 식별하고 원인을 분석합니다.
- 쿼리 실행 계획, 인덱스 사용, 블로킹, 데드락 등을 검토합니다.
- 목표 설정
- 개선할 성능 목표를 설정합니다.
- 예를 들어, 응답 시간을 단축하거나 처리량을 증가시키는 등의 목표를 설정합니다.
- 튜닝 시행
- 목표에 맞게 튜닝을 시행합니다.
- SQL 문장, 인덱스, 파티셔닝 등을 최적화합니다.
- 결과 분석
- 튜닝 결과를 분석하여 목표 달성 여부를 확인합니다.
- 성능 개선 사항을 검토하고 필요에 따라 추가 튜닝을 시행합니다.
SQL 성능 최적화를 위한 도구
아래는 오라클에서 쓰는 거라 그냥 그렇구나 하고 지나가시면 됩니다.
실제 최적화시켜주는 것이 아니라 보여주는 역할을 하는 도구입니다.
- SQL Trace
- SQL 실행에 대한 세부 정보를 캡처하고 분석하는 기능을 제공합니다. 실행 계획, 블로킹, I/O 소요 시간 등을 분석하여 성능 문제를 식별합니다.
- TKPROF
- SQL Trace의 결과를 분석하고 요약하는 유틸리티입니다. 쿼리 실행 시간, 블록 소요 시간, I/O 소요 시간 등의 정보를 요약하여 제공합니다.
- EXPLAIN PLAN
- SQL 쿼리의 실행 계획을 분석하여 성능 향상을 위한 힌트를 제공합니다. 각 단계의 예상 비용과 접근 방법을 확인할 수 있습니다.
Row Migration / Row Chainging
- Row Migration
- 데이터가 커져서 기존 블록에 못 들어가서 다른 곳에 저장하고 링크를 남기는 것
- 데이터베이스에서 행의 크기가 변경되면 해당 행이 저장된 곳에서 물리적으로 이동하는 현상입니다.
- 이로 인해 I/O 오버헤드가 발생하여 성능이 저하될 수 있습니다.
- Row Chaining:
- 한 행의 데이터가 여러 블록에 분산되어 저장되는 현상입니다.
- 이는 한 행이 여러 블록에 걸쳐 저장되어 있을 때 발생합니다.
- 이로 인해 데이터 읽기 및 쓰기에 대한 오버헤드가 발생하여 성능이 저하될 수 있습니다.
분산 데이터베이스란?
분산 데이터베이스는 여러 지리적으로 분산된 컴퓨터 시스템에 데이터베이스를 저장하고 관리하는 방식을 말합니다.
이는 데이터베이스 시스템을 단일 시스템으로 운영하는 것보다 더욱 확장 가능하고 신뢰성이 높은 데이터 관리 방법을 제공합니다.
CDN 처럼 여러개로 분산되어 저장되어 있지만, 한 군데에서 받을 수 있는 것을 말합니다.
이러한 사실을 몰라도 되는 것을 투명성이라고 합니다.
분산 데이터베이스 구성요소
- 분산 처리기 (Distributed Processor)
- 분산 데이터베이스 환경에서 데이터 처리를 담당하는 컴퓨터 노드 또는 프로세서를 의미합니다.
- 각 분산 처리기는 데이터 접근 및 처리를 수행하고, 통신 네트워크를 통해 다른 처리기와 통신합니다.
- 분산 데이터베이스 (Distributed Database)
- 여러 지역에 분산된 데이터베이스 시스템을 의미합니다.
- 분산 데이터베이스는 데이터의 복제, 분할, 통합을 통해 사용자에게 일관된 뷰를 제공하며, 동시성 제어와 데이터 일관성을 유지합니다.
- 통신 네트워크 (Communication Network)
- 분산 데이터베이스 시스템 간에 통신을 가능하게 하는 네트워크 인프라를 의미합니다.
- 효율적이고 안정적인 통신 네트워크는 데이터 전송 및 동기화에 필수적입니다.
분산 데이터베이스 장/단점
장점 | 단점 |
- 확장성 시스템에 새로운 노드를 추가하여 용량을 확장할 수 있습니다. |
- 복잡성 설계, 구현 및 유지 관리가 복잡합니다. 이로서 비용이 증가됩니다. |
- 가용성 향상 하나의 노드나 시스템 장애 시에도 데이터에 대한 접근을 유지할 수 있습니다. |
- 데이터 일관성 관리 데이터 일관성을 유지하기 위한 복잡한 동기화와 복제가 필요합니다. |
- 지역성 지리적으로 분산된 사용자에게 빠른 응답 속도를 제공할 수 있습니다. |
- 네트워크 부하 데이터 전송 및 동기화에 따른 네트워크 부하가 발생할 수 있습니다. |
- 데이터 로컬리티 분산 데이터베이스에서 데이터가 지역적으로 유지되어 데이터 접근 속도를 향상시킬 수 있습니다. |
- 보안 문 데이터가 여러 위치에 분산되므로 데이터 보안 및 개인 정보 보호가 복잡해집니다. |
- 비용 절감 데이터 센터 및 하드웨어 비용을 분산하여 효율적으로 사용할 수 있습니다. |
- 데이터 일관성 문제 데이터의 복제 및 분할로 인한 일관성 유지가 어려울 수 있습니다. |
분산 데이터베이스의 적용 기법
잘 나오지 않는 파트임으로 Pass하셔도 좋습니다.
적용 기법 | 설명 |
테이블 위치 분산 | 데이터베이스의 테이블을 여러 지리적 위치에 분산하여 지역적 데이터 접근을 최적화합니다. |
테이블 분할 분산 | 데이터베이스의 테이블을 행 또는 열의 기준에 따라 여러 부분으로 분할하여 분산합니다. 수평분할 수직분할 파티션과 동일한 원리 |
테이블 복제 분산 | 데이터베이스의 테이블을 여러 위치에 복제하여 데이터 가용성 및 읽기 성능을 향상시킵니다. 부분 복제 광역 복제 |
테이블 요약 분산 | 데이터베이스의 테이블을 요약된 형태로 분산하여 데이터 접근 및 분석을 용이하게 합니다. 분석요약(Rollup Replication) 통합요약(Consolidation Replication) |
투명성 조건
투명성은 매우 중요한 파트입니다. 반드시 여러 번 읽어 보세요.
투명성 조건 | 설명 |
위치 투명성 | 사용자가 데이터의 위치를 인식할 필요 없이 애플리케이션에서 데이터에 접근할 수 있는 특성. |
분할 투명성 | 사용자에게 데이터의 분할 여부를 노출시키지 않고, 데이터의 분할 및 접근을 투명하게 제공하는 특성. |
지역사상 투명성 | 사용자에게 로컬 및 원격 데이터의 차이를 숨기고, 모든 데이터에 일관된 인터페이스를 제공하는 특성. 지역 DBMS와 물리적 DB 사이의 Mapping 보장 |
중복 투명성 | 데이터의 중복이 발생해도 사용자가 이를 인식하지 못하고, 데이터의 일관성을 보장하는 특성. 중복되든 말든 몰라도됨 |
병행 투명성 | 여러 사용자(트랜잭션)가 동시에 데이터에 접근하더라도 그들 간의 상호작용에 영향을 미치지 않는 특성. |
장애 투명성 | 시스템의 일부 구성 요소에 장애가 발생해도 사용자가 이를 인식하지 못하고, 서비스가 중단되지 않는 특성. |
CAP 이론이란?
CAP 이론은 분산 시스템에서의 일관성(Consistency), 가용성(Availability), 분단 허용성(Partition Tolerance)이라는 세 가지 속성 간의 상충 관계를 설명하는 이론입니다. 이론은 2000년에 컴퓨터 과학자인 Eric Brewer에 의해 제안한 이론.
세가지 속성 중 두 가지만 가질 수 있다는 것
세 가지 모두를 만족할 수 없다.
- 일관성 (Consistency)
- 모든 노드에 대해 특정 시점에서 같은 시간에 같은 데이터를 보장하는 것입니다.
- 일관성을 보장하는 시스템은 모든 읽기 및 쓰기 작업에 대해 최신 데이터를 반환하고, 사용자에게 일관된 뷰를 제공합니다.
- 가용성 (Availability)
- 모든 요청에 대해 성공 또는 실패와 같은 응답을 반환하는 것입니다.
- 항상 응답해야한다.
- 가용성을 보장하는 시스템은 언제나 사용자의 요청에 응답할 수 있어야 합니다.
- 모든 요청에 대해 성공 또는 실패와 같은 응답을 반환하는 것입니다.
- 분단 허용성 (Partition Tolerance)
- 시스템 내의 네트워크 분할로 인해 일부 노드 간의 통신이 끊어진 경우에도 시스템이 계속 작동할 수 있는 것입니다.
- 시스템이 끊어지면 안됨
- 분단 허용성을 가진 시스템은 네트워크 분할이 발생해도 각 분할된 영역에서 독립적으로 작동할 수 있어야 합니다.
- 시스템 내의 네트워크 분할로 인해 일부 노드 간의 통신이 끊어진 경우에도 시스템이 계속 작동할 수 있는 것입니다.
트랜잭션이란?
트랜잭션(transaction)은 데이터베이스 시스템에서 수행되는 작업의 단위를 나타냅니다.
트랜잭션은 데이터베이스의 일관성을 보장하기 위해 한꺼번에 수행되어야 하는 하나 이상의 작업을 포함합니다.
데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하는 작업 단위.
여러 연산이 모두 함께 수행되어야할 때 사용되며 이들은 하나의 트랜잭션으로 묶인다.
트랜잭셕 성질( ACID)
ACID(Atomicity, Consistency, Isolation, Durability) 라는 약어로 종종 표현됩니다.
- 원자성 (Atomicity)
- 트랜잭션의 가장 기본적인 성질으로, 모든 작업이 원자적으로 실행되어야 한다는 것을 의미합니다.
- 즉, 모든 작업이 성공(반영)하거나 실패(반영되지 않아야)해야 합니다.
- 트랜잭션은 부분적으로만 적용되어서는 안 되며, 모든 작업이 완료되면 데이터베이스에 영향을 미쳐야 하며, 어떤 작업이 실패하면 이전 상태로 롤백되어야 합니다.
- 일관성 (Consistency)
- 트랜잭션이 실행(완료)된 후에도 데이터베이스는 일관된 상태를 유지해야 합니다.
- 이는 트랜잭션이 실행되기 전과 후의 데이터베이스 상태가 모순되지 않아야 함을 의미합니다.
- 따라서 데이터베이스의 제약 조건이 항상 만족되어야 하며, 데이터베이스의 일관성이 유지되어야 합니다.
- 격리성 (Isolation)
- 여러 트랜잭션이 동시에 실행될 때, 각 트랜잭션은 다른 트랜잭션의 작업에 영향을 받지 않고 독립적으로 실행되는 것처럼 보여야 합니다.
- 이는 한 트랜잭션의 작업이 다른 트랜잭션에 의해 영향을 받지 않고 실행되어야 함을 의미합니다.
- 지속성(영속성) (Durability)
- 트랜잭션이 성공적으로 완료된 후에는 해당 결과가 영구적으로 저장되어야 합니다.
- 즉, 시스템의 장애 또는 중단이 발생하더라도 트랜잭션의 결과는 영구적으로 유지되어야 합니다.
- 따라서 데이터베이스는 트랜잭션의 결과를 영구적으로 보장하기 위한 적절한 메커니즘을 제공해야 합니다.
트랜잭션 상태 분류
- 활동 (Active)
- 트랜잭션이 시작되었지만 아직 완료되지 않은 상태입니다.
- 트랜잭션은 여전히 실행 중이며, 작업을 수행하고 데이터베이스를 업데이트하고 있습니다.
- 실패 (Failed)
- 트랜잭션이 예상치 못한 이유로 인해 중단된 상태입니다.
- 예를 들어, 데이터베이스 시스템의 오류나 제약 조건 위반 등이 발생할 수 있습니다.
- 철회 (Aborted)
- 트랜잭션이 실패한 후 롤백되어 이전 상태로 복구된 상태입니다.
- 실패한 트랜잭션의 모든 작업은 취소되고, 데이터베이스는 트랜잭션 실행 이전의 상태로 되돌아갑니다.
- 부분 완료 (Partially Committed)
- 트랜잭션이 성공적으로 실행되었지만, 아직 커밋되지 않은 상태입니다.
- 트랜잭션은 모든 작업을 완료했지만, 커밋되기를 기다리는 중입니다.
- 완료 (Committed)
- 트랜잭션이 성공적으로 실행되고 커밋되어 데이터베이스에 영구적으로 적용된 상태입니다. 트랜잭션의 모든 작업이 성공적으로 완료되고 데이터베이스에 영구적으로 반영되었음을 나타냅니다.
'정보처리기사' 카테고리의 다른 글
[정보처리기사] 9. SELECT 문 응용 - 2과목 데이터베이스 구축 (0) | 2024.04.04 |
---|---|
8. SQL의 기본기 - 데이터베이스구축 (0) | 2024.04.02 |
6. 키와 무결성 제약조건 - 2과목 데이터 베이스 구축 - 릴레이션, 속성, 키 (0) | 2024.04.01 |
5. 관계 데이터 모델 - 2과목 데이터 베이스 구축 (0) | 2024.04.01 |
4. 데이터 베이스 물리속성 설계 - 2과목 데이터 베이스 구축 (0) | 2024.03.31 |
댓글