oracle korea / 2005 . 07

79
1 Oracle Korea / 2005 . 07 . 오오오 DataBase 오오

Upload: jamal

Post on 13-Jan-2016

85 views

Category:

Documents


0 download

DESCRIPTION

오라클 DataBase 소개. Oracle Korea / 2005 . 07. 목 차. ORACLE 기술진화 로드맵 데이타베이스 소개 ORACLE 장점 시장점유율 시스템에서 주로 발생하는 문제점. Oracle Database 소개. 1. 오라클의 기술 진화 로드맵. 2001 년 /2003 년 e-Business 를 위한 개발 환경 높은 확장성 및 품질 시장의 확대 (Extend Market – Globalization) On-Line Management DBA 생산성 향상. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Oracle Korea / 2005 . 07

1

Oracle Korea / 2005 . 07 .

오라클 DataBase 소개오라클 DataBase 소개

Page 2: Oracle Korea / 2005 . 07

목 차

1. ORACLE 기술진화 로드맵

2. 데이타베이스 소개

3. ORACLE 장점

4. 시장점유율

5. 시스템에서 주로 발생하는 문제점

1. ORACLE 기술진화 로드맵

2. 데이타베이스 소개

3. ORACLE 장점

4. 시장점유율

5. 시스템에서 주로 발생하는 문제점

Page 3: Oracle Korea / 2005 . 07

3

90 대말 /2000 년 초Web Server 중심3-Tier 구조JAVA 확산B-to-C/B-to-Be-Business 대두

92~96 년대 중반분산형 트랜잭션OLTP/DW 중심데이타 /APP 분리GUI/Tool 전성시대서버 저 비용클라이언트 고비용

2001 년 /2003 년e-Business 를 위한 개발 환경높은 확장성 및 품질시장의 확대 (Extend Market –Globalization)On-Line ManagementDBA 생산성 향상

1. 오라클의 기술 진화 로드맵

인터넷 기반 지원 RDBMS

JVM 내장 (EJB,CORBA)

JAVA 코드내 SQL 문 내장 (SQLJ)

멀티미디어 컨텐츠관리

(Oracle Inter Media)

Oracle Database 소개

Page 4: Oracle Korea / 2005 . 07

4

Shared SQL Area Dictionary Cache

SQL, PL/SQL 문장의 텍스트

SQL, PL/SQL 문장의 분석된 형태(Parsed form)

SQL, PL/SQL Execute Plan

Data Dictionary

Character SetNetwork SecurityEtc… * ORACLE DBA 과정 : SQL/PLSQL, Administration, Backup & Recovery, Network, Tunnig

SGAData Buffer Cache

Redo Log BufferShared Pool

SNPnSNPn LCKnLCKnRECO

RECO PnnnPnnn SnnnSnnn DnnnDnnn

DBWnDBWn

CKPTCKPT

LGWRLGWR

ARCHARCH

SMONSMON

PMONPMON

Server P

Server P UserUser

LISTENER

Back Ground PRO’

INSTANCE = SGA+BGP

Data File

SELECT EMPNO, NAME FROM EMPWHERE EMPNO = :NO ;

…….. = ‘123’;

DBMS = Instance + DB

가 . Architecture

2. 데이타베이스 소개

Oracle Database 소개

Page 5: Oracle Korea / 2005 . 07

5

나 . SGA(System Global Area)

Oracle ServerOracle Server 가 시작될 때마다 시스템 전역 영역가 시작될 때마다 시스템 전역 영역 (SGA)(SGA) 이 메모리에 할당된다이 메모리에 할당된다 ..

SGASGA 는 는 Oracle DBMSOracle DBMS 에 대한 데이터와 제어 정보를 갖고 있는 공유 메모리 구조의 그룹이다에 대한 데이터와 제어 정보를 갖고 있는 공유 메모리 구조의 그룹이다 ..

SGASGA 의 데이터는 여러 사용자간에 공유된다의 데이터는 여러 사용자간에 공유된다 ..

SGASGA 는 종종 “공유 전역 영역는 종종 “공유 전역 영역 (Shared Global Area)”(Shared Global Area)” 이라고 부르기도 한다이라고 부르기도 한다 ..Instance = background process + sgaInstance = background process + sga

SGA

Database Buffer Cache

Redo Log Buffer

SharedPool

Oracle Database 소개

Page 6: Oracle Korea / 2005 . 07

6

나 . SGA : Shared Pool

- Shared Pool 은 공유 SQL 영역과 Data Dictionary Cache

구조를 갖고 있는 SGA 의 일부분이다 .

- 공유 SQL 영역은 SQL 문장 하나를 실행하는 데에 이용된

정보를 갖고 있으며 동일한 SQL 문장을 실행하는

프로세스들간에 정보를 공유 할 수 있다 .

- 완전히 동일한 문장만 같은 메모리에 위치한다 .

- 공유 SQL 영역은 Library Cache 라고 부르기도 한다 .

- Data Dictionary Cache 는 데이터베이스와 그 구조 , 사용자에

대한 참조 정보를 갖고 있는 데이터베이스 테이블과 뷰의

집합이다 .

모든 테이블과 뷰의 이름

테이블의 컬럼 명과 데이터 유형

모든 사용자의 권한

Shared Pool

Shared SQL Area Dictionary Cache

SQL, PL/SQL 문장의 텍스트

SQL, PL/SQL 문장의 텍스트

SQL, PL/SQL 문장의 분석된 형태 (Parsed form)

SQL, PL/SQL 문장의 분석된 형태 (Parsed form)

SQL, PL/SQL Execute Plan

SQL, PL/SQL Execute Plan

Data Dictionary

Data DictionaryCharacter SetNetwork SecurityEtc…

Character SetNetwork SecurityEtc…

Oracle Database 소개

Page 7: Oracle Korea / 2005 . 07

7

다 . Database Buffer Cache

- 디스크에서 읽은 데이터 블록의 복사본을 가지고 있다 . 동시 접속된

사용자들은 Database Buffer Cache 를 공유 하여 Access 한다 .

- 캐시 실패 (Cache Miss)

데이터를 처음 Access 하는 것이라면 서버 프로세스는

디스크로부터 데이터를 읽어서 캐시에 올린다 .

- 캐시 적중 (Cache Hit)

데이터의 Access 할 때 이미 캐시에 있다면 메모리 ( 캐시 ) 에서

직접 데이터를 읽는다 .

- 캐시 적중 율 (Hit Ratio) 를 높이는 것은 중요한 Tuning Point 이다 .

- Hit Ratio 를 90% 정도로 유지하는 것이 좋다 .

- 캐시 적중을 통한 Database Access 가 훨씬 빠르다 .

- LRU(Least Recently Used) 알고리즘으로 운영 된다 .

Oracle Database 소개

Page 8: Oracle Korea / 2005 . 07

8

라 . 필수 Background Process

PMON(Process Monitor)PMON(Process Monitor)

비정상적으로 종료된 리소스 정리

Commit 되지 않은 Transaction Rollback

이미 종료된 Process 가 점유한 Lock 해제

실패한 Process 에 할당된 SGA Resource 회수

실패한 Shared Server 와 Dispatcher 재시작

SMON(System Monitor)SMON(System Monitor)

Automatically Instance Recovery

더 이상 사용하지 않은 Temporary Segment 가 사용한 공간 회수

Data File 에서 사용 가능한 공간의 연속적인 영역 병합

PMON(Process Monitor)PMON(Process Monitor)

비정상적으로 종료된 리소스 정리

Commit 되지 않은 Transaction Rollback

이미 종료된 Process 가 점유한 Lock 해제

실패한 Process 에 할당된 SGA Resource 회수

실패한 Shared Server 와 Dispatcher 재시작

SMON(System Monitor)SMON(System Monitor)

Automatically Instance Recovery

더 이상 사용하지 않은 Temporary Segment 가 사용한 공간 회수

Data File 에서 사용 가능한 공간의 연속적인 영역 병합

Oracle Database 소개

Page 9: Oracle Korea / 2005 . 07

9

DBWR(DB Writer)DBWR(DB Writer) DBWR 은 변경된 모든 버퍼의 내용을 데이터 파일에 기록 “dirty” 버퍼를 디스크에 기록하여 “ clean” 상태로 유지 사용자 프로세스가 비어있는 버퍼를 찾을 수 있도록 버퍼캐시를 관리

* 동작시점

- 더티 버퍼수가 임계값에 도달했을때

- 프로세스가 지정된 갯수의 블록을 스캔하고도 프리버퍼를 발견하지 못햬을때 .

- 시간 초과시

- 체크포인트 발생시 (db shutdown 등 )

LGWR(Log Writer)LGWR(Log Writer) Redo Log Buffer 를 디스크에 있는 Redo Log File 에 기록 Redo Log Buffer 의 관리

* 동작시점

- 리두로그 버퍼의 1/3이 찼을때

- 시간 초과시 (3초 )

- 트랜잭션 커밋시

- dbwr 이 버퍼캐쉬에서 수정된블록을 데이타파일로 적기전에 -ckpt

DBWR(DB Writer)DBWR(DB Writer) DBWR 은 변경된 모든 버퍼의 내용을 데이터 파일에 기록 “dirty” 버퍼를 디스크에 기록하여 “ clean” 상태로 유지 사용자 프로세스가 비어있는 버퍼를 찾을 수 있도록 버퍼캐시를 관리

* 동작시점

- 더티 버퍼수가 임계값에 도달했을때

- 프로세스가 지정된 갯수의 블록을 스캔하고도 프리버퍼를 발견하지 못햬을때 .

- 시간 초과시

- 체크포인트 발생시 (db shutdown 등 )

LGWR(Log Writer)LGWR(Log Writer) Redo Log Buffer 를 디스크에 있는 Redo Log File 에 기록 Redo Log Buffer 의 관리

* 동작시점

- 리두로그 버퍼의 1/3이 찼을때

- 시간 초과시 (3초 )

- 트랜잭션 커밋시

