Computers/Databases

seoul accord - day 4. 데이터 튜닝 (Data tuning)

emzei 2012. 10. 21. 19:59


◆ 데이터베이스 튜닝

       ◇ 데이터베이스 성능 개선 작업

       ◇ 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)