오라클 53

Buffer cache hit ratio

9i에서 db_block_buffers 파라미터는 db_cache_size로 대체되었습니다. 그리고 그러한 작업 직후에는 일단 버퍼캐쉬에 다시 캐슁 될 때까지는 낮게 나올 수도 있습니다. 어느 정도 시간이 지나야 정상으로 돌아옵니다. 시간이 지나도 계속 낮게 나온다면... exp/imp 과정에서 색인이 누락되거나 혹은 통계값이 제대로 생성되지 않았을 수도 있습니다. 참고로 Hit Ratio Based 튜닝은 요즘엔 아주 낡은 방법으로 인식됩니다. 심지어 어떤 컨설턴트들은 무용론을 펼치기도 합니다. 그 이유를 곰곰히 생각해보면... Hit Ratio 라는게 instance가 시작된 이후로의 평균값이므로 신뢰할 수가 없습니다. 즉, 0과 100점을 평균을 내버리면 50점이 나옵니다. 단순히 오라클이 시작된 ..

오라클/Tip 2010.09.07

Linux에서 Raw Device 사용

Raw Device 사용하기 raw device는 DB 등의 애플리케이션에서 성능을 위하여 OS를 거치지 않고 직접 해당 디스크를 이용하는 방식이다. fdisk 이용 파티션 생성 예) /dev/sdb1 100M ; /dev/sdb2 500M raw device 매핑하기 RHEL 2.1/3.0의 경우 raw device는 /dev/raw/ 디렉토리에 있다. ; raw /dev/raw/rawN ; raw /dev/raw/rawN /dev/ 앞에서 fdisk를 이용하여 만든 파티션(블락디바이스)와 raw 명령을 이용하여 매핑작업을 한다. raw/dev/raw/raw1 /dev/sdb1 raw/dev/raw/raw1 /dev/sdb2 raw device 셋팅 상황을..

오라클/Tip 2010.08.30

UNIX에서 Raw Device 사용

RAW DEVICE 란 흔히 유닉스에서 disk를 억세스하는 방법에 따라 block device(/dev/dsk) 와 raw device(/dev/rdsk) 로 구분을 합니다. 단어 그대로 이해를 한다면 block device에 블록은 파일시스템의 블록을 말하는 겁니다. 즉, Partition을 나누고 Mount Point를 잡을 때(흔히 window 환경에서 말하는 directory 를 말하는 것)의 논리적인 위치를 말하고, raw device는 Partition만 잡고 Mount Point가 없는 것을 말합니다. 다시 말해서 raw device 위에 file device가 언쳐지는 것입니다. OS 는 어플리케이션의 IO 요구에 따라 파일 시스템에서 읽어 오느냐 raw device(파일시스템 보다는 더..

오라클/Tip 2010.08.30

Cardinality 예측 실습

1. Histogram 없는 경우 : -> Density = 1/NDV -- 1) 동등질의 + 상수 = 1/NDV * Base Cardinality where c1 = 1 -- 2) 동등질의 + bind 변수 = 1/NDV * Base Cardinality where c1 = :b1 -- 3) 범위질의 + bind 변수 = 개당 5% * Base Cardinality where c1 > :b1 -- 4) 존재하지 않는 값 = Max와 Min값을 기준으로 벗어나는 where c1 = 6 비율로 일정 비율 감소하다가 일정 한계를 벗어나면 1 (p.423 and p.428) density * 전체 row수 ----------------------- = 구간별 감소 갯수 최대값 - 최소값 2. Histogram..

오라클/Tuning 2010.08.20

Histogram 이란?

Histogram 이란 Table 형태의 빈도(개수)를 Graphical 하게 표현한 것이다. Skewed(빈도가 특정 값에 편향되어있는 것) 한 컬럼과 관련된 히스토그램이 없을 경우 CBO는 selectivity 계산에서 오류를 범하게 된다. 그것은 곧바로 cardinality 계산의 오류로 이어지고, 잘못된 실행계획을 선택하는 결과로 나타난다. 이런경우에 Histogram을 활용하면 보다 정확한 optimizer의 판단을 유도할 수 있다. 히스토그램 생성 1) 모든 column에 대해서 Histogram을 수집하지 않는다. exec dbms_stats.gather_table_stats(user, 't1', method_opt=>'for all columns size 1'); 2) Oracle이 Dat..

