SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
WareValley
http://www.WareValley.com
WareValley
Oracle
중소기업 DB관리자를 위한 데이터베이스
성능 최적화 및 품질 고도화 전문가 과정 #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 소개
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
STATSPACK Package
• 두 시점 사이의 상태 값들의 평균/차이 등을 수집하여 분석
• 8i까지는 utlbstat.sql , tulestat.sql Script를 실행
• 9i에서는 STATSPACK Package를 사용
• 10g 이후부터는 AWR를 사용
(Automatic Workload Repository)
Dynamic Performance View #1
Redo
Log
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$sesstat
v$sysstat
(목표: 적중률 90%)
v$bh
v$cache
v$buffer_pool
v$sgastat
v$shared_pool_reserved
(목표: request_failures = 0)
v$librarycache
(목표: 비율 90%이상)
v$sqlarea
v$sqltext
v$db_object_cache
v$sgastat
v$rowcache
(목표: getmisses-gets 15%)
v$sysstat
(목표: request, wait-time값 0)
v$session_wait
• 동적으로 변화는 성능에 관련된 정보
• Memory 영역, Process 영역, File 영역 성능에 관련된 정보
Dynamic Performance View #2
• 동시에 많은 사용자가 작업을 실행할 경우 성능 저하 가능
Background Process
PMON SMON DBWR CKPT LGWR ARCn etc
Data
files
Temp
files
RBS
files
Control
files
Redo log
files
db_write_processes
dbwr_io_slaves
db_file_simultaneous_writes
disk_asynch_io
checkpoint_process
log_checkpoint_interval
log_checkpoint_timeout
log_checkpoint_to_alert
dbwr_io_slaves
disk_asynch_io
v$filestat
(목표: 분산배치)
v$datafile
v$lock
v$sort_segment
v$sort_usage
v$sysstat
(목표: disk-mem 5%이하)
v$sysstat
(목표: wait-get 1%이하)
v$rollstat
(목표: waits-gets 5%이하)
v$transaction
v$system_event
v$controlfile
v$sysstat
v$system_event
v$log
v$logfile
Dynamic Performance View (예제)
SELECT * FROM V$SGASTAT;
 SGA 영역의 현재 상태를 참조
 활성화된 메모리 구조 및 각 영역의 크기
SELECT * FROM V$SYSSTAT;
 어떤 Resource에서 Wait Event가
발생했는지 확인
SELECT * FROM V$FILESTAT;
 물리적 구조에서의 R/W 할 때
발생하는 File I/O 정보
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 실행
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 에 대해서 간단하게 설명
Shared Pool 현상분석
SELECT * FROM V$LIBRARYCACHE;
 90% 이상 유지
SELECT SUM(PINS), SUM(RELOADS),
SUM(RELOADS) / SUM(PINS)
FROM V$LIBRARYCACHE;
 1% 이하 유지
 PINS : 메모리에 남아있는 문장
 RELOADS : 제거된 문장
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;
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
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 단위로 할당)
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 ] );
Data Buffer Cache Tuning
3. 자주 사용되는 Table을 Caching
CREATE TABLE [table name] [ CACHE | NOCACHE ];
ALTER TABLE [table name] [ CACHE | NOCACHE ];
SELECT /*+CACHE*/ ...
Data Buffer Cache Tuning
4. Multi Block 구조로 생성
CREATE TABLESPACE [tablespace name]
DATAFILE [file경로 및 이름]
SIZE [크기]
BLOCKSIZE [n] K
 10g 이후부터 Tablesapce 별로 Block 크기 설정 가능
 Block 별로 Header 영역의 크기가 약 300 byte 정도
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;
NoSQL 이란 ?
 No SQL , Not Only SQL
( SQL이 아니다. )
 Non-Relational Operational Database SQL
(관계형 Database가 아닌 SQL)
Data Repository의 변화
 50년대 말 Mainframe 시대 (Host 중심)
- File System
 90년대 Internet 시대 (PC의 등장으로 Server/Client 중심)
- RDBMS (MB, GB 단위)
 2000년대 무선 Internet 시대 (SNS , Cloud 중심)
