[2015 07-06-윤석준] oracle 성능 최적화 및 품질 고도화 4

26
WareValley http://www.WareValley.com WareValley Oracle 중소기업 DB관리자를 위한 데이터베이스 성능 최적화 및 품질 고도화 전문가 과정 #4 오렌지팀 윤석준 선임연구원

Upload: seok-joon-yun

Post on 06-Aug-2015

111 views

Category:

Documents


11 download

TRANSCRIPT

Page 1: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

WareValleyhttp://www.WareValley.com

WareValley

Oracle중소기업 DB관리자를 위한 데이터베이스

성능 최적화 및 품질 고도화 전문가 과정 #4

오렌지팀 윤석준 선임연구원

Page 2: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

- 1일차 : Tuning 도구- D/B Tuning이 어려운 이유- Oracle D/B 구조- Tuning Tools : AutoTrace, SQL*Trace, V$SQLAREA

- 2일차 : SQL Tuning #1 : Optimizer- Rule-based Optimizer- Cost-based Optimizer- 통계정보, Histogram- Hint

- 3일차 : SQL Tuning #2 : Index, Join- Index- Join

- 4일차 : Server Tuning- Shared pool tuning- Data buffer cache tuning* NoSQL 소개

Page 3: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Oracle Tuning Tools

Design Tuning

Case Tool

SQL Tuning

Turning Tool

(Oracle Enterprise Manager)

Explain Plan

SQL*Trace & TKPROF

Analyze command

Histogram

DBMS_STATS

Stored Outline

Trace 10053 Event

Server Tuning

Turning Tool

(Oracle Enterprise Manager)

STATSPACK

Performance Dynamic View

Data Dictionary

Alert & Trace File

Page 4: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

STATSPACK Package

• 두 시점 사이의 상태 값들의 평균/차이 등을 수집하여 분석

• 8i까지는 utlbstat.sql , tulestat.sql Script를 실행

• 9i에서는 STATSPACK Package를 사용

• 10g 이후부터는 AWR를 사용

(Automatic Workload Repository)

Page 5: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Dynamic Performance View #1

RedoLog

BufferRECYCLE DEFAULT

Data Buffer Cache

SGA(System Global Area)

Java Pool

Large Pool

Streams Pool

Library Cache

•SQL, SQL(recursive SQL)

•Parse Test

•Execution Plan

Data Dictionary Cache

•Row Cache

•Object Information

•Security

Shared Pool

v$sesstatv$sysstat(목표: 적중률 90%)

v$bhv$cachev$buffer_pool

v$sgastatv$shared_pool_reserved(목표: request_failures = 0)

v$librarycache(목표: 비율 90%이상)

v$sqlareav$sqltextv$db_object_cache

v$sgastat

v$rowcache(목표: getmisses-gets 15%)

v$sysstat(목표: request, wait-time값 0)

v$session_wait• 동적으로 변화는 성능에 관련된 정보

• Memory 영역, Process 영역, File 영역 성능에 관련된 정보

Page 6: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Dynamic Performance View #2

• 동시에 많은 사용자가 작업을 실행할 경우 성능 저하 가능

Background Process

PMON SMON DBWR CKPT LGWR ARCn etc

Data files

Tempfiles

RBSfiles

Controlfiles

Redo logfiles

db_write_processesdbwr_io_slavesdb_file_simultaneous_writesdisk_asynch_io

checkpoint_processlog_checkpoint_intervallog_checkpoint_timeoutlog_checkpoint_to_alert

dbwr_io_slavesdisk_asynch_io

v$filestat(목표: 분산배치)

v$datafilev$lock

v$sort_segmentv$sort_usagev$sysstat(목표: disk-mem 5%이하)

v$sysstat(목표: wait-get 1%이하)

v$rollstat(목표: waits-gets 5%이하)

v$transaction

v$system_eventv$controlfile

v$sysstatv$system_eventv$logv$logfile

Page 7: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Dynamic Performance View (예제)

SELECT * FROM V$SGASTAT;

SGA 영역의 현재 상태를 참조 활성화된 메모리 구조 및 각 영역의 크기

SELECT * FROM V$SYSSTAT;

어떤 Resource에서 Wait Event가발생했는지 확인

SELECT * FROM V$FILESTAT;

물리적 구조에서의 R/W 할 때발생하는 File I/O 정보

Page 8: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Alert 파일과 Trace 파일

• BACKGROUND_DUMP_DEST Parameter 위치에 생성

1. alert_<SID>.log

Oracle Database 시작 및 종료시간

시작할 때의 init<SID>.ora 파일의 Parameter 값

Redo file들의 log 스위치된 시간과 마지막 file명

관리자가 새로운 구조를 추가하거나

삭제한 시간과 실행한 SQL문장

Checkpoint가 발생한 시간과 상태

Backup에 관련된 정보 및 Tuning 관련 정보

File의 마지막 부분이 가장 최신 정보

2. Trace 파일 ( *.trc )

Background Processor에 의해서 생성

-> 성능 문제 발생시

사용자가 생성

