◆ 데이터베이스 튜닝
◇ 데이터베이스 성능 개선 작업
◇ DBMS의 내부 동작에 대한 깊은 이해 필요
- transaction, index ,recovery...etc.
◆ transaction - sequence of operations treated as a unit
◇ SQL에서 transaction
- commit : 트랜잭션 종료
- rollback : 트랜잭션 취소
(롤백의 대상 : DML / insert, delete, update )
-autocommit : SQL 문장 하나 단위로 트랜잭션 ~ 오버헤드가 큼 --- 롤백안된다 -- 속도도 느려짐
◇ 트랜잭션 목적
- tarnsacton - 기본 속성 : ACID -- Atomictiy / consistentcy /isolation / durability
- Concurrency
: concurrency control 보장
- Recovery
◇ Isolation level
http://en.wikipedia.org/wiki/Isolation_level
- Read Uncommitted / Read Committed / Repeatable Read
- serializable : serial한 수행과 동일한 결과 보장
(참고) --- 높은수준의 isolation level일 수록 concurrency는 떨어지나, consistency는 더 높아짐.
( 성능이랑 정확성은 상충관계)
- Isolation Level
○ Read uncommitted
- dirty read 허용, serializable하지 않은 schedule 발생가능
○ Read committed
- dirty read 허용안함, nonrepeatable read
○ Repeatable Read
- Dirty read 허용안함, repeatable read 보장
- Phantom Read problem 발생 가능
○ Serializable
- 항상 serializable한 결과 보장
- No dirty read
- Repeatable Read
- No phantom read
[참고] oracle은 readcommitted와 serializable만 제공
◇ Concurrency control 구현법
- http://en.wikipedia.org/wiki/Concurrency_control
- 대부분 Lock 이용하여 구현 ~ Deadlock 문제 발생 가능
- 트랜잭션의 isolation level이나 속성을 잘 지정해야함
- set transaction READ ONLY : read연산만 가능한 transaction 정의
◇ Recovery 구현 방법
- LOG를 별도로 기록함 : REDO / UNDO
* commit한 것에 대해서만 redo 로그를 통해 반영하여 살려주기
- Write-ahead Logging (WAL) http://en.wikipedia.org/wiki/Write-ahead_logging
- physical Logging vs. logical Logging vs. Physiological Logging
- Shadow paging http://en.wikipedia.org/wiki/Shadow_paging
: sqlite같은 작은 규모의 DB에서 많이 사용. 데이터 사이즈가 작은 경우 유용
- CheckPoint 기법 : 주기적으로 사용 / recovery 시간 절약
http://en.wikipedia.org/wiki/Database_checkpoint
◆ INDEX
◇ DBMS 저장 구조
- Heap File, Index, ...
◇ index 장점
- 대량의 데이터에서 특별한 값을 빠르게 검색
- 검색, 조인, 정렬 ...
◇ index 단점
- 유지비용
- 저장공간
◇ index는 언제 쓰나?
- where 절의 조건, 또는 join에 자주 사용되는 컬럼
- 매우 큰 테이블에서 2~4% 레코드만 선택될 때
- 값의 종류가 다양할 때
- 값이 자주 변하지 않을 때
◇ Oracle 인덱스
- 종류 : b+ tree (일반적), bitmap 인덱스
- 구분 : 단일 열/복합 열, unique/Non-unique, column data vs.Function-based, Automatic-create vs. User-created
◇ B+ Tree
- http://en.wikipedia.org/wiki/B%2Btree
◇ Oracle의 데이터 접근 방법
- full table scan - 전체 테이블 순차 접근
- index scan - 인덱스 접근
* index unique
* index range
* index full scan
◇ Query Optimizer : http://en.wikipedia.org/wiki/Query_optimizer
- optimizer가 주어진 query 처리 방법 결정 : cost-based / heuristic-based
◇ Composite Index , Covering Index
- http://en.wikipedia.org/wiki/Index_(database)
- composite index : 둘 이상의 컬럼의 쌍에 대한 인덱스. 순서가 중요함.
- covering index ( covered query ) : table 참조없이, index만 갖고 처리 가능. 일반적으로 성능 우수
◇ Hint Index
- 강제로 질의에서 특정 인덱스를 사용하도록 함.
- http://en.wikipedia.org/wiki/Hint_(SQL)
'Computers > Databases' 카테고리의 다른 글
ch 6. Formal Relational Query Languages (Part 2. Tuple Relational Calculus & Domain Relational Calculus) (0) | 2016.07.11 |
---|---|
ch 6. Formal Relational Query Languages (part1. Relational Algebra) (0) | 2016.07.11 |
seoul accord - day 3. 데이터 모델링 (Data modeling) (0) | 2012.10.21 |
sqlplus 터미널 사이즈 변경 (0) | 2012.10.21 |
seoul accord - day 2. SQL 기본 (0) | 2012.10.21 |