- NoSQL (TB, PB 단위)
NoSQL의 장/단점
1. NoSQL의 장점
특성 내용
확장성과 탄력성 데이터가 증가함에 따라서 Node만 늘려주면 된다. 미리부터 시스템의 규모를 예측할 필요가 없다.
고성능 자료 구조가 단순하기에 미리 데이터 인덱싱을 생성할 수 있다. 낮고 예측 가능한 응답시간은
NoSQL의 최대 장점이다. 대부분 O(1) ~ O(n)의 시간 복잡도 지원
분산시스템 Cluster에서 Node중 하나가 죽더라도 전체 서비스에 지장이 없다. 물론 RDBMS에도 Replication 할
수 있는 시스템은 있으나 NoSQL의 그것과 비교할 때 비용이 크다.
Schema less Scheme가 없기 때문에 유연한 데이터 모델을 가져갈 수 있고, 구조 변경에 따른 비용유발이
RDBMS에 비해 매우 적고, 초기 설계기간도 단축된다.
2. NoSQL의 단점
특성 내용
데이터 일관성 트랜잭션을 지원하지 않거나 낮은 수준(Application단 구현)으로 지원한다.
복잡한 처리에 적합하지 않다.
데이터 무결성 어플리케이션 단에서 모든 무결성을 보장해야 한다.
Schema less 단일 구조의 데이터 형식이라 Join 과 같은 복잡한 형태의 데이터 조회 방식이 어렵다.
NoSQL의 특징
1. Clouding Computing 환경에 가장 적합하다.
- Open Source이기에 각 기업 환경에 최적화 구축이 가능
2. 유연한 Data Model 구축이 가능하다.
- Schema가 없으므로 정규화가 필요없음
- 설계 기간 단축 및 운영 중 변경이 유연함
3. Big Data 처리에 효과적이다.
- Memory Mapping 기술로 구현되어 Read/Write 작업이 빠름
4. 구축 비용 및 기간이 RDBMS에 비해 경제적이다.
NoSQL 제품의 종류
1. Key-Value Database
- Amazon
- Riak, Voldemort, Tokyo*
2. Column-based Database
- Google
- Hbase, Casandra, Hypertable
Data Model에 따른 NoSQL 종류
NoSQL 제품의 종류
3. Document Database
(JSON / XML)
- Lotus
- MongoDB, Cough DB
4. Graph Database
- Euler & Graph Theory
- AllegroGraph, Sones
Database 제품군
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
JSON
http://www.10gen.com
http://www.mongodb.org
MongoDB Terminology
SCOTT.EMP
_ID Field
(Primary Key)
BSON Field
(Column)
BSON Document
(Row)
Collection
(Table)
Embedded & Linking
(RelationShip)
SCOTT.DEPT
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});

Contenu connexe

Tendances

Tendances (20)

KEEP BUFFER 활용 방안_Wh oracle
KEEP BUFFER 활용 방안_Wh oracleKEEP BUFFER 활용 방안_Wh oracle
KEEP BUFFER 활용 방안_Wh oracle
 
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
배치 프로그램에서 튜닝대상 SQL 추출하기_Wh oracle
 
SSD 개념 및 활용_Wh oracle
SSD 개념 및 활용_Wh oracleSSD 개념 및 활용_Wh oracle
SSD 개념 및 활용_Wh oracle
 
[2015-07-20-윤석준] Oracle 성능 관리 2
[2015-07-20-윤석준] Oracle 성능 관리 2[2015-07-20-윤석준] Oracle 성능 관리 2
[2015-07-20-윤석준] Oracle 성능 관리 2
 
SPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracle
SPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracleSPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracle
SPA(SQL Performance Analyze)를 이용한 통계 정보 수집_Wh oracle
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
 
MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용MySQL 상태 메시지 분석 및 활용
MySQL 상태 메시지 분석 및 활용
 
Tungsten 을활용한 MySQL / Hadoop 동기화
Tungsten 을활용한 MySQL / Hadoop 동기화Tungsten 을활용한 MySQL / Hadoop 동기화
Tungsten 을활용한 MySQL / Hadoop 동기화
 
Federated Engine 실무적용사례
Federated Engine 실무적용사례Federated Engine 실무적용사례
Federated Engine 실무적용사례
 
Pg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ffPg day seoul 2016 session_02_v1.0_ff
Pg day seoul 2016 session_02_v1.0_ff
 
SQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracleSQL PlAN MANAGEMENT 활용_Wh oracle
SQL PlAN MANAGEMENT 활용_Wh oracle
 
From MSSQL to MySQL
From MSSQL to MySQLFrom MSSQL to MySQL
From MSSQL to MySQL
 
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracleORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
ORACLE EXADATA HCC 압축방식 이해하기_Wh oracle
 
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracleBind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
Bind Peeking 한계에 따른 Adaptive Cursor Sharing 등장_Wh oracle
 
Oracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameterOracle Query Optimizer 관련 Parameter_OracleParameter
Oracle Query Optimizer 관련 Parameter_OracleParameter
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
 
BlOOM FILTER의 이해와 활용방법_Wh oracle
BlOOM FILTER의 이해와 활용방법_Wh oracleBlOOM FILTER의 이해와 활용방법_Wh oracle
BlOOM FILTER의 이해와 활용방법_Wh oracle
 
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
[Pgday.Seoul 2017] 8. PostgreSQL 10 새기능 소개 - 김상기
 
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
[Pgday.Seoul 2017] 7. PostgreSQL DB Tuning 기업사례 - 송춘자
 
ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회ARCUS offline meeting 2015. 05. 20 1회
ARCUS offline meeting 2015. 05. 20 1회
 

En vedette

OOUG: VST , visual sql tuning diagrams
OOUG: VST , visual sql tuning diagramsOOUG: VST , visual sql tuning diagrams
OOUG: VST , visual sql tuning diagrams
Kyle Hailey
 

En vedette (15)

[오픈소스컨설팅]Performance Tuning How To
[오픈소스컨설팅]Performance Tuning How To[오픈소스컨설팅]Performance Tuning How To
[오픈소스컨설팅]Performance Tuning How To
 
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
[2D7]레기온즈로 살펴보는 확장 가능한 게임서버의 구현
 
OOUG: VST , visual sql tuning diagrams
OOUG: VST , visual sql tuning diagramsOOUG: VST , visual sql tuning diagrams
OOUG: VST , visual sql tuning diagrams
 
Result Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracleResult Cache 동작원리 및 활용방안_Wh oracle
Result Cache 동작원리 및 활용방안_Wh oracle
 
IBM JVM GC_Wh apm
IBM JVM GC_Wh apmIBM JVM GC_Wh apm
IBM JVM GC_Wh apm
 
TCP 연결 과정_Wh apm
TCP 연결 과정_Wh apmTCP 연결 과정_Wh apm
TCP 연결 과정_Wh apm
 
네트워크 기반 통신 및 계층 구조_Wh apm
네트워크 기반 통신 및 계층 구조_Wh apm네트워크 기반 통신 및 계층 구조_Wh apm
네트워크 기반 통신 및 계층 구조_Wh apm
 
All about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apmAll about JDBC Performance Tuning_Wh apm
All about JDBC Performance Tuning_Wh apm
 
Runtime Data Areas_Wh apm
Runtime Data Areas_Wh apmRuntime Data Areas_Wh apm
Runtime Data Areas_Wh apm
 
스위치의 분류 및 역할_Wh apm
스위치의 분류 및 역할_Wh apm스위치의 분류 및 역할_Wh apm
스위치의 분류 및 역할_Wh apm
 
NLJ BATCH와 부분범위 처리_Wh oracle
NLJ BATCH와 부분범위 처리_Wh oracleNLJ BATCH와 부분범위 처리_Wh oracle
NLJ BATCH와 부분범위 처리_Wh oracle
 
WINDOW FUNCTION의 이해와 활용방법_Wh oracle
WINDOW FUNCTION의 이해와 활용방법_Wh oracleWINDOW FUNCTION의 이해와 활용방법_Wh oracle
WINDOW FUNCTION의 이해와 활용방법_Wh oracle
 
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracleSQL Profile을 이용한 SQL Plan 변경_Wh oracle
SQL Profile을 이용한 SQL Plan 변경_Wh oracle
 
Class Loader_Wh apm
Class Loader_Wh apmClass Loader_Wh apm
Class Loader_Wh apm
 
JVM Synchronization_Wh apm
JVM Synchronization_Wh apmJVM Synchronization_Wh apm
JVM Synchronization_Wh apm
 

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

AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
Amazon Web Services Korea
 
SteelEye 표준 제안서
SteelEye 표준 제안서SteelEye 표준 제안서
SteelEye 표준 제안서
Yong-uk Choe
 

Similaire à [2015 07-06-윤석준] Oracle 성능 최적화 및 품질 고도화 4 (20)

MySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docxMySQL_SQL_Tunning_v0.1.3.docx
MySQL_SQL_Tunning_v0.1.3.docx
 
MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바MariaDB 마이그레이션 - 네오클로바
MariaDB 마이그레이션 - 네오클로바
 
Fundamentals of Oracle SQL
Fundamentals of Oracle SQLFundamentals of Oracle SQL
Fundamentals of Oracle SQL
 
Introduction to Apache Tajo
Introduction to Apache TajoIntroduction to Apache Tajo
Introduction to Apache Tajo
 
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
넥슨 글로벌 플랫폼 구축 이야기 : DB Migration case study (임현수 플랫폼인프라실 Technical Manager, 넥...
 
steeleye Replication
steeleye Replication steeleye Replication
steeleye Replication
 
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon Aurora  신규 서비스 알아보기 (최유정 솔루션즈 아키텍트)
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
Expanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with TajoExpanding Your Data Warehouse with Tajo
Expanding Your Data Warehouse with Tajo
 
주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기주니어 개발자의 서버 로그 관리 개선기
주니어 개발자의 서버 로그 관리 개선기
 
SteelEye 표준 제안서
SteelEye 표준 제안서SteelEye 표준 제안서
SteelEye 표준 제안서
 
log-monitoring-architecture.pdf
log-monitoring-architecture.pdflog-monitoring-architecture.pdf
log-monitoring-architecture.pdf
 
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
조대협의 서버 사이드 - 대용량 아키텍처와 성능튜닝
 
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
 
Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013Tajo and SQL-on-Hadoop in Tech Planet 2013
Tajo and SQL-on-Hadoop in Tech Planet 2013
 
MySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptxMySQL_MariaDB-성능개선-202201.pptx
MySQL_MariaDB-성능개선-202201.pptx
 
Spark sql
Spark sqlSpark sql
Spark sql
 
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1  나무기술(주) 최유석 20170912
Bigquery와 airflow를 이용한 데이터 분석 시스템 구축 v1 나무기술(주) 최유석 20170912
 
Oracle History #7
Oracle History #7Oracle History #7
Oracle History #7
 
Maxscale 소개 1.1.1
Maxscale 소개 1.1.1Maxscale 소개 1.1.1
Maxscale 소개 1.1.1
 

Plus de Seok-joon Yun

Plus de Seok-joon Yun (20)

Retrospective.2020 03
Retrospective.2020 03Retrospective.2020 03
Retrospective.2020 03
 
Sprint & Jira
Sprint & JiraSprint & Jira
Sprint & Jira
 
Eks.introduce.v2
Eks.introduce.v2Eks.introduce.v2
Eks.introduce.v2
 
Eks.introduce
Eks.introduceEks.introduce
Eks.introduce
 
AWS DEV DAY SEOUL 2017 Buliding Serverless Web App - 직방 Image Converter
AWS DEV DAY SEOUL 2017 Buliding Serverless Web App - 직방 Image ConverterAWS DEV DAY SEOUL 2017 Buliding Serverless Web App - 직방 Image Converter
AWS DEV DAY SEOUL 2017 Buliding Serverless Web App - 직방 Image Converter
 
아파트 시세,어쩌다 머신러닝까지
아파트 시세,어쩌다 머신러닝까지아파트 시세,어쩌다 머신러닝까지
아파트 시세,어쩌다 머신러닝까지
 
Pro typescript.ch07.Exception, Memory, Performance
Pro typescript.ch07.Exception, Memory, PerformancePro typescript.ch07.Exception, Memory, Performance
Pro typescript.ch07.Exception, Memory, Performance
 
Doing math with python.ch07
Doing math with python.ch07Doing math with python.ch07
Doing math with python.ch07
 
Doing math with python.ch06
Doing math with python.ch06Doing math with python.ch06
Doing math with python.ch06
 
Doing math with python.ch05
Doing math with python.ch05Doing math with python.ch05
Doing math with python.ch05
 
Doing math with python.ch04
Doing math with python.ch04Doing math with python.ch04
Doing math with python.ch04
 
Doing math with python.ch03
Doing math with python.ch03Doing math with python.ch03
Doing math with python.ch03
 
Doing mathwithpython.ch02
Doing mathwithpython.ch02Doing mathwithpython.ch02
Doing mathwithpython.ch02
 
Doing math with python.ch01
Doing math with python.ch01Doing math with python.ch01
Doing math with python.ch01
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScript
 
C++ Concurrency in Action 9-2 Interrupting threads
C++ Concurrency in Action 9-2 Interrupting threadsC++ Concurrency in Action 9-2 Interrupting threads
C++ Concurrency in Action 9-2 Interrupting threads
 
Welcome to Modern C++
Welcome to Modern C++Welcome to Modern C++
Welcome to Modern C++
 
[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock[2015-06-05] Oracle TX Lock
[2015-06-05] Oracle TX Lock
 
[KOSSA] C++ Programming - 18th Study - STL #4
[KOSSA] C++ Programming - 18th Study - STL #4[KOSSA] C++ Programming - 18th Study - STL #4
[KOSSA] C++ Programming - 18th Study - STL #4
 
[KOSSA] C++ Programming - 17th Study - STL #3
[KOSSA] C++ Programming - 17th Study - STL #3[KOSSA] C++ Programming - 17th Study - STL #3
[KOSSA] C++ Programming - 17th Study - STL #3
 

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

  • 1. WareValley http://www.WareValley.com WareValley Oracle 중소기업 DB관리자를 위한 데이터베이스 성능 최적화 및 품질 고도화 전문가 과정 #4 오렌지팀 윤석준 선임연구원
  • 2. - 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 소개
  • 3. 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
  • 4. STATSPACK Package • 두 시점 사이의 상태 값들의 평균/차이 등을 수집하여 분석 • 8i까지는 utlbstat.sql , tulestat.sql Script를 실행 • 9i에서는 STATSPACK Package를 사용 • 10g 이후부터는 AWR를 사용 (Automatic Workload Repository)
  • 5. Dynamic Performance View #1 Redo Log 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$sesstat v$sysstat (목표: 적중률 90%) v$bh v$cache v$buffer_pool v$sgastat v$shared_pool_reserved (목표: request_failures = 0) v$librarycache (목표: 비율 90%이상) v$sqlarea v$sqltext v$db_object_cache v$sgastat v$rowcache (목표: getmisses-gets 15%) v$sysstat (목표: request, wait-time값 0) v$session_wait • 동적으로 변화는 성능에 관련된 정보 • Memory 영역, Process 영역, File 영역 성능에 관련된 정보
  • 6. Dynamic Performance View #2 • 동시에 많은 사용자가 작업을 실행할 경우 성능 저하 가능 Background Process PMON SMON DBWR CKPT LGWR ARCn etc Data files Temp files RBS files Control files Redo log files db_write_processes dbwr_io_slaves db_file_simultaneous_writes disk_asynch_io checkpoint_process log_checkpoint_interval log_checkpoint_timeout log_checkpoint_to_alert dbwr_io_slaves disk_asynch_io v$filestat (목표: 분산배치) v$datafile v$lock v$sort_segment v$sort_usage v$sysstat (목표: disk-mem 5%이하) v$sysstat (목표: wait-get 1%이하) v$rollstat (목표: waits-gets 5%이하) v$transaction v$system_event v$controlfile v$sysstat v$system_event v$log v$logfile
  • 7. Dynamic Performance View (예제) SELECT * FROM V$SGASTAT;  SGA 영역의 현재 상태를 참조  활성화된 메모리 구조 및 각 영역의 크기 SELECT * FROM V$SYSSTAT;  어떤 Resource에서 Wait Event가 발생했는지 확인 SELECT * FROM V$FILESTAT;  물리적 구조에서의 R/W 할 때 발생하는 File I/O 정보
  • 8. 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 실행
  • 9. 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 에 대해서 간단하게 설명
  • 10. Shared Pool 현상분석 SELECT * FROM V$LIBRARYCACHE;  90% 이상 유지 SELECT SUM(PINS), SUM(RELOADS), SUM(RELOADS) / SUM(PINS) FROM V$LIBRARYCACHE;  1% 이하 유지  PINS : 메모리에 남아있는 문장  RELOADS : 제거된 문장
  • 11. 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;
  • 12. 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
  • 13. 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 단위로 할당)
  • 14. 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 ] );
  • 15. Data Buffer Cache Tuning 3. 자주 사용되는 Table을 Caching CREATE TABLE [table name] [ CACHE | NOCACHE ]; ALTER TABLE [table name] [ CACHE | NOCACHE ]; SELECT /*+CACHE*/ ...
  • 16. Data Buffer Cache Tuning 4. Multi Block 구조로 생성 CREATE TABLESPACE [tablespace name] DATAFILE [file경로 및 이름] SIZE [크기] BLOCKSIZE [n] K  10g 이후부터 Tablesapce 별로 Block 크기 설정 가능  Block 별로 Header 영역의 크기가 약 300 byte 정도
  • 17. 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;
  • 18. NoSQL 이란 ?  No SQL , Not Only SQL ( SQL이 아니다. )  Non-Relational Operational Database SQL (관계형 Database가 아닌 SQL)
  • 19. Data Repository의 변화  50년대 말 Mainframe 시대 (Host 중심) - File System  90년대 Internet 시대 (PC의 등장으로 Server/Client 중심) - RDBMS (MB, GB 단위)  2000년대 무선 Internet 시대 (SNS , Cloud 중심) - NoSQL (TB, PB 단위)
  • 20. NoSQL의 장/단점 1. NoSQL의 장점 특성 내용 확장성과 탄력성 데이터가 증가함에 따라서 Node만 늘려주면 된다. 미리부터 시스템의 규모를 예측할 필요가 없다. 고성능 자료 구조가 단순하기에 미리 데이터 인덱싱을 생성할 수 있다. 낮고 예측 가능한 응답시간은 NoSQL의 최대 장점이다. 대부분 O(1) ~ O(n)의 시간 복잡도 지원 분산시스템 Cluster에서 Node중 하나가 죽더라도 전체 서비스에 지장이 없다. 물론 RDBMS에도 Replication 할 수 있는 시스템은 있으나 NoSQL의 그것과 비교할 때 비용이 크다. Schema less Scheme가 없기 때문에 유연한 데이터 모델을 가져갈 수 있고, 구조 변경에 따른 비용유발이 RDBMS에 비해 매우 적고, 초기 설계기간도 단축된다. 2. NoSQL의 단점 특성 내용 데이터 일관성 트랜잭션을 지원하지 않거나 낮은 수준(Application단 구현)으로 지원한다. 복잡한 처리에 적합하지 않다. 데이터 무결성 어플리케이션 단에서 모든 무결성을 보장해야 한다. Schema less 단일 구조의 데이터 형식이라 Join 과 같은 복잡한 형태의 데이터 조회 방식이 어렵다.
  • 21. NoSQL의 특징 1. Clouding Computing 환경에 가장 적합하다. - Open Source이기에 각 기업 환경에 최적화 구축이 가능 2. 유연한 Data Model 구축이 가능하다. - Schema가 없으므로 정규화가 필요없음 - 설계 기간 단축 및 운영 중 변경이 유연함 3. Big Data 처리에 효과적이다. - Memory Mapping 기술로 구현되어 Read/Write 작업이 빠름 4. 구축 비용 및 기간이 RDBMS에 비해 경제적이다.
  • 22. NoSQL 제품의 종류 1. Key-Value Database - Amazon - Riak, Voldemort, Tokyo* 2. Column-based Database - Google - Hbase, Casandra, Hypertable Data Model에 따른 NoSQL 종류
  • 23. NoSQL 제품의 종류 3. Document Database (JSON / XML) - Lotus - MongoDB, Cough DB 4. Graph Database - Euler & Graph Theory - AllegroGraph, Sones Database 제품군
  • 24. 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 JSON http://www.10gen.com http://www.mongodb.org
  • 25. MongoDB Terminology SCOTT.EMP _ID Field (Primary Key) BSON Field (Column) BSON Document (Row) Collection (Table) Embedded & Linking (RelationShip) SCOTT.DEPT
  • 26. 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});