본문 바로가기

전체 글74

[Oracle]Data Buffer Cache Tuning 오라클 데이터 버퍼캐시 튜닝 [Oracle]Data Buffer Cache Tuning 오라클 데이터 버퍼캐시 튜닝 Data Buffer Cache 영역도 빠른 억세스를 하기위해서 매우 중요한 부분입니다.8i버전에서는 테이터 버퍼캐쉬를 효율적으로 사용할 수 있도록 keep, recycle, default 이렇게 3가지로 나눠서 적재할 수 있게 하였습니다. keep : 소량이며 자주사용하는 데이터 저장recycle : 대량이도 자주 사용되지 않는 데이터 저장default : 그외에 기본 11g부터는 result_cache라는 곳을 데이터버퍼캐시말고 별도로 지원합니다.자주사용하는 sql문장에 result_cache라는 힌트절을 주면 데이터버퍼캐시에 저장하지않고result_cache에 저장해놓고 이곳에서 빠르게 데이터를 불러올 수 있습니.. 2014. 7. 24.
[Oracle]Shared Pool tuning 공유풀 튜닝 [Oracle]Shared Pool tuning 공유풀 튜닝 shared pool에 Library cache는 sql파싱결과를 저장해놓는 공간입니다.Shared pool의 메모리가 부족하다면 자주파싱되는 sql문이 밀려나면서 악순환이 이어집니다.그리고 사용자들이 잘못 작성한 sql문들이 Library cache를 점령하고 있다면 공간낭비가 되겠죠.이때문에 Library cache를 효율적으로 관리하는것이 중요합니다. LIbrary cache에 sql문장들이 잘 적재되어 재사용되고 있는지 확인하는법입니다.V$LIBRARYCACHE를 조회해 보시면 위와같은 칼럼을 보실 수 있는데요GETS는 파싱된 SQL문이 있는지 LIBRARY에요청한 총 횟수 입니다.GETHITS는 LIBRARY에 요청했을때 파싱결과가 있.. 2014. 7. 24.
[Oracle]분석 기능 statspack, AWR(Automatic Workload Repository) [Oracle]분석 기능 statspack, AWR(Automatic Workload Repository) 사전튜닝은 V$SQLAREA 조회를 통해서 TOP SQL을 찾아 튜닝을 해주는데요 V$SQLAREA를 직접 조회하지않고 더 편리하게분석할 수 있는 방법이 있습니다. TOP SQLCPU, I/O를 가장많이 유발하는 SQL문장을 말합니다.사전튜닝의 대상이죠. 8i버전에서는 분석을 시작할때 UTLBTAT.SQL을 실행시키고끝낼때 UTLESTAT.SQL를 실행시켜 REPROT.TXT를 만들었습니다.이를 통해서 분석을 했었죠.9i버전 부터는 STATSPACK이라는 패키지를 제공했습니다. 이것은 패키지이기때문에결과를 DATA DICTIONARY TABLE에 저장해 사용자가 SELECT문장으로 조회 할 수 있었.. 2014. 7. 23.
[Oracle]오라클 테이블 종류 [Oracle]오라클 테이블 종류 ㅁ 클러스터 여부에 따라 non클러스터 테이블 클러스터 테이블 - 인덱스 클러스터 테이블 - 해시 클러스터 테이블 ㅁ 파티션 여부에 따라 non파티션 테이블 파티션 테이블 - 수평 - Range 파티션 테이블 - List 파티션 테이블 - Hash 파티션 테이블 - 수직 2014. 7. 23.
[Oracle]Cluster Index 오라클 클러스터 인덱스 [Oracle]Cluster Index 오라클 클러스터 인덱스 dept 테이블과 emp 테이블이 있는데 이 데이터를 뽑아올때deptno로 조인해서 항상 불러온다면 이럴때 클러스터 인덱스로 구성하는것이 효율적입니다. 먼저 dept로 클러스터를 만들어 줍니다.이때 size를 7800으로 설정해줬는데 그이유는 현재 오라클 한블락당 저장할 수 있는 byte수를 확인해보면8k로 되어있습니다.(SHOW PARAMETER BLOCK으로 확인해보면 나옵니다.) 그런데 블락에는 항상 300byte정도가 헤더로 쓰입니다.여기에는 데이터를 저장할 수 없죠. 그래서 size를 300byte를 뺀 7800으로 설정해줬습니다.이렇게 설정했다고해서 정확히 7800으로 되지않고 알아서 적절히.. 설정이 됩니다. 그리고나서 방금만든 .. 2014. 7. 23.
[Oracle]HASH PARTITION TABLE [Oracle]HASH PARTITION TABLE 동시 이용자는많고 대량의 데이터가 저장되지만 뽑아오는 데이터는 적을때이럴때 HASH PARTITION을 이용한다면 효율적으로 데이터를 뽑아올 수 있습니다.HASH PARTITION은 파티션갯수대로 나누면 데이터가 자동으로랜덤으로 분할되어서 각각의 파티션에 저장됩니다. 위와같은 문법으로 HASH PARTITION을 만들 수 있습니다. 이렇게도 만들 수 있습니다. 만약 1월달, 2월달 이렇게 데이터를 불러와야하는 때에 해쉬테이블을 적용한다면성능이 정말 떨어지겠죠. 이처럼 RANGE, HASH, LIST 각각의 파티션테이블을 상황에 맞게구성하는것이 중요합니다. 2014. 7. 23.
[Oracle]Range partition table [Oracle]Range partition table 테이블을 구성할때 파티션을 나누는것은 매우 중요합니다.성능상 그리고 관리차원에서 꼭 필요하죠. range partition은 범위를 정해서데이터를 자주 뽑아낼때 이에 맞춰서 구성하면 아주 유용하게 쓰일 수 있습니다. 먼저 C드라이브에 4개의 폴더를 만들겠습니다.실습이라 이렇게 하지만 실제로 구성할때는 C D E F등 다른 디스크장치로지정하는것이 좋겠죠 각각에 테이블 스페이스를 만들어 줍니다. RANGE PARTITION TABLE을 만드는 문법은 위와 같이 됩니다.위는 2011년 데이터, 2012년, 2013, 2014 데이터를 각각의 파티션에 나눠서 저장하도록 만들었습니다.IDATE라는 DATE를 기준으로 분할을 하고있죠. 이렇게 데이터를 넣게되면 .. 2014. 7. 23.
[Oracle]MATERIALIZED VIEW 데이터가 있는 뷰 [Oracle]MATERIALIZED VIEW 데이터가 있는 뷰 일반적으로 VIEW는 데이터가 없는 가상의 테이블이죠.그렇기 때문에 VIEW를 조회하면 내부적으로는 각각의 테이블로 가서 조인을수행하죠. 하지만 MATERIALIZED VIEW는 VIEW를 만들때 실제로 데이터까지만드는 것입니다. 이렇게되면 조인을 할때 저장되어있는 데이터를 불러오기만 하면 되겠죠.이처럼 성능상의 이유로 MATERIALIZED VIEW를 사용합니다. 이러한 문법으로 생성할 수 있습니다.REFRESH는 테이블에 업데이트가 있을경우 그 방법을 명시하는 부분입니다.ENABLE QUERY REWRITE는 쿼리를 재사용한다는 뜻입니다. 아래쪽에 예제가 있습니다. REFRESH 옵션- COMPLETE : 전부 삭제한뒤 다시 갱신한다.-.. 2014. 7. 23.
[Oracle]INDEX INVISIBLE [Oracle]INDEX INVISIBLE INVISIBLE은 보이지않는 이라는 뜻을 갖고있죠. 말그대로 인덱스는 있지만 사용하지않는 것을 뜻합니다.인덱스를 일반적으로 만들고나면 바로 사용되어지죠.하지만 INVISIBLE을 설정하게되면 만들었지만 사용할 수 없게 할 수 있습니다. 인덱스를 만들었습니다. 위와같은 쿼리를 날리자 인덱스를 사용해서 실행을 했습니다 아까사용한 인덱스를 INVISIBLE 해보겠습니다. 힌트까지 주면서 사용하라고 했지만 테이블 풀스캔한 것을 볼 수 있습니다.이처럼 INVISIBLE설정을 하게되면 인덱스를 만들었지만 사용 할 수 없습니다. USER_INDEXES에 이러한 정보가 나오는데요 기본적으로 만들면 VISIBLE로 되어서 사용이 가능한것입니다.INVISIBLE로 했다면 사용이.. 2014. 7. 23.