- dbwr 이 버퍼캐쉬에서 수정된블록을 데이타파일로 적기전에 -ckpt

Oracle Database 소개

Page 10: Oracle Korea / 2005 . 07

10

SGAData Buffer Cache Redo Log BufferShared Pool

SNPnSNPn LCKnLCKnRECO

RECO PnnnPnnn SnnnSnnn DnnnDnnn

DBWnDBWn

CKPTCKPT

LGWRLGWR

ARCHARCH

SMONSMON

PMONPMON

Server Server UserUser

Sql 처리순서

마 . SQL 처리과정

LISTENER

Shared SQL Area Dictionary Cache

SQL, PL/SQL 문장의 텍스트

SQL, PL/SQL 문장의 텍스트

SQL, PL/SQL 문장의 분석된 형태(Parsed form)

SQL, PL/SQL 문장의 분석된 형태(Parsed form)

SQL, PL/SQL Execute Plan

SQL, PL/SQL Execute Plan

Data Dictionary

Data Dictionary

Character SetNetwork SecurityEtc…

Character SetNetwork SecurityEtc…

Back Ground PRO’INSTANCE = SGA+BGP

Data File

SELECT EMPNO,NAME FROM EMPWHERE EMPNO = ‘123’;

ㅇ Parse : Sintax, Semantics(User, Object, Privilege), -> Optimizer (Excution Plan, Row Source 생성 ), Binding : 변수처리ㅇ Execute : Physical Read, Logical Readㅇ Fetch

ㅇ Parse : Sintax, Semantics(User, Object, Privilege), -> Optimizer (Excution Plan, Row Source 생성 ), Binding : 변수처리ㅇ Execute : Physical Read, Logical Readㅇ Fetch

Oracle Database 소개

Page 11: Oracle Korea / 2005 . 07

11

바 . Instance 시작 과 종료

- Server Manager 를 사용하여 데이터베이스를 관리하고 모니터 할 수 있다 .

- SYSDBA 나 SYSOPER Role 로 데이터베이스 접속

- 운영체제가 암시적으로 권한을 제공하기 때문에 SYSDBA 로 접속하는 경우 암호는 필요 없다 .

- 8i 이상일경우 SQLPLUS 로 접근한다

- 퍼스널 오라클 : c:\Oracle\Ora81\Bin\>svrmgrl

V7.2 : sqldba lmode=y V7.3 - 8i : svrmgrl V8I – 10g : sqlplus “/ as sysdba”

- Server Manager 를 사용하여 데이터베이스를 관리하고 모니터 할 수 있다 .

- SYSDBA 나 SYSOPER Role 로 데이터베이스 접속

- 운영체제가 암시적으로 권한을 제공하기 때문에 SYSDBA 로 접속하는 경우 암호는 필요 없다 .

- 8i 이상일경우 SQLPLUS 로 접근한다

- 퍼스널 오라클 : c:\Oracle\Ora81\Bin\>svrmgrl

V7.2 : sqldba lmode=y V7.3 - 8i : svrmgrl V8I – 10g : sqlplus “/ as sysdba”

$ sqldba lmode=yConnected.

$ svrmgrlConnected.

$ sqlplus “/as sysdba”Connected.

SERVER MANAGER

Oracle Database 소개

Page 12: Oracle Korea / 2005 . 07

12

사 . Instance 구동 절차

NOMOUNT, MOUNT, OPEN 은 상호 배타적이다 . 예컨대 , STARTUP MOUNT OPEN 이라는 명령은 사용 할 수 없다 .

STARTUP NOMOUNT 를 수행하면 Instance 가 시작 된다 .STARTUP MOUNT 를 수행하면 Instance 가 시작되고 Control 파일이 Open 된다 .Log 파일이나 Data 파일의 이름 변경 , 복구 등의 작업은 MOUNT 상태에서 가능하다 .STARTUP MOUNT 로부터 모든 사용자가 쓸 수 있도록 데이터베이스를 Open 하려면 ALTER DATABASE O

PEN 명령을 수행한다

SHUTDOWN

NOMOUNT(disclose)

MOUNT(close)

OPEN

Instance 시작

Instance 에 대한Control 파일 오픈

Instance 의 Control파일에 기술된 모든파일 오픈

START UP

Oracle Database 소개

Page 13: Oracle Korea / 2005 . 07

13

자 . Instance 시작

- Instance 를 시작 한다는 말은 Database 를 구동하여 사용자들이 데이터베이스를 사용할 수 있도록 한다는

말이다 .

- 세가지 단계 (NOMOUNT, MOUNT, OPEN) 를 거친다 .

- NOMOUNT, MOUNT, OPEN 은 상호 배타적이다 , 예컨대 , STARTUP MOUNT OPEN 이라는 명령은 쓸 수 없다 .

- STARTUP NOMOUNT 를 수행하면 Instance 가 시작된다 .

- STARTUP MOUNT 를 수행하면 Instance 가 시작되고 Control 파일이 Open 된다 .

- Log 파일이나 Data 파일의 이름 변경 , 복구 등을 하려면 MOUNT 상태로 Instance 를 시작 한다 .

- STARTUP MOUNT 로부터 모든 사용자가 쓸 수 있도록 데이터베이스를 Open 하려면 ALTER DATABASE OPE

N 명령을 수행한다 .

- FORCE 옵션은 이미 시작된 instance 를 재 시작할 때 이용한다 .

- RESTRICT 옵션은 일반 사용자들이 데이터베이스에 로그 온 하지 못하게 한다 .

Oracle Database 소개

Page 14: Oracle Korea / 2005 . 07

14

모든 사용자가 데이터베이스를 사용할 수 없도록 데이터베이스를 닫고 Instance 를 종료한다 .SHUTDOWN NORMAL

- 새로운 접속을 허용하지 않는다 . Oracle Server 는 모든 사용자가 접속을 해제하여 완전히 종료할 때까지 기다린다 . 이후에 다시 시작할 때 Instance 를 복구하지 않는다 . NORMAL 은 종료 모드의 기본값이다 .

SHUTDOWN IMMEDIATE

- 현재 Client 에서 처리 중인 SQL 문장을 처리하지 않는다 . Commit 되지 않은 Transaction 은 Rollback 된다 . 현재 접속되어 있는 사용자 프로세스의 세션은 모두 종료 된다 . 데이터베이스를 Dismount 한 후 Instance 를 종료한다 . 이후에 다시 시작할 때 Instance 를 복구 하지 않는다 .

SHUTDOWN ABORT

- 현재 Client 의 SQL 문장을 중지한다 . Commit 되지 않은 Transaction 은 Rollback 되지 않는다 . 현재 접속되어 있는 사용자 프로세스의 세션은 모두 종료 된다 . 데이터베이스를 닫거나 Dismount 하지 않고 Instance 를 종료한다 . 이후에 다시 시작할 때는 Instance 복구가 필요하다(SMON 에 의한 자동복구 )

*shutdown transactional

차 . Instance 종료

Oracle Database 소개

Page 15: Oracle Korea / 2005 . 07

ㅇ Database Schema (user, role, table, index, cluster, procedure, function, db link …)ㅇ Tablespaceㅇ Segments (Table, Index, Mview, Cluster)ㅇ Objects (Table, Index, Mview, Cluster, Stored Procedure, Function, Role, Db link….)

Database

tablespace

Tablespace

Table index TableTable index

타 . 논리적 저장구조

Oracle Database 소개

Page 16: Oracle Korea / 2005 . 07

16

databasedatabase

tablespacetablespace

segmentsegment

extentextent

Oracle blockOracle block

Data fileData file

O/S blockO/S block

논리적 물리적

타 . 논리적 저장구조 : Oracle database 공간계층 구조

Oracle Database 소개

Page 17: Oracle Korea / 2005 . 07

테이블스페이스

데이타 파일

SYSTEMTablespace

회계Tablespace

구매Tablespace

system datafile 회계datafile1

회계datafile2

구매datafile1

구매datafile2

타 . 논리적 저장구조 : 물리적 저장구조와의 관계

Oracle Database 소개

Page 18: Oracle Korea / 2005 . 07

Tablespace

Segment112K

Extent28K

2KExtent84K

Database Blocks

DatabaseObject tunnig

타 . 논리적 저장구조 : Tablespace, Extent, Block 와의 관계

Oracle Database 소개

Page 19: Oracle Korea / 2005 . 07

블럭 가장 작은 저장단위 ( 보통 2K) 데이타 및 자신의 Header 정보 포함 Bytes/Block 결정요인

Operating SystemDB_BLOCK_SIZE

구성요소 Row Data Free Space(pct free) Block Infomation

Common and variable HeaderTable DirectoryRow Directory

Free Space

Row Data

Data Block

타 . 논리적 저장구조 : 블럭의 구조

Oracle Database 소개

Page 20: Oracle Korea / 2005 . 07

20

3. Oracle 의 장점 ( 타 DB 와의 차별성 )

전사적 그리드 컴퓨팅 (Enterprise Grid Computing)현재와 같은 복잡한 IT 환경 하에서 관리해야 할 시스템의 수는 기하급수적으로 늘어나게 됩니다 . 이러한 환경 하에서 가장 큰 문제점은 무엇보다도 시스템들의 고립이라 볼 수 있습니다 . 이러한 구성은 하나의 시스템이 부하가 걸려 응답시간이 느려질 경우 다른 시스템들이 부하를 줄여줄 수 없는 형태이기 때문에 매우 비효율적이며 고 비용적인 형태입니다 . 오라클 데이터베이스 10g 는 Enterprise Grid Computing 을 위해 설계된 데이터베이스로써 New generation 시스템에 Grid Computing 구현을 실현해 줄 것입니다 .

가 . 전사적 그리드 컴퓨팅 (Enterprise Grid Computing)

Oracle Database 10g –

그 리 드 를 위 해 설 계 된 최 초 의 데 이 터 베 이 스

Oracle Database 10g –

그 리 드 를 위 해 설 계 된 최 초 의 데 이 터 베 이 스

