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

[2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

Embed Size (px)

Citation preview

Page 1: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

WareValleyhttp://www.WareValley.com

WareValley

Oracle중소기업 DB관리자를 위한 데이터베이스성능 최적화 및 품질 고도화 전문가 과정

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

Page 2: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

- 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-06-12] Oracle 성능 최적화 및 품질 고도화 1

Database Tuning의 원인과 결과

CPU Memory I/O Network Software

설계 Design/Architecture O O O O O

Coding

DML SQL O O O O O

Query SQL O O O O O

Client/Server Roundtrips O O

D/B 관리

Buffer Cache O O O

Shared Pool O O

Sort Area O O O

Physical Datafile I/O O O

Logfile I/O O O

Archiver-File I/O O O

Undo Segments O O

Locking O O O O

Backups O O O O

Infra( OS + Network)

O/S Memory Manage O O O

O/S I/O Manage O O O

OS Process Manage O O

Network Manage O O

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

Database Tuning이 어려운 이유

개발자

- SQL Tuning 만 한다.

DBA

- D/B Tuning 만 한다.

Server Admin

- Server, OS 관리만 한다.

분석/설계자

- 보통 문제는 설계가 다 끝난 후 생겨서다시 불러서 뭐라 하기가 쫌…(그리고 무엇보다도… 부를려니… 비싸.)

슈발자

- 모든 면에서 문제를 파악해서궁극적으로 해결이 가능한슈발자 (슈퍼 개발,관리자)가 있다면…과연 있을까 ???

Page 5: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

Process 영역

User Process, Server Process, Background Process

Memory 영역 (SGA)

Shared pool , Data buffer cache , Log buffer, Large pool

File 영역

Control file, Parameter file, Tablespace file, Redo-log file

Oracle D/B 구조

Page 6: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

Server용 Tablespace

- SYSTEM : Dictionary tables, Meta tables, System tables

- UNDO : Transaction 변경 내용의 임시 공간

- TEMP : 2차 가공용 임시공간 ( ORDER BY , GROUP BY )

Tablespace 설계시 유의사항

- 사용자의 Data를 Server용 Tablespace에 생성하지 마세요.

(System table에서는 항상 엄청난 DML 연산이 일어나고 있습니다.)

- Table과 Index의 Tablespace를 분리하세요. (Block size를 다르게 설정하면 좋아요.)

- 각 Data Tablespace를 분리하면 I/O 경합을 줄일 수 있어요.

- 대용량 Sorting 작업용 TEMP Tablespace를 해당 작업 또는 사용자 만큼

분리하여 할당하세요.

Tablespace

Page 7: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

Check

Tablespace Fragmentation

SELECT TABLESPACE_NAME, TOTAL_EXTENTS, PERCENT_EXTENTS_COALESCEDFROM DBA_FREE_SPACE_COALESCEDWHERE PERCENT_EXTENTS_COALESCED <> 100;

Solution

1. 빈 공간을 합병

2. Table 생성시 미리 충분한 공간으로 할당

INITIAL, NEXT, MINEXTENTS, MAXEXTENTS, PCTINCREASE 값을 충분히 예상한 후 할당

3. 사용되지 않는 저장공간을 Disk로 반환

ALTER TABLESPACE USERS COALESCE; (한번에 100%가 되진 않으니 여러 번 반복)

ALTER TABLE BIG_EMP DEALLOCATE UNUSED;

Page 8: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

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 9: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

AUTOTRACE

SET AUTOTRACE [ ON | OFF | TRACE ]

- TRACE : 실행계획, 통계정보

- OFF : 실행결과

- ON : OFF + TRACE 모두

Statistics value

recursive calls 해당 SQL을 실행하기 위해 읽은 Dictionary의 Block

db block gets current mode의 block을 읽은 수 (수정될 값을 읽음)

consistent gets query mode 의 block을 읽은 수 (consistent 보장)

physical reads disk에서 읽은 block 수

redo size 사용한 redo block

sorts (memory) 사용한 temp block (memory)

sors (disk) 사용한 temp block (disk)

rows processed 읽은 row 수

Page 10: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

SQL*TRACE + TKPROF

trace 파일 위치 확인

ALTER SESSION SET SQL_TRACE = TRUE;

SELECT * FROM SCOTT.EMP;

EXIT

SHOW PARAMETER BACKGROUND_DUMP_DEST;

Trace 실행

TKPROF로 읽기 편하게 분석

> TKPROF ORCL_ORA_15196.trc T15196.tkf SYS=NOEXPLAIN = SYSTEM/***

실행계획 보는 법은 각자 쫌…..

Page 11: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

Orange Trace Tool을 이용한 trc 분석

Page 12: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

V$SQLAREASELECT sql_text, version_count, loads, invalidations, parse_calls, sorts , disk_reads, buffer_gets

FROM V$SQLAREAWHERE sql_text NOT LIKE '%$%' AND command_type IN (2,3,6,7)ORDER BY parse_calls DESC;

Column value

sql_text SQL 문장

version_count 해당 문장을 실행한 사용자 ID 수

loads Parsing후 SQL문이 Memory로 Load된 수

invalidations Parsing후 해당 Table이 ALTER, DROP, ANALYZE 되어 재사용할수 없음

parse_calls 최초 Parsing후 재사용된 수

sorts 수행된 Sorting 수

command_type Oracle command type : 2 (insert), 3 (select), 6 (update), 7 (delete)

disk_reads DISK-I/O를 유발과 관련된 수

buffer_gets Buffer cache를 사용과 관련된 수두 항목이 높은 순으로 Top 10 으로 조회한 뒤 Tuning

Page 13: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

Orange SQL Monitor Tool

Page 14: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

WHERE절의 상수값, Bind Variable 만 다른 경우도 SQL Parsing 결과 공유

CURSOR_SHARING

SELECT sql_text, version_count, loads, invalidations, parse_calls, sortsFROM V$SQLAREAWHERE sql_text LIKE 'SELECT * FROM SCOTT.DEPT WHERE DEPTNO = %' ANDcommand_type = 3ORDER BY parse_calls DESC;

검사용 SQL

ALTER SYSTEM SET CURSOR_SHARING = [ EXACT | SIMILAR | FORCE ]

SET value

EXACT 모든 조건이 일치해야만 공유

SIMILAR 바인드 변수가 다른 값을 가지더라도 공유

FORCE 상수가 다르더라도 공유

Page 15: [2015-06-12] Oracle 성능 최적화 및 품질 고도화 1

CURSOR_SHARING (예제)