본문 바로가기

DB/SQLP21

[J STORY] SQLP - 옵티마이저 1. 옵티마이저 옵티마이저란? SQL을 가장 빠르고 효율적으로 수행할 최적(최저비용)의 처리경로를 생성해 주는 DBMS 내부의 핵심엔진이다. SQL 최적화 과정 사용자가 던진 쿼리 수행을 위해, 후보군이 될만한 실행계획을 찾는다. 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상비용을 산정한다. 각 실행계획을 비교해서 최저비용을 갖는 하나를 선택한다. 나. 옵티마이저 종류 1) 규칙기반 옵티마이저( = Heuristic 옵티마이저 ) 미리 정해 놓은 규칙에 따라 액세스 경로를 평가하고 실행계획을 선택한다. 규칙? 액세스 경로별 우선순위로서, 인덱스 구조, 연산자, 조건절 형태가 순위를 절정짓는 주요인다. 2) 비용기반 옵티마이저 테이블과 인덱스에 대한 여러 통계정보를 기초로 각 오퍼레이션 단.. 2021. 4. 28.
SQLP - 동시성 제어 1. 동시성 제어 DBMS는 다수의 사용자를 가정하며, 동시에 작동하는 다중 트랜잭션의 상호 간섭 작용에서 데이터베이스를 보호 할 수 있어야 하며, 이를 동시성 제어(Concurrency Control)이라 한다. 동시성을 제어할 수 있도록 하기 위해 모든 DBMS가 공통적으로 Lock 기능을 제공. SET TRANSACTION 명령어를 이용해 트랜잭션 격리성 수준을 조정할 수 있는 기능도 제공. SQL Server의 경우, 기본 트랜잭션 격리성 수준인 Read committed 상태에선 레코드를 읽고 다음 레코드로 이동하자 마자 공유 Lock을 해제하지만, Repeatable Read로 올리면 트랜잭션을 커밋될 대까지 공유 Lock을 유지 동시성과 일관성의 상관관계 가. 비관적 동시성 제어 (Pessi.. 2021. 4. 28.
[J STORY] SQLP - 트랜잭션 트랜잭션(Transaction)은 업무 처리를 위한 논리적인 작업 단위이다. 1. 트랜잭션의 특징 원자성(Atomicity) 트랜잭션은 더 이상 분해가 불가능한 업무의 최소단위이므로, 전부 처리되거나 아예 하나도 처리되지 않아야 함. 일관성(Consistency) 일관된 상태의 데이터베이스에서 하나의 트랜잭션을 성공적으로 완료하고 나면 그 데이터베이스는 여전히 일관된 상태여야 함. 격리성(Isolation) 실행 중인 트랜잭션의 중간 결과를 다른 트랜잭션이 접근할 수 없음 영속성(Durability) 트랜잭션이 일단 실행을 성공적으로 완료하면 그 결과는 데이터베이스에 영속적으로 저장. 2. 트랜잭션 격리성 가. 낮은 단계의 격리성 수준에서 발생할 수 있는 현상들 1) Dirty Read 다른 트랜잭션에 .. 2021. 4. 27.
[J STORY] SQLP - LOCK 1. LOCK 가. Lock이란? 같은 자원을 액세스하려는 다중 트랜잭션 환경에서 데이터베이스의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을보장할 수 있는 직렬화(Serialization) 장치이다. 나. 공유 Lock과 배타적 Lock 1) 공유 Lock 공유(Shared) Lock은 데이터를 읽고자 할 때 사용 다른 공유 Lock과는 호환되지만 배타적 lock과는 호환되지 않음 2) 배타적 Lock 배타적(Exclusive) Lock은 데이터를 변경하고자 할 대 사용되며, 트랜잭션이 완료될 때까지 유지 해당 Lock이 해제될 때까지 다른 트랜잭션은 해당 Resource에 접근할 수 없음 다. 블로킹과 교착상태 1) 블로킹 Lock경합이 발생해 특정 세션이 작업을 진행하지 못하고 멈춰 선 .. 2021. 4. 26.
[J STORY] SQLP - 데이터베이스 I/O 원리 1. 블록단위 I/O 데이터 파일에서 DB 버퍼 캐시로 블록을 적재할 때 데이터 파일에서 블록을 직접 읽고 쓸때 버퍼 캐시에서 블록을 읽고 쓸때 버퍼 캐시에서 변경된 블록을 다시 데이터 파일에 쓸 때 2. 메모리 I/O VS 디스크 I/O 가. I/O 효율화 튜닝의 중요성 디스크를 경우한 데이터 입출력은 디스크의 액세스 암(Arm)이 움직이면서 헤드를 통해 데이터를 읽고 쓰기 때문에 느림 메모리를 통한 입출력은 전기적 신호에 불과하기 때문에 디스크를 통한 I/O에 디해 비교할수 없을정도로 빠름 모든 DBMS는 읽고자 하는 블록을 먼저 버퍼 캐시에서 찾고 ,없을경우에는 디스크에서 읽어 버퍼 캐시로 적재 후 읽기/쓰기 작업을 수행 이러한 이유로 모든 데이터를 메모리에 올려놓고 사용하면 좋겠지만 메모리는 물리.. 2021. 4. 26.
[J STORY] SQLP - 데이터베이스 CALL과 네트워크 부하 1. 데이터베이스 CALL 종류 가. SQL 커서에 대한 작업 요청에 따른 구분 Parse Call : SQL 파싱을 요청하는 Call Execute Call : SQL 실행을 요청하는 Call Fetch Call : SELECT 문의 결과 데이터 전송을 요청하는 Call select cust_nm, birthday from customer where cust_id = :cust_id call count cpu elapsed disk query current rows ----- ------ ----- ------- ---- ----- ------ ----- Parse 1 0.00 0.00 0 0 0 0 Execute 5000 0.18 0.14 0 0 0 0 Fetch 5000 0.21 0.25 0 200.. 2021. 4. 25.