DatabaseGrid

StorageGrid

Grid Control

Application ServerGrid

Oracle Database 소개

Page 21: Oracle Korea / 2005 . 07

21

전사적 그리드 컴퓨팅의 장점기업내의 수많은 작은 서버들을 적절한 관리 하에 마치 하나의 거대한 컴퓨터를 사용하는 것처럼 해주는 그리드 컴퓨팅 기능은 기업 내 컴퓨터 자원의 통합 , 서비스의 통합 관리 , 비용 절감 및 확장성 등의 많은 장점들을 제공합니다 .

기업 내 컴퓨터 자원의 통합기존의 기업 환경은 각 시스템 마다 고립화 되어 있기 때문에 일부 시스템은 과부화 상태인 반면 , 일부는 유휴

상태로 운영중인 경우가 많았습니다 . 오라클의 공유캐시 기반의 클러스터 기술을 기반으로 한 Grid Computing 을 도입하면 , 시스템간의 고립화를 최소화하는 단일 컴퓨팅 환경으로 구축이 가능합니다 .

서비스의 통합 관리기업내의 수많은 서버들이 개방형의 완벽한 통합 소프트웨어로 구축이 가능하며 , 서비스 부하에 따라 각 노드들을 특정 서비스에 전담시킬 수 있는 Service Provisioning 이 가능하기 때문에 , 보다 효율적인 업무 분배가 가능하며 , 이를 통해 모든 서버의 자원을 100% 활용할 수 있게 해줍니다 .

저 비용 / 고 성능그리드 컴퓨팅은 대용량 서버의 파워에 맞먹는 저 비용의 장비 , 수 십대를 하나의 컴퓨팅 환경으로 구축하는 것이기

때문에 , 실제 구축 비용은 대용량 서버에 비해 매우 낮으면서도 , 같은 성능을 제공합니다 . 더욱이 , 시스템에 대한 부하 변동에 따라 가변적으로 손쉽게 새로운 노드를 추가할 수 있는 확장성을 제공합니다 .

고 가용성Grid Computing 이 제공하는 Transparent Application Failover 기능은 시스템의 장애 발생시 사용자는 시스템 장애를

인식할 수 없도록 구현함으로써 사용자는 시스템의 장애 시 애플리케이션을 재구동 할 필요가 없이 신속한 업무처리가 가능하도록 구현한 기능입니다 .

Oracle Database 소개

Page 22: Oracle Korea / 2005 . 07

22

나 . 관리성 (Manageability)

자가 관리 데이터베이스 (Self-Managing Database)Oracle Database 10g 는 숭실대 New generation 시스템을 더욱 효율적으로 운영할 수 있도록 자가 관리 데이터베이스 (Self-Managing Database) 기능을 제공하고 있습니다 . 이 기능을 위하여 오라클 데이터베이스 10g 는 아래와 같은 지능형 기반구조를 데이터베이스 설계 시 포함 시킴으로써 타 DBMS 와 비교할 수 없는 자동적 , 능동적 그리고 효율적인 관리를 가능하게 해 줍니다 .

자동 관리를 위한 기반 구조 자동화된 작업 로드 저장 (Automatic Workload Repository)

•일체의 통계 정보를 자동으로 수집 / 관리하는 프레임워크•데이터베이스 안의“데이터웨어하우스”

서버 생성 경보 (Server-generated Alerts)•데이터베이스 상태의 자동 모니터링 수행 및 문제 발생시

관리자에게 즉시 경보 관리 작업 자동화 (Automated Maintenance Tasks)

•데이터베이스 스스로 반복적인 유지보수 작업을 수행 권고자 프레임워크 (Advisory Framework)

•DBA 에게 성능 및 자원 관리에 대한 유용하고 통합적인 권고 제공

Enterprise Manager 시스템 자원

관리

스페이스관리

해결 권고

경보모니터링

자동 관리를 위한 기반 구조

자동 관리

애플리케이션및 SQL 관리

스토리지관리

백업 및 복구관리

Oracle Database 소개

Page 23: Oracle Korea / 2005 . 07

23

Alerts &Advisories Automatic

Tasks

Automatic Workload RepositoryAutomatic Workload Repository

서버 차원의 경보

자동 유지보수

어드바이저 기반구조

내장된 지능형 기반구조( Intelligent Infrastructure )

Database 내의 데이타웨어하우스 자동적으로 SQL 부하 , 자원 사용 정보 등의 각종 통계정보 등을 수집

나 . 관리성 (Manageability) - 예제

Oracle Database 소개

Page 24: Oracle Korea / 2005 . 07

24

자동 데이타베이스 진단 감시 (Automatic Database Diagnostic Monitor)

- 자동적으로 전체 데이타베이스 성능 진단 보고서 제공- 분석 결과의 영향 및 이점을 제공- 능동적으로 수행- 매초마다 활성된 세션의 스냅샷 정보 관리- 10 년 이상의 성능 튜닝 전문가들의 체계적 분류- 징후 (Symptoms) 가 아닌 최초 (root) 원인 식별- CPU 경합 , 과도한 파싱 , Lock 경합 ,I/O 용량 , RAC 이슈 등 경합요소에 초점인한 업무 영향력 미비

현재 운영중인 모니터링 시스템들의 문제점 과도한 시스템 자원의 사용 데이타베이스 상에 성능 저하 요소 발생 문제의 감지 , 분석 및 해결까지 집약된 기능 구현 결여

Database 내의 DBA

AA DD DD MM 은 ?은 ?

나 . 관리성 (Manageability) - ADDM

Oracle Database 소개

Page 25: Oracle Korea / 2005 . 07

25

etc : OS, Web 서버 , WAS, H/W…

APP’(SQL)

DB Modeling

DB Tuning

모델러 프로그래머

DBA

과거 버전 - 수동적 SQL 튜닝의 한계

DBA

과도한 SQL 을 어떻게 튜닝할까 ?

과도하게 사용된 SQL

SQL

WorkloadDBA

과도한 SQL을 어떻게 찾을까 ?

성능관리 ?

나 . 관리성 (Manageability) – SQL 튜닝

Oracle Database 소개

Page 26: Oracle Korea / 2005 . 07

26

Add Missing Indexes

Modify SQL Constructs

Create a SQL Profile

Automatic Tuning Optimizer

SQL Structure Analysis

Access Path Analysis

SQL Profiling

Statistics Analysis

Gather Missing or Stale Statistics

DBA

SQL Tuning Advisor

SQL Tuning

Recommendations

Automatic SQL Tuning Advisor

Oracle Database 소개

Page 27: Oracle Korea / 2005 . 07

27

ADDM 데모 – EM 10g 화면• ADDM 의 자동검색 및 SQL 자동 튜닝 화면

Oracle Database 소개

Page 28: Oracle Korea / 2005 . 07

28

EM 10g 화면• ADDM 의 자동검색 및 SQL 자동 튜닝 과정

Oracle Database 소개

Page 29: Oracle Korea / 2005 . 07

29

EM 10g 화면

Oracle Database 소개

Page 30: Oracle Korea / 2005 . 07

30

EM10g 관리화면 - Segment Advisor

Tablespace별 , Schema별

Oracle Database 소개

Page 31: Oracle Korea / 2005 . 07

31

고 가용성 기능예기치 않았던 서비스 중단은 e-business 에 있어서 매출 , 생산성을 감소시키며 , 고객의 불만을 초래할 수도 있습니다 . Oracle10g 에서는 타 데이터베이스에 비해 이러한 예기치 않았던 서비스 중단 시간을 최소화할 수 있는 복구 시간의 최소화와 최종 사용자에게 미치는 영향을 줄이기 위한 다양한 기능을 제공합니다 .

Real Application Clusters오라클은 공유캐시 기반의 클러스터 데이터베이스를 사용하므로 어떠한 시스템의 장애에 대해서도 클러스터 내에 한 노드라도 운영가능하면 전체 데이터베이스에 대한 서비스가 가능합니다 .

DataGuard오라클은 데이터가드의 기능을 통하여 타 밴더 솔루션 없이도 자체적으로 백업센터나 데이터 미러링을 수행할 수

있는 기능을 보유하고 있습니다 . Flashback Any Errors

사용자의 실수에 의한 장애는 타 장애에 비해 복구하는 시간이 많이 걸리고 위험한 장애입니다 . 오라클은 사용자의 실수에 의한 장애를 최소화 시킬 수 있는 다양한 Flashback 기능을 제공함으로 사용사의 실수 이전 데이터의 액세스를 가능하게 하였습니다 .

Partition Mechanism테이블의 장애 발생시 전체의 테이블에 대한 접근이 불가능하게 됩니다 . 오라클은 다양한 파티션 기법 (Range, Has

h, Composite, List Partition) 의 구현으로 인해 테이블에 문제 발생시 접근 불가의 데이터 셋을 최소화할 수 있는 기능을 제공하고 있습니다 .

Transparent Application FailoverTransparent Application Failover 기능은 시스템의 장애 발생시 사용자는 시스템 장애를 인식할 수 없도록

구현함으로써 사용자는 시스템의 장애시 애플리케이션을 재구동 할 필요가 없이 신속한 업무처리가 가능하도록 구현한 기능입니다 .

다 . 고 가용성 (High Availability)

Oracle Database 소개

Page 32: Oracle Korea / 2005 . 07

32

Real Application Clusters 오라클 RAC 은 하나의 big SMP 서버가 아닌 , 클러스터를 구성하는 여러 독립된 서버들 상에 오라클 데이타베이스를 운영하는 것이고 , 가용성 , 확장성 , 저비용을 보장합니다 . 클러스터 상의 한 노드에 장애가 발생하더라도 , 오라클 데이타베이스는 남아있는 노드를 통해 서비스가 지속됩니다 . 보다 더 많은 프로세싱 파워가 필요하다면 새 노드를 클러스터에 쉽게 추가할 수 있습니다 . commodity 서버를 이용하므로 비용이 절감됩니다 .

1. Real Application Clusters

