CS/DataBase 21

ORACLE D/B

1. SQL 내부 수행구조 ORACLE에서는 디스크에 저장된 데이터 집합(Datafile, Redo Log File, Control File 등)을 데이터베이스라고 부른다. 그리고 SGA (System Global Area) 공유 메모리 영역과 이를 액세스하는 프로세스 집합을 인스턴스라고 부른다. 기본적으로 하나의 인스턴스가 하나의 데이터베이스를 액세스하지만, RAC(Real Application Cluster)환경에서는 여러 인스턴스가 하나의 데이터베이스를 액세스할 수 있다. 2. 데이터 저장구조 물리적으로는 데이터 파일에 데이터를 저장하고 관리한다. 공간을 할당하고 관리하기 위한 논리적 구조를 아래에서 본다. 1) 블록 ( =페이지) 대부분의 DMBS에서는 I/O는 블록 단위로 이루어진다. 데이터를 ..

CS/DataBase 2023.04.21

ORACLE 인덱스

1. 인덱스 기본구조 인덱스는 통상적으로 B*Tree 구조를 가진다. 처음에는 루트 노드에 데이터가 싸이는데 점점 데이터 늘어날 수록 루트 노드 -> 브랜치 노드 -> 리프노드로 연결된다. 인덱스 탐색은 수평적 탐색과 수직적 탐색으로 나뉜다 .수평적 탐색은 인덱스 리프블록에 저장된 레코드끼리 연결된 순서에 따라 좌우로 스킨하기 때문에 수평적 탐색이라한다. 반면, 수직적 탐색은 루프에서 리프가지 아래쪽으로 진행하기 때문에 수직적 탐색이라한다. 2. 인덱스 스캔방식 1) Index Range Scan : 인덱스 루트 블록에서 리프블록까지 수직적으로 탐색한 후에 리프블록을 필요한 범위만 스캔하는 방식이다. ( 가장 일반적이고 정상적인 형태의 액세스 방식이다.) 1-1) Index Range Scan Desce..

CS/DataBase 2023.04.21

ORACLE 파티셔닝

파티셔닝이란 ? 테이블 또는 인덱스 데이터를 파티션 단위로 나누어 저장하는 것을 의미한다. 논리적으로 하나의 테이블을 물리적으로 나누어 저장한다. ex) 로그 테이블 테이블을 파티셔닝한다면 파티션 키에 따라 물리적으로 별도의 세그먼트에 데이터를 저장하며, 인덱스도 별도의 세그먼트에 데이터를 저장한다. -> 파티셔닝은 내부에 몇 개의 세그먼트를 생성하고 그것들이 논리적으로 하나의 오브젝트임을 메타 정보로 딕셔너리에 저장해두는 것에 그치지 않는다. 파티션 되지 않은 일반 테이블은 테이블과 세그먼트가 1:1관계지만, 파티션 테이블일 때는 1:M 관계다. 인덱스를 파티션할 때도 마찬가지다. 관리적 측면에서 파티션 단위로 백업, 추가, 삭제, 변경 가능해 이점이 있다. ex) 보관주기가 지난 데이터를 별도 장치에..

CS/DataBase 2023.04.21

ORACLE 쿼리 조인, 쿼리 튜닝

쿼리 튜닝 기초 1. OLTP 시스템에서 조인을 튜닝할 때는 일차적으로 NL 조인부터 고려 2. NL 조인 메커니즘에 따라 각 단계에서 Random 액세스가 발생하는 지점 파악 3. 조인 순서를 변경해 Random 액세스 발생량 줄이기 OR 인덱스 칼럼 구성을 변경하거나 다른 인덱스의 사용을 고려 4. NL 조인이 효과적이지 못하면 해시조인이나 소트머지 조인 검토 1. Nested Loops 조인 의미 : 중첩 LOOP문 생각 1) 힌트를 이용해 NL 조인 제어 SELECT /*+ ordered use_nl(e)*/* FROM dept d, emp e where d.deptno = d.deptno ordered 힌트는 from 절에 기술된 순서대로 조인하라고 옵티마이저에게 지시할 때 사용, use_nl은..

CS/DataBase 2023.03.10

Lock, DeadLock, Blocking

1. lock SELECT FOR UPDATE : 검색하는 행에 LOCK을 거는 것 1) SELECT FOR UPDATE 할 때 LOCK을 제어할 수 없으면 무한정 기다린다. 즉, 누군가 LOCK 중이면 무한정 기다린다. 2) SELECT FOR UPDATE NOWAIT : SELECT 할 때 LOCK을 제어할 수 없으면 에러처리한다. 3) SELECT FOR UPDATE WAIT : 1)shared lock : 읽기 잠금 - 여러 트랜잭션이 동시에 한 Row에 Shared Lock을 걸 수 있다. 즉, 여러 트랜잭션이 동시에 한 Row를 읽을 수 있다. - Shared Lock이 걸려있는 Row에 다른 트랜잭션이 Exclusive Lock을 걸 수 없다. - 즉, 다른 트랜잭션이 읽고 있는 Row를 수..