-> SQL*TRACE 실행

Page 9: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Oracle Server Tuning

Instance Tuning ( = Memory Tuning = SGA Tuning + Process Tuning )

Database Tuning ( = Disk-I/O Tuning = File Tuning )

Resource Tuning ( = Race Condition Tuning = Redo Log, Undo Segment 등… )

* 여기선 Instance Tuning 중 Shared Pool, Data Buffer Cache 에 대해서 간단하게 설명

Page 10: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Shared Pool 현상분석

SELECT * FROM V$LIBRARYCACHE;

90% 이상 유지

SELECT SUM(PINS), SUM(RELOADS),SUM(RELOADS) / SUM(PINS)

FROM V$LIBRARYCACHE;

1% 이하 유지

PINS : 메모리에 남아있는 문장 RELOADS : 제거된 문장

Page 11: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Shared Pool Tuning

1. SHARED_POOL_SIZE를 늘려라. (하지만 근본적 해결책은 아니다.)

2. SQL문 표준화 작업을 하라.

3. Library Cache 관련 Parameter를 조정해라.

- CURSOR_SPACE_FOR_TIME (default false) : FALSE는 FIFO로 동작 , TRUE는 LRU로 동작

- SESSION_CAHCED_CURSORS (default 50) : 세션당 50개의 SQL문 이하로는 제거하지 마라.

- OPEN_CURSORS (default 300) : 세션당 동시에 Open 가능한 Cursor 수

4. 자주 사용하는 PL-SQL문을 Caching 하라.- 길이가 짧고 자주 실행하는 Procedure가 있다면 ?

-> Shared Pool에 KEEP 가능

EXEC DBMS_SHARED_POOL.KEEP(‘<procedure name>’);- 내리는 건 UNKEEP

- 실제로 KEEP되는 건 이후 최초 실행 시

5. Shared Pool을 RESET

ALTER SYSTEM FLUSH SHARED_POOL;

Page 12: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Data Buffer Cache 현상분석

90% 이상 유지

SELECT 1 - (P.VALUE / (C.VALUE + S.VALUE)) "Cache Hit Ratio"FROM V$SYSSTAT C,

V$SYSSTAT S,V$SYSSTAT P

WHERE C.NAME = 'db block gets'AND S.NAME = 'consistent gets'AND P.NAME = 'physical reads'

1. DB_CAHCE_SIZE를 늘려라. (하지만 근본적 해결책은 아니다.)

Data Buffer Cache Tuning

Page 13: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Data Buffer Cache Tuning

2. Multi Buffer Cache 영역 할당

- DB_CACHE_SIZE : 일반적인 SQL문

- DB_KEEP_CACHE_SIZE : 소량의 Data가 빈번하게 사용

- DB_RECYCLE_CACHE_SIZE : 대용량의 Data가 드물게 사용

(Loader 작업이 끝나면 Clear)

ALTER SYSTEM SET DB_KEEP_CACHE_SIZE = 4M;

ALTER SYSTEM SET DB_RECYCLE_CACHE_SIZE = 4M;(9i 이전에는 bytes 단위로 할당하였지만, 10g 이후는 Granule 단위로 할당)

Page 14: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Data Buffer Cache Tuning

2. Multi Buffer Cache 영역 할당

- Multi Buffer Cache에 Loading 될 Table 설정

CREATE TABLE [table name]

( ... )

STORAGE (BUFFER_POOL [ KEEP | RECYCLE ] );

ALTER TABLE [table name]

STORAGE (BUFFER_POOL [ KEEP | RECYCLE ] );

Page 15: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Data Buffer Cache Tuning

3. 자주 사용되는 Table을 Caching

CREATE TABLE [table name] [ CACHE | NOCACHE ];

ALTER TABLE [table name] [ CACHE | NOCACHE ];

SELECT /*+CACHE*/ ...

Page 16: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Data Buffer Cache Tuning

4. Multi Block 구조로 생성

CREATE TABLESPACE [tablespace name]

DATAFILE [file경로 및 이름]

SIZE [크기]

BLOCKSIZE [n] K

10g 이후부터 Tablesapce 별로 Block 크기 설정 가능

Block 별로 Header 영역의 크기가 약 300 byte 정도

Page 17: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Data Buffer Cache Tuning

4. Multi Block 구조로 생성

Block Size가 작을 수록(한 Block에 적은 Row가 저장되므로)

Block Size가 클 수록(한 Block에 많은 Row가 저장되므로)

경합이 적게 발생 집중적인 경합이 발생

WHERE 조건에 의한 Random Scan에 탁월한 성능 개선 Full Table Scan에 탁월한 성능 개선

불필요한 Block Header가 많이 발생 Block Header의 오버헤드가 적게 발생

Index Scan 시 많은 Block을 읽어야 하므로 성능 저하 발생 Index Scan 시 적은 Block을 읽어도 되므로 성능개선이 기대

많은 사용자가 동시에 작업을 수행하는OLTP (Online Transaction Processing)에 적합