오라클/Tuning 2010.08.20

[Oracle Virus] DBMS_XPLAN 패키지에 대한 이해

dbms_xplan 패키지는 Oracle이 제공하는 모든 패키지들 중 가장 중요한 것이다. 왕 중의 왕이다. 적어도 Query를 튜닝하는 사람들에게는 이 명제가 진실일 것이다. dbms_xplan 패키지는 실행 계획을 분석하는 기능을 제공하기 때문이다. 이 패키지가 없이는 Query 튜닝은 불가능하다. Oracle이 버전업되면서 실행 계획이라는 말의 범위가 점점 넓어지고 있다. 최신 버전인 11g 기준으로, 총 5 가지 종류의 실행 계획이 존재한다. 이제는 실행 계획이라는 말을 들으면 "어떤 실행 계획 말하는거야"라고 물어봐야 할 지경이다. 아래 Oracle Virus 동영상에 이것이 잘 설명되어 있다. 출처 : http://ukja.tistory.com/202

오라클/Tuning 2010.08.18

SQL*Plus의 Autotrace 활용

Autotrace 란? SQL*Plus 툴이 제공하는 기능이다. 실행계획은 예상 계획을 뿐 실제 적용이 보장되는 것은 아니다. 실행계획에서 확인되는 rows, bytes, cost 등은 optimizer의 예측에 불과하기 때문에 실제 결과와 다를 수 있다. Autotrace 활성화 SQL> conn / as sysdba SQL> @?/sqlplus/admin/plustrce.sql SQL> grant plustrace to public; Oracle 9i 이하 버전에서 추가 (10g 이상에서는 할 필요 없음) SQL> @?/rdbms/admin/utlxplan.sql Autotrace 옵션 질의결과 실행계획 통계 set autotrace on O O O set autotrace on statistics ..

오라클/Tuning 2010.08.13

LRU 알고리즘

LRU(Least Recently Used) 알고리즘 가장 오래 전에 사용된 것은 디스크에 저장하고 메모리에는 가장 최근에 사용된 데이터를 저장 함으로써, 디스크 I/O를 줄이고, 데이터베이스 시스템의 성능은 증가하도록 하는 관리 기법이다. Working Set LRU 리스트 메인 리스트 : 사용된 버퍼들의 리스트가 hot, cold로 분류 보조 리스트 : 미사용된 버퍼나 DBWR에 의해 기록된 버퍼들의 리스트 LRUW 리스트 메인 리스트 : 변경된 버퍼들의 리스트 보조 리스트 : DBWR에 의해 기록중인 버퍼들의 리스트 LRU 보조 -> LRU 메인 -> LRUW 메인 -> LRUW 보조 순으로 순환하며 버퍼를 탐색한다. 1. Standard LRU 가장 최근에 사용한 버퍼는 LRU 리스트의 MRU e..

오라클/OWI 2010.08.09

다양한 wait가 발생하는 사례 연구 3

# 상황 : latch: library cache, latch: shard pool wait 상황 - bind 변수를 사용하지 않는 경우 - (1) SQL> conn / as sysdba startup force drop table mystat purge; create table mystat as select 0 as no, event, total_waits, time_waited from v$system_event where 1 = 2; insert into mystat select 1 as no, event, total_waits, time_waited from v$system_event; set lines 200 set pages 200 clear break col event format a30 s..

오라클/OWI 2010.08.05

다양한 wait가 발생하는 사례 연구 2

상황 : 넓은 범위에 대한 질의를 인덱스를 이용해서 처리하도록 유도하는 상황이다. (1) 서버 시작 SQL> conn / as sysdba SQL> startup force (2) wait의 변화를 확인하기 위해 테이블 생성 및 스냅샷 생성 SQL> drop table mystat purge; SQL> create table mystat as select 0 as no, event, total_waits, time_waited from v$system_event where 1 = 2; SQL> insert into mystat select 1 as no, event, total_waits, time_waited from v$system_event; SQL> set lines 200 SQL> set pag..

오라클/OWI 2010.08.05