CS/DataBase 2023.03.10

Pro*C

1. Pro*C란 ? 대부분의 DBMS는 외부 C 프로그램에서 DB관련 로직을 짤 수 있게 선행 컴파일러를 제공한다. Pro*C란 오라클에서 제공해주는 선행 컴파일러이다. 오라클은 PL/SQL이라는 절차형 언어를 제공한다. 하지만 PL/SQL은 오라클 내부에서 실행되는 프로그램이다. Pro*C는 선행 컴파일러이기 때문에 이 자체만으로 실행파일을 만들어낼 수 없다. Pro*C파일(.pc)파일은 컴파일되어 C프로그램 파일(.c)을 만들어낸다. 그 이후로는 C 프로그램과 똑같다. 2. Pro*C 컴파일 하는 법 소스파일은 SQL문을 포함하며 확장자 .PC를 갖는다. 이 경우 컴파일을 두 번 해주어야 한다. Pro*C 컴파일로 C 파일을 생성하고, C파일을 다시 컴파일해서 실행파일을 만들어 줘야 한다.(.c -..

CS/DataBase 2023.01.08

ORACLE 실행계획, Hint, SQL 튜닝

1. 실행계획 실행계획이란 사용자가 요청한 SQL을 최적으로 수행하고자 옵티마이저가 수립한 일련의 처리 절차를 트리구조로 표현한 것이다. (실행계획을 통해 SQL이 테이블을 스캔하는지, 인덱스를 스캔하는지 확인할 수 있다.) SQL을 수행하기 전에 실행계획을 확인하려면 explain plan 명령어를 사용한다. 이 명령어를 사용하기 전에 plan_table을 생성해야 하며 아래 스크립트 실행하면 plan_table 만들어진다. SQL> @?/rdbms/admin/utlxplan.sql 하지만 10g 버전부턴 오라클이 기본적으로 sys.plan_table$ 테이블을 만들고 'PLAN_TABLE'으로 synonym도 생성하기 때문에 위 스크립트 실행하지 않아도 된다. 실행 계획을 보는 방법에는 EXPLAIN..

CS/DataBase 2022.12.31

ORACLE 식별자

식별자 분류 방식 속성 수에 따라 단일 식별자(하나의 속성으로 구성된 식별자), 복합 식별자( 둘 이상의 속성으로 구성된 식별자) 예를 들어 교육 이력 table에서 사원번호와 수강일자를 복합 식별자로 가질 수 있다. 대체 여부에 따라 본질식별자(업무에 의해 만들어지는 식별자)와 인조식별자(업무적으로 만들어지지는 않지만 원조 식별자가 복잡한 구성을 갖고 있어서 인위적으로 만든 식별자) 예를 들어 접수 테이블에서 접수번호 = 관할부서(3) + 접수일자(8) + 일련번호(3)로 인조식별자를 통해 구성할 수 있다. 외부식별자는 자기 자신의 엔터티에서 필요한 속성이 아닌 다른 엔터티와의 관계에서 자식쪽에 생성되는 엔터티에 생성되는 속성을 말한다. (데이터 베이스 생성시 Foreign Key 역할을 함) 외부식별..

CS/DataBase 2022.12.31

DB ConnectionPool

1. 커넥션 풀(DBCP)이란? 웹 컨테이너(WAS)가 실행되면서 DB와 미리 connection을 해놓은 객체들을 pool에 저장했다가, 클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식을 말한다. 자바에서 DB에 직접 연결해서 처리할 경우(JDBC)드라이버를 로드하고 커넥션 객체를 받아와야 한다. 이럴 경우 매번 사용자가 요청할 때 마다 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 매우 비효율적이다. 이를 해결하기 위해 DBCP를 사용한다. DBCP는 웹 컨테이너(WAS)가 실행되면서 connection객체를 미리 pool에 생성해 두고, HTTP 요청에 따라 pool에서 connection객체를 ..

CS/DataBase 2022.12.30

Lock 과 트랜잭션 동시성 제어

1. Lock 영화관 예약 시스템에서 두 명이 동시에 한 좌석을 요청할 때 정확히 한명만 좌석을 배정받을 수 있도록 해야한다. 이 때 사용되는 개념이 Lockdlek. 가. 공유적 Lock(Shared Lock) 공유 Lock은 데이터를 읽을 때 사용한다. 공유 Lock을 설정한 리소스에 다른 트랜잭션이 추가로 공유 Lock을 설정할 수 있지만, 배타적 Lock은 설정 불가능하다. 따라서 자신이 읽고 있는 리소스를 다른 사용자가 동시에 읽을 수는 있어도 변경은 불가능하다. 또한, 다른 사용자가 읽고 있는 리소스를 동시에 읽을 수 는 있어도 변경은 불가능하다. 나. 배타적 Lock 배타적 Lock은 데이터를 변경할 때 사용하며, 트랜잭션이 완료될 때까지 유지된다. 배타적 Lock은 Lock이 해제될 때까지..

CS/DataBase 2022.12.29