노드 N노드 1 노드 2

데이타 파일 과 컨트롤 파일각 인스턴스의 리두로그 파일

Global Cache/Enqueue Service

Instance 1SGADictionary

CacheLog

BufferBuffer Cache

Library Cache

Distributed Lock Area

LCKLCK LGWRLGWR DBWRDBWR

SMONSMON PMONPMON

Instance 2SGA

LCKLCK LGWRLGWR DBWRDBWR

SMONSMON PMONPMON

Instance NSGA

LCKLCK LGWRLGWR DBWRDBWR

SMONSMON PMONPMON

DictionaryCache

Log Buffer

Buffer Cache

Library Cache

Distributed Lock Area

DictionaryCache

Log Buffer

Buffer Cache

Library Cache

Distributed Lock Area

Oracle Database 소개

Page 33: Oracle Korea / 2005 . 07

33

- 특정 시점으로 복구를 위한 신기능- Flash Recovery Area 로 변경된 블록의 과거 : 버전에 대한 Flashback Log 를 기록 (captures)- 매우 빠름 – 수 분만에 복구 가능- 매우 용이 – 하나의 명령어 복구

“ Flashback Database to ‘2:05 PM’ ”

“Rewind” button for the Database

데이타 화일 플래쉬백 로그

새로운 블록버전

디스크 저장

과거 블록버전

자동 백업 및 복구 - Flashback Database 기능

Flashback

Oracle Database 소개

Page 34: Oracle Korea / 2005 . 07

34

플래쉬백 (Flashback) 장애복구

데이타베이스데이타베이스

고객원장

주문내역

테이블 수준 Flashback Table 을 통하여 원하는 시점으로 해당 테이블들의 로우들을 복구 ( UNDO 활용 )

Flashback Table ~ Drop 을 통하여 Drop 된 테이블 및 인덱스를 복구할 수 있다 .

- 휴지통 (Recycle bin) 기능

로우 수준 Flashback Query 를 통하여 원하는 시점으로 Row 를 복구

데이타베이스 수준 Flashback Database 를 통하여 원하는 시점으로 모든 데이타베이스를 복구

- Flashback Log 사용

Human Error 에 대한 모든 수준의 복구 가능

Oracle Database 소개

Page 35: Oracle Korea / 2005 . 07

35

Oracle Database 10g 에서 제공하는 Data Guard 는 서버 머신의 다운 또는 자연 재해와 같은 사고 때문에 데이터베이스의 데이터를 접근 하지 못하는 경우 대비하여 데이터베이스의 계속적인 서비스를 가능하게 하는 환경을 지원하기 위한 기능으로 데이터베이스의 고가용성과 장애 극복을 위해 다음과 같은 기능을 제공합니다 .

일관성 있는 관리 인터페이스

물리적 스탠바이 데이터베이스를 자동으로 생성

Failover 와 Switchover 기능

물리적 결함에 대한 보호망

로그 전송 서비스에 대한 설정

로그 적용 서비스에 대한 설정

모니터링 , 경고와 제어 메커니즘

논리적 스탠바이 데이터베이스 지원

NetworkBroker

ProductionDatabase

Logical StandbyDatabase Open for

Reports

SQLApply

Optional Delay

Transform Redo to SQL

AdditionalIndexes & MVs

Physical StandbyDatabase

Optional Optional DelayDelay

DIGITAL DATA STORAGE

DIGITAL DATA STORAGE

Backup

Redo Apply

Sync or Async Redo Shipping

Data Guard

Oracle Database 소개

Page 36: Oracle Korea / 2005 . 07

36

고 성능 기능오라클은 타 업체에 비하여 향상된 블록 메커니즘을 제공함으로써 업계 최초 및 가장 안정된 Row-Level 락킹을 지원하고 있습니다 . 또한 대량의 데이터를 가지는 Table Scan, Join, 큰 Table 과 Index생성 , Bulk Loading, Insert, Update, Delete등에서 하나의 작업을 여러개의 개별적인 작업으로 동적 재분할하고 작업량을 여러 개의 프로세서에 고르게 분산시켜 CPU, Memory등의 자원을 최대한 활용함으로써 작업 성능을 극대화 시킵니다 .

향상된 블록 메커니즘Row-Level LockingMulti Version Read ConsistencyNo Locks EscalateNo Deadlocks under LoadNo Readers Block WritersNo Writers Block ReadersNo Requires Dirty Reads

다양한 병럴처리 기법Parallel Backup & RecoveryParallel query, load, indexParallel DML

• 이식성 데이터 파일을 타 하드웨어 벤더에 영향을 받지 않고 플레그 앤 플레이 개념에 의거 자유로이 오라클 데이타베이스에 이식할수 있습니다 . 기존의 마이그레이션 수행시보다 획기적으로 마이그레이션 수행속도를 줄일수 있습니다 .

라 . 고 성능 및 이식성

Oracle Database 소개

Page 37: Oracle Korea / 2005 . 07

37

Enterprise Manager 10g 개요 Oracle Enterprise Manager 10g 는 Oracle environment 에 대한 완벽한 manage 를 위한 통합 툴입니다 . Hosts, database, listeners, appli

cation servers, HTTP server, 그리고 web application등 모든 service 들을 하나의 통합 툴로 쉽게 관리할 수 있습니다 . 이러한 Enterprise Manager 의 주요 사용 용도는 다음과 같습니다 .

매우 중요하고 적절한 시기의 결정을 위한 정보를 추출효과적인 방법을 통한 별도의 시스템 관리바이러스에 대한 방어를 위해 안티 바이러스 프로그램과의 연동오라클 플랫폼과 storage system, hosts, router, 그리고 third-party S/W 의 관리하드웨어의 비용 절감 , 즉 모든 시스템의 통합 관리

Enterprise Manager 10g 특징 - 수많은 시스템의 통합 관리 Oracle Database 10g 의 기본적인 출발은 Grid 라는 개념을 시작으로 합니다 . 따라서 10g 의 Enterprise Manager( 이하 EM 이라 칭함 )

는 수많은 시스템 구성 요소를 모두 통합하여 하나의 룰을 통해 일할 수 있게 구성되어 있습니다 . 이러한 구성은 다음과 같은 기능으로 실행 가능합니다 .

Heterogeneous groups, database groups, 그리고 host groups 을 생성할 수 있으며 , 다음의 그룹을 포함합니다 .

• Oracle Management Agents - Application Servers• Beacons - Databases• database groups - HTTP servers• Hosts - OIC LDAP Servers• Oracle Management Service - Oracle Management Repository• Web Applications

마 . 모니터링 및 설정관리도구 제공 - EM

Oracle Database 소개

Page 38: Oracle Korea / 2005 . 07

38

- Oracle Tuning PackOracle Tuning Pack 은 DBA 에게 SQL 튜닝 , 스토리지 최적화 등과 같은 오라클 환경에 대한 숙련된 성능 관리를 제공합니다 . Tuning Pack 을

사용하기 위해서는 반드시 Diagnostic Pack 이 있어야 합니다 .SQL Access AdvisorSQL Tuning AdvisorSQL Tuning SetsReorganize objects

- Oracle Enterprise Manager 10g - Database Control Framework Database Control 들은 Oracle database 환경들을 관리하고 monitor 하는 여러 가지 기술들을 바탕으로 이루어 집니다 . Database Control Framewo

rk 는 이러한 기술들과 Database control 로 구성된다 . 이러한 구성은 다음과 같습니다 .하나의 database 나 clustered database 와 함께 작동되도록 설계된 Oracle Management service 의 local 버전 .Local database 에 설치된 local Oracle Management RepositoryLocal Management Service 를 위해 설치된 Oracle Management Agent 의 local 버전 .

- Oracle Configuration Management PackOracle Configuration Management Pack 은 Enterprise Manager 에 의해 관리되는 호스트와 데이타베이스에 대한 하드웨어 , 소프트웨어의 구성 정보를 DBA 가 트랙킹할 수 있게 해줍니다 .

시스템 인벤토리 수집 , 리포팅구성 비교 및 이력 관리패치 관리정책 관리자 (Policy Manager) – best practice 를 위반하는 경우 관리자에게 alert데이타베이스 , Oracle Home 복제구성 데이터 검색

Enterprise Manager Framework

Oracle Database 소개

Page 39: Oracle Korea / 2005 . 07

39

- Oracle Change Management PackOracle Change Management Pack 을 통해 DBA 는 오브젝트의 변경과 관련된 작업을 수행할 수 있습니다 .

오브젝트 정의 캡쳐 (capture) 와 저장오브젝트 정의의 비교 , 차이점 하이라이트오브젝트 정의 동기화오브젝트 정의를 하나 이상의 사이트로 전파오브젝트의 일부분을 복제

- Oracle Diagnostic PackOracle Diagnostic Pack 은 자동 성능 진단 , 향상된 시스템 모니터링 기능을 제공합니다 .

자동 업무부하 저장소 (Automatic Workload Repository)자동 데이타베이스 진단 모니터 (Automatic Database Diagnostic Monitor, ADDM)성능 모니터링 ( 데이타베이스 , 호스트 )이벤트 통지 (Event notification) : 통지 방법 , 룰 (rule), 스케쥴이벤트 이력 , 성능 측정치 이력 ( 데이타베이스 , 호스트 )

Oracle Database 소개

Page 40: Oracle Korea / 2005 . 07

40

SQL Tuning Advisor : Options and Recommendations

Oracle Database 소개

Page 41: Oracle Korea / 2005 . 07

41

경쟁사 비교 자료Oracle Database 10g 는 지금까지 데이타베이스 시장을 리딩해 온 기술들을 그대로 포함하고 있습니다 .아울러 그리드와 자가 관리 기능이 포함되어짐으로써 타 DBMS 에 비해 성능 , 확장 , 보안 , 관리 , 개발 등 모든 면에서가장 뛰어난 DBMS입니다 .

4. 시장점유율

데이타베이스 시장점유율

업체 2004 년 12 월 자료

