본문 바로가기

컴퓨터62

[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.
[Oracle]Index usage 오라클 인덱스 사용여부 조회 [Oracle]Index usage 오라클 인덱스 사용여부 조회 인덱스를 만들었는데 한번도 사용되지않는다면, 잘못 만든 인덱스겠죠.이러한 인덱스를 찾아서 조취를 해주는것이 좋습니다. 먼저 새로운 인덱스를 만들어보겠습니다. 이러한 명령어를 주시면 해당 인덱스를 모니터링하게됩니다. V$OBJECT_USAGE; 를 조회해보면 사용여부가나옵니다.이 인덱스를 아직 사용하지않은 것을 알 수 있습니다. 인덱스를 사용해보겠습니다. 사용한 뒤에 다시 조회를 했더니 YES라고 떴습니다. 이런 명령어를 주면 다시 모니터링을 끝내는 것을 뜻합니다. 하지만 이러한 방식으로 인덱스를 모니터링한다면 개별적으로전부 명령어를 줘야 하겠죠. 이런방법말고 인터넷을 찾아보시면 사용자단위로 인덱스사용여부를 모니터링하는 스크립트를 찾으실 수 .. 2014. 7. 23.
[Oracle]Index fragmentation 오라클 인덱스 단편화 [Oracle]Index fragmentation 오라클 인덱스 단편화 인덱스를 생성해서 수정삭제가 반복되다보면 인덱스 단편화 현상이 생기는데요보통 B* tree인덱스를 만들었을때 데이터를 입력하면 루트를 기준으로 양옆으로 균형있게데이터가 들어가는데요. 이렇게 균형이 잡혀있는 상태에서 삭제를 한다면 균형이 깨지게되며리프블락에 비어있는 공간이 생길 수 있습니다. 이러한 인덱스 단편화현상은coalesce로 없앨 수 있습니다.일반적으로 인덱스 밸런싱이 20%를 초과하면 성능이 저하된다고해요 BIG_EMP1테이블의 인덱스를 조회해보니 I_BIGEMP_EMPNO라는 인덱스에64개의 리프블락이 있는것을 확인 하실수 있습니다. 대량의 데이터를 삭제하고 다시 분석해보겠습니다. 대량의 데이터가 삭제됬는데도 불구하고 LE.. 2014. 7. 23.
[Oracle]Tablespace fragmentation 오라클 테이블스페이스 단편화 [Oracle]Tablespace fragmentation 오라클 테이블스페이스 단편화 테이블스페이스에는 여러개의 테이블들의 데이터가 저장되는데요테이블에 수정, 삭제, 추가가 자주 일어난다면 테이블 스페이스 단편화 현상이발생합니다. 단편화현상이란 테이블안의 데이터를 수정 삭제를 반복할 수록빈공간들이 많이 생기는데요. 이러한 현상을 단편화라합니다.윈도우에는 조각모음이라는 기능이 있는것처럼 오라클에는 coalesce가 있는데요이 기능을 사용하면 단편화를 없앨 수 있습니다. DBA_FREE_SPACE_COALESCED라는 테이블을 조회해보면 위와같은 칼럼들이 있는데요PERCENT_EXTENTS_COALESCED값을 보시면 현재는 전부 100으로 되어있습니다.이것은 단편화현상이 없다는 것을 뜻하는데요. 만약 수.. 2014. 7. 23.