소수의 사용자가 대용량 데이터 위주로 검색하는DW (Data Warehouse) 환경에 적합

5. Buffer Cache를 RESET

ALTER SYSTEM FLUSH BUFFER_CACHE;

Page 18: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

NoSQL 이란 ?

No SQL , Not Only SQL( SQL이 아니다. )

Non-Relational Operational Database SQL(관계형 Database가 아닌 SQL)

Page 19: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

Data Repository의 변화

50년대 말 Mainframe 시대 (Host 중심)

- File System

90년대 Internet 시대 (PC의 등장으로 Server/Client 중심)

- RDBMS (MB, GB 단위)

2000년대 무선 Internet 시대 (SNS , Cloud 중심)

- NoSQL (TB, PB 단위)

Page 20: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

NoSQL의 장/단점1. NoSQL의 장점

특성 내용

확장성과 탄력성 데이터가 증가함에 따라서 Node만 늘려주면 된다. 미리부터 시스템의 규모를 예측할 필요가 없다.

고성능 자료 구조가 단순하기에 미리 데이터 인덱싱을 생성할 수 있다. 낮고 예측 가능한 응답시간은NoSQL의 최대 장점이다. 대부분 O(1) ~ O(n)의 시간 복잡도 지원

분산시스템 Cluster에서 Node중 하나가 죽더라도 전체 서비스에 지장이 없다. 물론 RDBMS에도 Replication 할수 있는 시스템은 있으나 NoSQL의 그것과 비교할 때 비용이 크다.

Schema less Scheme가 없기 때문에 유연한 데이터 모델을 가져갈 수 있고, 구조 변경에 따른 비용유발이RDBMS에 비해 매우 적고, 초기 설계기간도 단축된다.

2. NoSQL의 단점

특성 내용

데이터 일관성 트랜잭션을 지원하지 않거나 낮은 수준(Application단 구현)으로 지원한다.복잡한 처리에 적합하지 않다.

데이터 무결성 어플리케이션 단에서 모든 무결성을 보장해야 한다.

Schema less 단일 구조의 데이터 형식이라 Join 과 같은 복잡한 형태의 데이터 조회 방식이 어렵다.

Page 21: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

NoSQL의 특징

1. Clouding Computing 환경에 가장 적합하다.

- Open Source이기에 각 기업 환경에 최적화 구축이 가능

2. 유연한 Data Model 구축이 가능하다.

- Schema가 없으므로 정규화가 필요없음

- 설계 기간 단축 및 운영 중 변경이 유연함

3. Big Data 처리에 효과적이다.

- Memory Mapping 기술로 구현되어 Read/Write 작업이 빠름

4. 구축 비용 및 기간이 RDBMS에 비해 경제적이다.

Page 22: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

NoSQL 제품의 종류

1. Key-Value Database

- Amazon

- Riak, Voldemort, Tokyo*

2. Column-based Database

- Google

- Hbase, Casandra, Hypertable

Data Model에 따른 NoSQL 종류

Page 23: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

NoSQL 제품의 종류

3. Document Database

(JSON / XML)

- Lotus

- MongoDB, Cough DB

4. Graph Database

- Euler & Graph Theory

- AllegroGraph, Sones

Database 제품군

Page 24: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

MongoDB 특징

• humongous 사에서 2007년에 제작, 현재는 10gen으로 회사명 변경

• Document-Oriented Storage : JSON Type (Javascript Object Notation)

• No Schema : Relation을 포기하고 Performance 와 Scalability를 선택

• Auto-sharding : Master DB의 Write 연산을 분산처리

• Replica Sets : Master-Slave 에서 장애 시 자동처리

{ _id: ObjectID('4bd9e8e17cefd644108961bb'),title: 'Adventures in Databases',author: 'msmith',vote_count: 20,tags: ['databases', 'mongodb', 'indexing'],image: {

url: 'http://example.com/db.jpg', caption: '',type: 'jpg',size: 75381,data: 'Binary' },

comments: [{ user: 'bjones',text: 'Interesting article!’},

{ user: 'blogger‘,text: 'Another related' }

]}

Master

Master Master

Slave Slave Slave Slave Slave Slave Slave

SlaveRecovering

Replica Sets

JSONhttp://www.10gen.comhttp://www.mongodb.org

Page 25: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

MongoDB Terminology

SCOTT.EMP

_ID Field(Primary Key)

BSON Field(Column)

BSON Document(Row)

Collection(Table)

Embedded & Linking(RelationShip)

SCOTT.DEPT

Page 26: [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4

MongoDB Command

SELECT * FROM emp; db.emp.find();

SELECT * FROM emp WHERE age = 33; db.emp.find({age:33});

CREATE INDEX emp_ename ON emp(ename); db.emp.ensureindex(ename:1);

INSERT INTO emp VALUES (1,'Luna'); db.emp.insert({empno:1, ename:’Luna’});

UPDATE emp SET ename = ‘Star’WHERE empno = 1;

db.emp.update({empno:1}, {ename:’Star’});

DELETE FROM emp WHERE empno = 1; db.emp.remove({empno:1});