ORACLE 47.6 %

IBM 26.6 %

MS 18.3 %

기타 7.5 %

Oracle47.6%

Others7.5%MS

18.3%

IBM26.6%

2004 년 12 월 한국 IDC 조사자료

Oracle Database 소개

Page 42: Oracle Korea / 2005 . 07

42

ㅇ 시스템에서 주로 발생하는 문제들

- 하드파싱 문제

- Literal SQL 에 의한 메모리 단편화 문제

- 악성 SQL 에 의한 자원 과다 소모 문제 · 잘못된 SQL 사용 , 인덱스 문제등

- Lock or Blocking session 문제

- Session Leak

- SQL 에 의한 자원경합 (Waiting Event) 문제

- DB 모델링 & 디자인 잘못으로 인한 문제

- DB 미튜닝으로 인한 문제

5. 시스템에서 주로 발생하는 문제들

Oracle Database 소개

Page 43: Oracle Korea / 2005 . 07

43

SGAData Buffer Cache Redo Log BufferShared Pool

SNPnSNPn LCKnLCKnRECO

RECO PnnnPnnn SnnnSnnn DnnnDnnn

DBWnDBWn

CKPTCKPT

LGWRLGWR

ARCHARCH

SMONSMON

PMONPMON

Server Server UserUser

Sql 처리순서

SQL 처리과정

LISTENER

Shared SQL Area Dictionary Cache

SQL, PL/SQL 문장의 텍스트

SQL, PL/SQL 문장의 텍스트

SQL, PL/SQL 문장의 분석된 형태(Parsed form)

SQL, PL/SQL 문장의 분석된 형태(Parsed form)

SQL, PL/SQL Execute Plan

SQL, PL/SQL Execute Plan

Data Dictionary

Data Dictionary

Character SetNetwork SecurityEtc…

Character SetNetwork SecurityEtc…

Back Ground PRO’INSTANCE = SGA+BGP

Data File

SELECT EMPNO,NAME FROM EMPWHERE EMPNO = ‘123’;

ㅇ Parse : Sintax, Semantics(User, Object, Privilege), -> Optimizer (Excution Plan, Row Source 생성 ), Binding : 변수처리ㅇ Execute : Physical Read, Logical Readㅇ Fetch

ㅇ Parse : Sintax, Semantics(User, Object, Privilege), -> Optimizer (Excution Plan, Row Source 생성 ), Binding : 변수처리ㅇ Execute : Physical Read, Logical Readㅇ Fetch

Oracle Database 소개

Page 44: Oracle Korea / 2005 . 07

44

UserUser

HARD PARSING TECH’

미공유SQL미공유SQL미공유

SQL미공유SQL미공유

SQL미공유SQL미공유

SQL미공유SQL미공유

SQL미공유SQL미공유

SQL미공유SQL

UserUser

SELECT EMPNO,NAME FROM EMPWHERE EMPNO = ‘123’

SELECT EMPNO,NAME FROM EMPWHERE EMPNO = ‘245’;

Loop…. if then …. select …. loop if then…. update…. . .

ㅇ Mem’ Fragmentation - ora 4031….ㅇ 각종 contention 발생 - Latch, Hard Parse등 - Lib’ cache missㅇ 자원소모

SGAData Buffer Cache Redo Log BufferShared Pool

SNPnSNPn LCKnLCKnRECO

RECO PnnnPnnn SnnnSnnn DnnnDnnn

DBWnDBWn

CKPTCKPT

LGWRLGWR

ARCHARCH

SMONSMON

PMONPMON

Server P

Server P Data File

????

????

Oracle Database 소개

Page 45: Oracle Korea / 2005 . 07

45

HARD PARSING TECH’

Oracle Database 소개

Page 46: Oracle Korea / 2005 . 07

46

HARD PARSING TECH’

Oracle Database 소개

Page 47: Oracle Korea / 2005 . 07

47

UserUser

Literal SQL TECH’

UserUser

SELECT EMPNO,NAME FROM EMPWHERE EMPNO = ‘123’;

SELECT EMPNO,NAME FROM EMPWHERE EMPNO = ‘245’;

SELECT EMPNO,NAME FROM EMPWHERE EMPNO = ‘267’; . .

Loop…. if then …. select …. loop if then…. update…. . . .

ㅇ Mem’ Fragmentation - ora-4031….

ㅇ 비공유 Literal SQL 사용으로 각종 contention 이 발생하고 하드파싱을 유발하며 , 메모리 단편화를 일으켜 DB 가 다운 된다

Back Ground PRO’

SGAData Buffer Cache Redo Log BufferShared Pool

SNPnSNPn LCKnLCKnRECO

RECO PnnnPnnn SnnnSnnn DnnnDnnn

DBWnDBWn

CKPTCKPT

LGWRLGWR

ARCHARCH

SMONSMON

PMONPMON

Server P

Server P

INSTANCE = SGA+BGP

Data File????

????

LiteralSQLLiteral

SQLLiteralSQLLiteral

SQLLiteralSQLLiteral

SQLLiteralSQLLiteral

SQLLiteralSQL

Oracle Database 소개

Page 48: Oracle Korea / 2005 . 07

48

해결방안

ㅇ Literal SQL 을 Bind 변수를 사용하여 수정 // Create Command Object. Cmd1= new msado15.Command(); Cmd1.putActiveConnection( Conn1 ); Cmd1.putCommandText( "SELECT * FROM Authors WHERE Au_ID < ?" ); // Create Parameter Object. v1.putString( "P1" ); v2.putInt( 5 ); Cmd1.getParameters().Append( Cmd1.CreateParameter( v1.getString(), msado15.DataTypeEnum.adInteger, msado15.ParameterDirectionEnum.adParamInput, 0, v2));

ㅇ Cursor_Sharing 옵션 사용 Alter Session Set cursor_sharing= ‘FORCE’ or ‘SIMILAR’; * 디비링크 , 복잡한 쿼리에는 사용하지 말것

ㅇ 주기적인 Shared Pool 리프레쉬 alter system flush shared_pool;

Oracle Database 소개

Page 49: Oracle Korea / 2005 . 07

49

LOCK & Waiting Session Monitoring

DB Session MonitoringUnix Process Monitoring

Blocking Session or LOCK TECH’

Oracle Database 소개

Page 50: Oracle Korea / 2005 . 07

50

Blocking Session or LOCK( 계속 )

EMPNO SAL CODE

7782 2450 3

7839 5000 2

7934 100 5

7369 800 1

7566 2975 1

7788 3000 5

7876 1100 7

7902 3000 6

7499 1600 2

7521 1250 2

7654 1250 3

7698 2850 5

7844 1500 6

7900 950 7

USER A : update sal…

Commit

USER B : update code

USER C

USER D

USER E

USER F

USER G

USER H

USER Z

USER A USER B USER C

SELECT 10

UPDATE 10->20

SELECT ?

COMMIT ;

SELECT ? SELECT ?

UPDATE 10->30

SELECT ?

.

.

.

.

UPDATE 10->60

ㅇ Index Create, Dropㅇ Analyze 수행시

Oracle Database 소개

Page 51: Oracle Korea / 2005 . 07

51

Blocking Session or LOCK ( 계속 )

Oracle Database 소개

Page 52: Oracle Korea / 2005 . 07

52

Blocking Session or LOCK ( 계속 )

Oracle Database 소개

Page 53: Oracle Korea / 2005 . 07

53

Blocking Session or LOCK ( 계속 )

Oracle Database 소개

Page 54: Oracle Korea / 2005 . 07

54

Blocking Session or LOCK ( 계속 )

Oracle Database 소개

Page 55: Oracle Korea / 2005 . 07

55

Blocking Session or LOCK ( 계속 )

해결방법은 ?ㅇ 권한분리 : 관리자와 사용자의 접근권한 및 시기 , 수정 가능 칼럼 권한조정ㅇ COMMIT 횟수 조절 : 하드웨어 성능 , 사용자수와 관련하여 레코드 20 – 200 개에 1 회 수행ㅇ DB 오브젝트 튜닝 : ini Trans, free list등

SELECT parsing_user_id, executions, sorts, buffer_gets, disk_reads, first_load_time, sql_text

FROM V$SQL

WHERE first_load_time between '2004-10-12/11:00:00' and '2004-10-12/11:10:00'

ORDER BY first_load_time

Oracle Database 소개

Page 56: Oracle Korea / 2005 . 07

56

Session leak

발생원인은 ?ㅇ 어플리케이션 코드 에러ㅇ WAS 서버 이상동작 ( 환경설정이상 , 과부하등 )

ㅇ 하드웨어 리소스 부족 , Network 문제 등등

DBDB

WAS DBClient

해결방법은 ?ㅇ 어플리케이션 코드 수정ㅇ WAS 서버 환경설정 확인 , 과부하 원인 제거 (SQL튜닝등 )ㅇ 하드웨어 업그레이드 , Network 문제해결

Oracle Database 소개

Page 57: Oracle Korea / 2005 . 07

57

성능관리 예제 1

ㅇ 시스템 : 재무 / 회계 , 인사 , 전자입찰 , 원격연수 시스템등 15개시스템

ㅇ 환 경 : ASP(CBD방법론 ), 오라클 DBMS 8.1.6, IIS, 사용자수 (4000 - 5000), DB 크기 (0.5T), SUN5500(CPU 8, MEM 8G)

ㅇ 현 상 : 이유없는 시스템 다운현상 반복 , 주요화면 속도 저하 , IIS 다운현상 심각 ( 주 3 - 4회 ), 특정화면 조회시 시스템 다운현상 , 전자입찰시 시스템 속도 저하 및 다운현상으로 민원제기가 많음 .

ㅇ 사용자 : 기능은 좋으나 특정화면 속도가 너무 느리고 자주 시스템이 다운되어 믿을수 없다 . 특정기능 사용시 시스템이 다운된다 .

Oracle Database 소개

Page 58: Oracle Korea / 2005 . 07

58

Oracle Database 소개

Page 59: Oracle Korea / 2005 . 07

59

Oracle Database 소개

Page 60: Oracle Korea / 2005 . 07

60

ㅇ 시스템 : WAMIS 시스템ㅇ 원문장 : SELECT /*+ INDEX(S103 S103_IX1) */ MIN(GX), MIN(GY), MAX(GX), MAX(GY) FROM OWIS.S103 WHERE gx < 16,777,216

ㅇ 속 도 : 개선전 8초 -> 0.2 초

QUERY_PLAN --------------------------------------------- SELECT STATEMENT cost = 4 .1 SORT AGGREGATE .1 INDEX FAST FULL SCAN IX_S1031 NON-UNIQUE ㅇ 원인 : min, max 함수로 인하여 index full scan 이 일어나서 속도 저하

ㅇ 조 치 : 인덱스 2 개 생성후 rownum 을 이용하여 조치

create index ix2_s103 on owis.s103 (GY) tablespace owis storage(initial 1m next 1m pctincrease 0) nologging; create index ix1_s103 on owis.s103 (GX) tablespace owis storage(initial 1m next 1m pctincrease 0) nologging;

ㅇ 수정문장

SELECT A.A , B.B , C.C , D.D FROM (SELECT /*+ INDEX_ASC(S103 ix1_s103) */ GX A FROM OWIS.S103 WHERE gx < 16777216 AND ROWNUM = 1) A, (SELECT /*+ INDEX_ASC(S103 ix2_s103) */ GY B FROM OWIS.S103 WHERE gx < 16777216 AND ROWNUM = 1) B, (SELECT /*+ INDEX_DESC(S103 ix1_s103) */ GX C FROM OWIS.S103 WHERE gx < 16777216 AND ROWNUM = 1) C, (SELECT /*+ INDEX_DESC(S103 ix2_s103) */ GY D FROM OWIS.S103 WHERE gx < 16777216 AND ROWNUM = 1) D

INDEXINDEX

운반단위운반단위

TABLETABLE

• •

SSOORRTT• •

INDEX INDEX

운반단위운반단위

Oracle Database 소개

Page 61: Oracle Korea / 2005 . 07

61

SELECT B.NAME||' 총계 ', '', '', '', '', '', '', '', '', '', Sum (A.CASHAMT), Sum(A.CDAMT), Sum(A.INPAMT), 00, Count(B.NAME), ' ' FROM ofms.FACDCAUNM B, ( SELECT CSDAUN, CASHAMT, CDAMT, INPAMT FROM ofms.FAABMDECD WHERE CSDAUN = '01' AND INPDT >= TO_DATE('2002/03/07', 'YYYY/MM/DD') AND INPDT < TO_DATE('2002/03/08', 'YYYY/MM/DD') + 1 AND ACSLPNO >= '20020150278') A WHERE A.CSDAUN = B.CODE GROUP BY B.NAME HAVING COUNT(B.NAME) > 1 UNION SELECT B.NAME, TO_CHAR(A.INPDT,'YYYY/MM/DD'), '일자소계 ', '', '', '', '', '', '' , '' , Sum (A.CASHAMT), Sum(A.CDAMT), Sum(A.INPAMT) , 01, Count(B.NAME), ' ' FROM ofms.FACDCAUNM B, (SELECT CSDAUN, INPDT, CASHAMT, CDAMT, INPAMT FROM ofms.FAABMDECD WHERE CSDAUN = '01' AND INPDT >= TO_DATE('2002/03/07', 'YYYY/MM/DD') AND INPDT < TO_DATE('2002/03/08', 'YYYY/MM/DD') + 1 AND ACSLPNO >= '20020150278') A WHERE A.CSDAUN = B.CODE GROUP BY B.NAME,TO_CHAR(A.INPDT,'YYYY/MM/DD') HAVING COUNT(B.NAME) > 1 UNION SELECT B.NAME, TO_CHAR(A.INPDT,'YYYY/MM/DD'), A.ACSLPNO, REPLACE(C.TITCNT, Chr(13)||Chr(10), ' ') , A.CUSNAME, A.INBNAME, A.DPSNO, A.SAVNAME, A.CDDPSSTS, A.CDCUSNO, A.CASHAMT , A.CDAMT, A.INPAMT , 02, 1, C.ACCIND FROM ofms.FACDCAUNM B, ofms.FAABMDECI C, (SELECT INPDT, ACSLPNO, CUSNAME, INBNAME, DPSNO, SAVNAME, CDDPSSTS, CDCUSNO, CASHAMT, CDAMT, INPAMT, CSDAUN FROM ofms.FAABMDECD …………………………………

ㅇ 실행계획QUERY_PLAN------------------------------------------------------- SELECT STATEMENT cost = 332.1 SORT UNIQUE.1 UNION-ALL.1 FILTER.1 SORT GROUP BY.1 MERGE JOIN CARTESIAN.1 TABLE ACCESS BY INDEX ROWID FACDCAUNM.1 INDEX RANGE SCAN FACDCAUNM_PK_CODE UNIQUE.2 SORT JOIN.1 TABLE ACCESS BY INDEX ROWID FAABMDECD.1 INDEX RANGE SCAN FAABMDECD_IDX_INPDT NON-UNIQUE.2 FILTER.1 SORT GROUP BY.1 MERGE JOIN CARTESIAN.1 TABLE ACCESS BY INDEX ROWID FACDCAUNM.1 INDEX RANGE SCAN FACDCAUNM_PK_CODE UNIQUE.2 SORT JOIN.1 TABLE ACCESS BY INDEX ROWID FAABMDECD.1 INDEX RANGE SCAN FAABMDECD_IDX_INPDT NON-UNIQUE.3 HASH JOIN.1 NESTED LOOPS.1 TABLE ACCESS BY INDEX ROWID FACDCAUNM.1 INDEX RANGE SCAN FACDCAUNM_PK_CODE UNIQUE.2 TABLE ACCESS BY INDEX ROWID FAABMDECI.1 INDEX RANGE SCAN FAABMDECI_PK_SLPNOSSENO UNIQUE.1 SORT AGGREGATE.1 FIRST ROW.1 INDEX RANGE SCAN (MIN/MAX) FAABMDECI_PK_SLPNOSSENO UNIQUE.2 TABLE ACCESS BY INDEX ROWID FAABMDECD.1 INDEX RANGE SCAN FAABMDECD_IDX_INPDT NON-UNIQUE

ㅇ 원 인 : 8.1.6 버젼 optimizer 는 first_rows optimizer 에 의해 실행계획시

잘못된 실행계획을 세우는 확률이 매우 높아 rule optimizer 로

변경 --first_rows 버그로 수정되었음

ㅇ 시스템 : 재무시스템 거래처별지급내역ㅇ 속 도 : 3 분 48 초 -> 0.78 초

Oracle Database 소개

Page 62: Oracle Korea / 2005 . 07

62

ㅇ 시스템 : 재무시스템 원천 영수증 발행화면ㅇ 속 도 : 28.85초 -> 1.32 초

ㅇ 원문장 SELECT A.SLPNO, B.WRTDT, A.IBENO, DECODE(A.IVNN, NULL, A.ICONAME, A.IVNN), B.TITCNT, B.PPSCNT, A.INCIND, TO_CHAR(NVL(A.PRNCD,0)) FROM ofms.FTSOMSRTM A, ofms.FAABMSLPM B WHERE A.ACSDT BETWEEN TO_DATE('2002/01/01','YYYY/MM/DD') AND TO_DATE('2002/04/04','YYYY/MM/DD') AND B.SLPNO = A.SLPNO AND A.INCIND ='사업소득 ' AND A.AUNCD = '01' AND A.CBENO = '306-82-00471' ORDER BY A.SLPNO, B.WRTDT

ㅇ 실행계획Misses in library cache during parse: 1Optimizer goal: RULEParsing user id: 5 (SYSTEM)Rows Execution Plan------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: RULE 54 SORT (ORDER BY) 54 NESTED LOOPS444919 TABLE ACCESS GOAL: ANALYZED (FULL) OF 'FAABMSLPM' 54 TABLE ACCESS GOAL: ANALYZED (BY INDEX ROWID) OF 'FTSOMSRTM‘446612 INDEX GOAL: ANALYZED (RANGE SCAN) OF 'FTSOMSRTM_PK_SLPNOIBENO' (UNIQUE)

ㅇ SQL TRACEcall count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0------- ------ -------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 5 26.56 28.85 13938 911698 4 54------- ------ -------- ---------- ---------- ----------total 7 26.56 28.85 13938 911698 4 54

Oracle Database 소개

Page 63: Oracle Korea / 2005 . 07

63

ㅇ 원 인 : B 와 A 테이블의 관계가 1 : M 인데 부모테이블인 B 의 건수가 44만건이고 자식 테이블인 A 의 건수는 44만건인 비정상적 상황으로 RULE 옵티마이저가 부모 테이블인 B 를 먼저 드라이빙하여 문제가 발생ㅇ 조 치 : WHERE 조건에서 날짜조건인 A.ACSDT 를 B.ACSDT 로 변경하여 실핼계획 변경 유도

B444,919

A(446,612)(?)

ㅇ 수정후 계획call count cpu elapsed disk query current rows------- ------ -------- ---------- ---------- --------- Parse 1 0.00 0.00 0 0 0 0Execute 1 0.00 0.00 0 0 0 0Fetch 5 1.34 1.32 0 45662 0 54------- ------ -------- ---------- ---------- --------- total 7 1.34 1.32 0 45662 0 54

QUERY_PLAN--------------------------------- SELECT STATEMENT cost =.1 SORT ORDER BY.1 NESTED LOOPS.1 TABLE ACCESS BY INDEX ROWID FAABMSLPM.1 INDEX RANGE SCAN FAABMSLPM_IDX_ACSDT NON-UNIQUE.2 TABLE ACCESS BY INDEX ROWID FTSOMSRTM.1 INDEX RANGE SCAN FTSOMSRTM_PK_SLPNOIBENO UNIQUE

ㅇ 수정문장 SELECT A.SLPNO, B.WRTDT, A.IBENO, DECODE(A.IVNN, NULL, A.ICONAME, A.IVNN), B.TITCNT, B.PPSCNT, A.INCIND, TO_CHAR(NVL(A.PRNCD,0)) FROM ofms.FTSOMSRTM A, ofms.FAABMSLPM B WHERE b.ACSDT BETWEEN TO_DATE('2002/01/01','YYYY/MM/DD') AND TO_DATE('2002/04/04','YYYY/MM/DD') AND B.SLPNO = A.SLPNO AND A.INCIND ='사업소득 ' AND A.AUNCD = '01' AND A.CBENO = '306-82-00471' ORDER BY A.SLPNO, B.WRTDT

Oracle Database 소개

Page 64: Oracle Korea / 2005 . 07

64

ㅇ 시스템 : 재무시스템 추산부 2 화면ㅇ 속 도 : 개선전 50 초 -> 1.5초

ㅇ 원문장SELECT A.BGTIND, A.BGDPT, A.ACCCD, A.BUACD, A.SACCCD, A.CNSCD, A.SEQ, NVL(DECODE(A.ITMNAME,'****','*****',A.ITMNAME),'*****'), A.SYSCD, REPLACE(A.TITCNT,CHR(13)||CHR(10),CHR(32)) TITCNT, TO_CHAR(A.AMT0) AMT0, TO_CHAR(A.AMT1) AMT1, TO_CHAR(A.AMT2) AMT2, TO_CHAR(A.AMT3) AMT3, TO_CHAR(A.AMT4) AMT4, '0' AMT1TOT, '0' AMT2TOT, '0' AMT3TOT, '0' AMT4TOT, A.SLPNO, TO_CHAR(A.ACSDT,'YYYY/MM/DD'), A.MANITEM5 FROM (SELECT DISTINCT C.REQNO SLPNO, D.BGTIND, G.CONDPT WTDPT, G.CONDPTNAME WTDPTNAME, D.BGDPT, D.ACCCD, D.BUACD, D.SACCCD, D.CNSCD, D.SEQ, D.ITMNAME, G.CPIND SYSCD, G.ORDNO MANITEM5, G.ORDKNAME TITCNT, C.PCONAMT AMT1, 0 AMT2, 0 AMT3, 0 AMT4, A.CONDT ACSDT, '' TEMPACC, SUM(NVL(D.MONAMT,0)) AMT0 FROM ofms.FOCOMDDSM A, ofms.FPODMDDSM G, ofms.FPRQMDDSM B, ofms.FPRQMBGTD C, ofms.FBPTMEXEM D WHERE D.SEQ = C.BDTCD AND D.CNSCD = C.CNSCD AND D.SACCCD = C.SACCD AND D.BUACD = C.BUACD AND D.ACCCD = C.ACCCD AND D.BGDPT = C.DPTCD AND D.BGTIND = C.BGTIND AND D.YEA = C.YEA AND C.PCONAMT > 0 AND C.DPTCD = '190' AND C.REQNO = B.REQNO AND B.ORDNO = G.ORDNO AND G.CPIND IN ('공사 ','용역 ') AND G.ORDNO = A.CONNO AND A.CONDT BETWEEN TO_DATE('2002/02/20','YYYY/MM/DD') AND TO_DATE('2002/03/20','YYYY/MM/DD') GROUP BY A.CONNO, D.BGTIND, G.CONDPT, G.CONDPTNAME, D.BGDPT, D.ACCCD, D.BUACD, D.SACCCD, D.CNSCD, D.SEQ, D.ITMNAME, G.CPIND, G.ORDNO, G.ORDKNAME, C.PCONAMT, A.CONDT, C.REQNO UNION ALL SELECT DISTINCT C.REQNO SLPNO, D.BGTIND, G.CONDPT WTDPT, G.CONDPTNAME WTDPTNAME, D.BGDPT, D.ACCCD, D.BUACD, D.SACCCD, D.CNSCD, D.SEQ, D.ITMNAME, G.CPIND SYSCD, G.ORDNO MANITEM5, G.ORDKNAME TITCNT, C.PCONAMT AMT1, 0 AMT2, 0 AMT3, 0 AMT4, A.CONDT ACSDT, '' TEMPACC, SUM(NVL(D.MONAMT,0)) AMT0 FROM ofms.FOCOMDDSM A, ofms.FPODMDDSM G, ofms.FPRQMITMM E, ofms.FPRQMBGTD C, ofms.FBPTMEXEM D WHERE D.SEQ = C.BDTCD AND D.CNSCD = C.CNSCD AND D.SACCCD = C.SACCD AND D.BUACD = C.BUACD ………………………………….

ㅇ 원 인 : FBPTMEXEM 테이블의 결합인덱스가 9 개 컬럼으로 생성되었는데 순서가 잘못되어 속도가 저하됨 * 기존 인덱스 칼럼순서 : YEA,CMM,BGTIND,BGDPT,ACCCD, BUACD,SACCCD,CNSCD,SEQㅇ 조 치 - 인덱스생성 create index ix_FBPTMEXEM2 on ofms.FBPTMEXEM(BUACD,SACCCD,BGDPT,ACCCD,SEQ,YEA,CNSCD,BGTIND) tablespace OFMSFIDX storage(initial 2m next 2m pctincrease 0) nologging; create index ix_FAABMSLPD3 on ofms.FAABMSLPD(slpno,bgdpt) tablespace OFMSFIDX storage(initial 2m next 2m pctincrease 0) nologging;

ㅇ 살행계획

Misses in library cache during parse: 1Optimizer goal: RULEParsing user id: 5 (SYSTEM)

Rows Row Source Operation------- --------------------------------------------------- 89 SORT ORDER BY 89 VIEW 89 UNION-ALL 0 SORT UNIQUE 0 SORT GROUP BY 0 NESTED LOOPS 1 NESTED LOOPS 7 NESTED LOOPS 66 NESTED LOOPS 66 TABLE ACCESS FULL FPRQMBGTD 130 TABLE ACCESS BY INDEX ROWID FPRQMDDSM 130 INDEX UNIQUE SCAN (object id 14006) 71 TABLE ACCESS BY INDEX ROWID FPODMDDSM 96 INDEX UNIQUE SCAN (object id 14002) 6 TABLE ACCESS BY INDEX ROWID FOCOMDDSM 10 INDEX UNIQUE SCAN (object id 11486) 0 TABLE ACCESS BY INDEX ROWID FBPTMEXEM 0 INDEX RANGE SCAN (object id 30476) 4 SORT UNIQUE 4 SORT GROUP BY 48 NESTED LOOPS 5 NESTED LOOPS 56 NESTED LOOPS 59 NESTED LOOPS 66 TABLE ACCESS FULL FPRQMBGTD 123 TABLE ACCESS BY INDEX ROWID FPRQMITMM 123 INDEX UNIQUE SCAN (object id 9484) 113 TABLE ACCESS BY INDEX ROWID FPODMDDSM 113 INDEX UNIQUE SCAN (object id 14002) 59 TABLE ACCESS BY INDEX ROWID FOCOMDDSM 110 INDEX UNIQUE SCAN (object id 11486) 48 TABLE ACCESS BY INDEX ROWID FBPTMEXEM ------------------------------ ----------------------……….

Oracle Database 소개

Page 65: Oracle Korea / 2005 . 07

65

ㅇ 시스템 : 재무시스템 계정 / 보조검색화면ㅇ 속 도 : 개선전 1.27초 -> 0.07초ㅇ 원문장

Select P.ACCCD, P.NAME, P.SACCCD, P.SACCNAME , P.MACSTS, P.BUASTS FROM (Select A.Code ACCCD, A.NAME NAME, C.SACCCD SACCCD, C.SACCNAME SACCNAME, C.MACSTS MACSTS, C.BATSTS BATSTS, A.BUASTS BUASTS FROM ofms.FACDCACCM A, (Select A.ACCCD ACCCD, A.SACCCD SACCCD, A.SACCNAME, A.MACSTS MACSTS, A.BATSTS BATSTS From ofms.FaCDCACSA A, (select ACCCD, Count(SACCCD) From ofms.FaCDCACSA Where salevind = '중분류 ' Group By ACCCD, ACCNAME Having Count(SACCCD) = 1) B Where A.ACCCD = B.ACCCD And A.salevind = '중분류 ' ) C Where A.CODE = C.ACCCD(+) AND A.ACCSTS = 'Y' AND A.BGTSTS = 'Y' AND A.MACSTS ='N') P Where P.BATSTS IS null OR P.BATSTS = 'N' ORDER BY P.ACCCD, P.NAME

ㅇ 실행계획

Rows Execution Plan------- --------------------------------------------------- 0 SELECT STATEMENT GOAL: RULE 71 SORT (ORDER BY) 71 FILTER 78 MERGE JOIN (OUTER) 79 SORT (JOIN) 78 TABLE ACCESS (FULL) OF 'FACDCACCM' 54 SORT (JOIN) 104 VIEW 104 NESTED LOOPS 105 VIEW 105 FILTER 140 SORT (GROUP BY) 1287 TABLE ACCESS (BY INDEX ROWID) OF 'FACDCACSA' 1288 INDEX (RANGE SCAN) OF 'FACDCACSA_IDX_SALEVIND' (NON-UNIQUE) 104 TABLE ACCESS (BY INDEX ROWID) OF 'FACDCACSA'133952 INDEX (RANGE SCAN) OF 'FACDCACSA_IDX_SALEVIND' (NON-UNIQUE)

Oracle Database 소개

Page 66: Oracle Korea / 2005 . 07

66

ㅇ 수정후 실행계획

Execution Plan --------------------------------------------------- SELECT STATEMENT GOAL: RULE SORT (ORDER BY) FILTER MERGE JOIN (OUTER) SORT (JOIN) TABLE ACCESS (FULL) OF 'FACDCACCM' SORT (JOIN) VIEW NESTED LOOPS VIEW FILTER SORT (GROUP BY) TABLE ACCESS (FULL) OF 'FACDCACSA' TABLE ACCESS (BY INDEX ROWID) OF 'FACDCACSA' INDEX (RANGE SCAN) OF 'FACDCACSA_CK_ACCCDSACCCD' (UNIQUE)

ㅇ 원 인 : FACDCACSA 테이블의 분포도가 좋지않는 인덱스가 전체적인 실행계획을 방해하며 2 번씩 읽히고 있음 . FACDCACSA 가 드라이빙될수 있도록 조치

ㅇ 조 치 : 다른 인덱스를 읽도록 rtrim 을 이용하여 실행계획 조정ㅇ 수정문

Select P.ACCCD, P.NAME, P.SACCCD, P.SACCNAME , P.MACSTS, P.BUASTS FROM (Select A.Code ACCCD, A.NAME NAME, C.SACCCD SACCCD, C.SACCNAME SACCNAME, C.MACSTS MACSTS, C.BATSTS BATSTS, A.BUASTS BUASTS FROM ofms.FACDCACCM A, (Select A.ACCCD ACCCD, A.SACCCD SACCCD, A.SACCNAME, A.MACSTS MACSTS, A.BATSTS BATSTS From ofms.FaCDCACSA A, (select ACCCD, Count(SACCCD) From ofms.FaCDCACSA Where RTRIM(salevind) = '중분류 ' Group By ACCCD, ACCNAME Having Count(SACCCD) = 1) B Where A.ACCCD = B.ACCCD And rtrim(A.salevind) = '중분류 ' ) C Where A.CODE = C.ACCCD(+) AND A.ACCSTS = 'Y' AND A.BGTSTS = 'Y' AND A.MACSTS ='N') P Where P.BATSTS IS null OR P.BATSTS = 'N' ORDER BY P.ACCCD, P.NAME;

Oracle Database 소개

Page 67: Oracle Korea / 2005 . 07

67

ㅇ 시스템 : 재무시스템ㅇ 속 도 : 기존 30 초 -> 0.5초

ㅇ 원문장 SELECT A.ACSLPNO, A.SSENO, REPLACE(D.TITCNT, CHR(13) || CHR(10), ' '), A.CUSNAME, A.DPSNO, A.CASHAMT+A.CDAMT INAMT, A.PAYIND, TO_CHAR(D.APPDT,'yyyy/mm/dd'), A.CUSCD FROM ofms.FAABMDECD A, ofms.FFBNMMSTM B, ofms.FACDCAUNM C, ofms.FAABMDECI D, ofms.FACDCAUNM E WHERE A.OUTDPSNO = B.DPSNO AND B.SRL = (SELECT MAX(SRL) FROM ofms.FFBNMMSTM WHERE DPSNO = A.OUTDPSNO ) AND B.AUNCD = C.CODE AND A.ACSLPNO = D.SLPNO AND D.SSENO = 1 AND D.WTAUN = E.CODE AND B.AUNCD = '01' AND A.PAYIND IN ('계좌이체 ', '구매카드 ', '~보수발행 ', '지준이체 ', ' 현금 (출장 )', '계좌이체 (출장 )', '인터넷지로 ', '자동이체 ', '대량이체 ' ) AND D.APPDT BETWEEN ADD_MONTHS(TO_DATE('2002/07/23','YYYY/MM/DD'),-1) AND TO_DATE('2002/07/23','YYYY/MM/DD') +1 AND D.WTEMPNO = '19950872'

Oracle Database 소개

Page 68: Oracle Korea / 2005 . 07

68

ㅇ 실행계획

QUERY_PLAN----------------------------- SELECT STATEMENT cost =.1 NESTED LOOPS.1 NESTED LOOPS.1 NESTED LOOPS.1 NESTED LOOPS.1 TABLE ACCESS FULL FAABMDECI.2 INDEX UNIQUE SCAN FACDCAUNM_PK_CODE UNIQUE.2 TABLE ACCESS BY INDEX ROWID FAABMDECD.1 INDEX RANGE SCAN FAABMDECD_IDX_ACSLPNO NON-UNIQUE.2 TABLE ACCESS BY INDEX ROWID FFBNMMSTM.1 INDEX UNIQUE SCAN FFBNMMSTM_CK_DPSNO UNIQUE.1 SORT AGGREGATE.1 INDEX RANGE SCAN FFBNMMSTM_CK_DPSNO UNIQUE.2 INDEX UNIQUE SCAN FACDCAUNM_PK_CODE UNIQUE

ㅇ 원 인 : index가 1 개 생략되어 있음ㅇ 조 치 : index 생성 create index ix_FAABMDECI9 on fms.FAABMDECI(APPDT, WTEMPNO) tablespace indx storage(initial 2m next 2m pctincrease 0) nologging;

ㅇ 실행계획QUERY_PLAN----------------------------- SELECT STATEMENT cost =.1 NESTED LOOPS.1 NESTED LOOPS.1 NESTED LOOPS.1 NESTED LOOPS.1 TABLE ACCESS BY INDEX ROWID FAABMDECI.1 INDEX RANGE SCAN IX_FAABMDECI9 NON-UNIQUE.2 INDEX UNIQUE SCAN FACDCAUNM_PK_CODE UNIQUE.2 TABLE ACCESS BY INDEX ROWID FAABMDECD.1 INDEX RANGE SCAN FAABMDECD_IDX_ACSLPNO NON-UNIQUE.2 TABLE ACCESS BY INDEX ROWID FFBNMMSTM.1 INDEX UNIQUE SCAN FFBNMMSTM_CK_DPSNO UNIQUE.1 SORT AGGREGATE.1 INDEX RANGE SCAN FFBNMMSTM_CK_DPSNO UNIQUE.2 INDEX UNIQUE SCAN FACDCAUNM_PK_CODE UNIQUE

Oracle Database 소개

Page 69: Oracle Korea / 2005 . 07

69

튜닝완료후

Oracle Database 소개

Page 70: Oracle Korea / 2005 . 07

70

ㅇ 시스템 : 그룹웨어 , KM 시스템ㅇ 환 경 : 오라클 DBMS 8.1.7, 사용자수 (4000), DB 크기 (100G), SUN5500(CPU 8, MEM 8G)ㅇ 현 상 : 원인불명의 시스템 다운현상 반복 , 주요화면 속도 저하 , 아침시간대 30 분간 시스템 HANGUP현상 발생ㅇ 사용자 : 아침시간대 30 분간 시스템을 사용 할 수 없고 , 장애가 빈번하고 속도가 느려 도저히 못 쓰겠음 .

성능관리 예제 2

Oracle Database 소개

Page 71: Oracle Korea / 2005 . 07

71

튜닝전

Oracle Database 소개

Page 72: Oracle Korea / 2005 . 07

72

Oracle Database 소개

Page 73: Oracle Korea / 2005 . 07

73

ㅇ 시스템 : 오아시스 ( 지식관리 배치처리 )ㅇ 속 도 : 14시간

ㅇ 문 장

select docnumber from docsadm.profile where fulltext = 'Y' and board is null and work_flag is null and rownum < 501;ㅇ 실행계획QUERY_PLAN--------------------------------- SELECT STATEMENT cost = 11701.1 COUNT STOPKEY.1 TABLE ACCESS FULL PROFILE

ㅇ 원 인 : 200 만건의 profile 을 full scan 하고 있음 . fulltext 칼럼의 분포도가 50% 로서 매우 좋지 않아 단일인덱스를 생성할수 없는 상황이며 테이블에 빈번한 수정 삭제가 일어나서 bitmap index를 생성할수 없으므로 b tree 결합인덱스로 테이블 접근이 이루어지지 않도록 조치ㅇ 조 치create index ix_profile44 on docsadm.profile(fulltext,docnumber,board,work_flag)tablespace docsind storage(initial 2m next 2m pctincrease 0) nologging;

ㅇ 수정후 실행계획QUERY_PLAN-------------------------- SELECT STATEMENT cost = 4.1 COUNT STOPKEY.1 INDEX FAST FULL SCAN IX_PROFILE44 NON-UNIQUE

ㅇ 완료후 속도 : ??

Oracle Database 소개

Page 74: Oracle Korea / 2005 . 07

74

튜닝완료후

Oracle Database 소개

Page 75: Oracle Korea / 2005 . 07

75

예제 3

Oracle Database 소개

Page 76: Oracle Korea / 2005 . 07

76

ㅇ 문제문장

Select a.title

From intraware.PARTICIPANT b, intraware.APPROVAL a

WHERE a.APPRID = b.APPRID

and b.APPROVALSTATUS in (4, 512)

and (b.SIGNERID = '00000000010'||'001012065')

ㅇ 수행속도 : 기존 1761ms -> 튜닝후 10ms

ㅇ 실행계획분석

QUERY_PLAN

---------------------------------------

SELECT STATEMENT cost =

.1 NESTED LOOPS

.1 TABLE ACCESS FULL PARTICIPANT

.2 TABLE ACCESS BY INDEX ROWID APPROVAL

.1 INDEX UNIQUE SCAN XPKAPPROVAL UNIQUE

ㅇ 생성후 실행계획

QUERY_PLAN

------------------------------------------

SELECT STATEMENT cost =

.1 NESTED LOOPS

.1 INLIST ITERATOR

.1 TABLE ACCESS BY INDEX ROWID PARTICIPANT

.1 INDEX RANGE SCAN IX_PARTICIPANT2 NON-UNIQUE

.2 TABLE ACCESS BY INDEX ROWID APPROVAL

.1 INDEX UNIQUE SCAN XPKAPPROVAL UNIQUE

Oracle Database 소개

Page 77: Oracle Korea / 2005 . 07

77

ㅇ 기타시스템

Oracle Database 소개

Page 78: Oracle Korea / 2005 . 07

78

ㅇ 기타시스템

Oracle Database 소개

Page 79: Oracle Korea / 2005 . 07

79

감사합니다

Oracle Database 소개