728x90

분류 전체보기 294

Performance Tuning 실무

Performance Tuning 실무 1. 현실적 저성능 시스템 요인 - 대부분의 주요인은 DB관련 비효율이며 cpu/memory부하가 아닌 비효율적인 I/O 2. 개선 - RDB에 적합한 최적화와 DB Design, Optimizer가 최고의 효율을 낼수 있는 옵티마이징 전략과 집합개념의 고성능 SQL이 성공의 열쇠 1) 100만건 2) 2만건 100 byte 10,000byte 1) 이 두배 빠름, 양으로 I/O는 block단위로 한다(row단위 x) oracle block은 8k 3. batch프로그램의 성능 개선 1) 절차형 -> 비절차형(SQL)로 바꾸는 것이 효율적이다 2) 절차형 TUNING에는 한계가 있다 cursor select ~ -> 개선(8시간 -> 4시간) : index조정 fe..

Programming/Oracle 2008.12.02

URPOSE

URPOSE 마지막 건을 찾기 위해 SUB-QUERY에 MAX를 취해 마지막건을 추출함으로써 동일한 테이블의 데이터를 두 번 ACCESS 함으로 비효율이 발생됨. 이것을 INDEX_DESC의 HINT를 사용하여 한번만 데이터를 ACCESS하도록 개선한 사례이다. - 대용량 데이터베이스 솔류션I의 부분 범위 처리 활용 방법 참조 - 해당 내용은 실무의 모든 시스템에 비슷한 사례가 반드시 존재하고 있음. TUNING 전 SQL select MEM.rowid ,MEM.MEMO_BAN ,MEM.MEMO_ID, TO_CHAR(MEM.SYS_CREATION_DATE, 'YYYYMMDDHH24MISS') TO_CHAR(MEM.MEMO_DATE,'YYYYMMDDHH24MISS') , MEM.MEMO_TYPE ,MEM...

Programming/Oracle 2008.12.02

or 연산자

논리합 연산자를 사용하는 것은 득보다는 실이 많은 것이 사실이다. 여기에서는 논리합 연산자를 사용할 수 밖에 없는 상황에서 약간의 아이디어를 통해 논리합 연산자를 사용하지 않고 또는 단순 논리합 연산자로 처리하는 방법에 대해서 알아본다. (KEY WORD : 논리합 연산자, IN, OR ) 어느 보험회사의 보험 인수실적을 관리하는 테이블에는 '개포준구분'이라는 컬럼이 있으며, 개별(10), 포괄(20), 준포괄(30) 등의 값을 가지고 있다. 사용자가 화면에서 선택한 구분값에 따라 '개별'일 경우와 '포괄' 또는 '준포괄'등을 포함한 '포괄외'의 두가지 경우로 조회하고자 한다. 여기서는 이 사례 설명의 목적상 성능 및 인덱스와 관련한 설명은 설명한다. 다음의 SQL을 보자. SELECT ………………………..

Programming/Oracle 2008.12.02

테이블 생성시 NULL 컬럼의 적용

테이블을 생성할 때 NULL 컬럼의 적용에 대해서 알아본다. (KEY WORD : INDEX 활용, 인덱스, NULL ) 테이블의 컬럼을 설계할 때 기본값(Default Value)을 ‘NULL’로 할 것인가 아니면 임의의 값(예: X, 0, A등)으로 할 것인가는 인덱스 처리와 밀접한 관계를 가진다. 만약 분포도가 양호한 컬럼이 ‘NULL’로 정의되어 있다면 우리는 어쩔수 없이 전체 테이블을 엑세스하거나 다른 조건의 도운을 받을 수 밖에 없다. 또한 너무 많은 로우를 가진 경우에 컬럼을 ‘NULL’로 지정하지 않고 인덱스를 가지고 있다면 넓은 범위를 인덱스로 처리하게 됨으로써 오히려 불리하게 된다. 다음의 SQL을 보자 SELECT ORD_NO, ORD_DATE, ITEM, ORD_QTY FROM OR..

Programming/Oracle 2008.12.02

Function based index

ORACLE8i에서는 FUNCTION BASED INDEX라는 확장된 INDEX의 개념이 도입되었다. 이것은 이전에 모든 사용자가 원했던 B*Tree 인덱스의 제한사항을 다소 완화시켰다. 그러면 이러한 확장 인덱스가 가지는 의미는 무엇이고, 어떤 매카니즘으로 동작하며, B*Tree 인덱스의 어떤 단점을 보완할 수 있는지 알아보자 SCOPE & APPLICATION FUNCTION BASED INDEX의 기본적인 개념과 활용방안 KEY IDEA Function based index, Index SUPPOSITION DESCRIPTION B*Tree INDEX는 정해진 규칙을 준수해야만 INDEX를 사용할 있어 INDEX 컬럼을 가공해야 하는 경우나 계산된 값으로 driving을 해야 하는 경우에 많은 비효..

Programming/Oracle 2008.12.02

Analytic Function 2

Analytic functions2 RISQL, SQL 확장,Intelligent SQL, Analytic functions SQL이 여러 분야에서 다양하게 사용되긴 하지만, 분석작업을 위한 강력한 기능을 가지고 있지는 않다. 때문에 MOVING AVERAGES, RANKINGS, AND LEAD/LAG COMPARISONS 같은 기본적인 BUSINESS INTELLIGENCE CALCULATION 을 수행하기 위해서는 표준 SQL외에 과도한 프로그램밍 작업을 요구하게 된다. 뿐만 아니라 이러한 작업은 간혹 시스템 성능에 치명적인 장애가 될 수도 있다. ORACLE8i 8.1.6 에서는 이러한 요구들을 다루기 위해 BUSINESS INTELLIGENCE CALCULATION에 대한 새로운 FUNCTION..

Programming/Oracle 2008.12.02

Analytic Function(오라클 윈도우 펑션)

Analytic Function 제1회 Analytic Function의 소개 및 수행원리 Analytic function의 소개 초기 대부분의 RDBMS는 집합적인 개념에 충실하여 만들어 졌기 때문에 집합적인 개념에 위배되는 처리는 표준 SQL로 처리가 불가능 하였다. 그래서 이러한 작업은 프로그램 로직으로 처리 하거나 데이터의 복제 등 다양한 응용 고난도 SQL( 대용량 데이터베이스 2권 참조)을 활용하여 처리 해야만 했다. 그러나 프로그램에서 로직으로 처리할 경우 집합 개념의 RDB시스템에서 심각한 성능저하를 유발할 수 있다는 점을 ”고성능 DB구축을 위한 핵심요소의 이해”를 읽으신 분들은 이해하실 수 있을 것이다. 즉 고가의 고성능 RDB를 구입해 놓고 DBMS를 단지 Data 저장소로만 사용하는..

Programming/Oracle 2008.12.02

HINT

힌트의 파싱과 힌트구문 오류에 대한 처리 ======================================= 옵티마이져가 쿼리를 분석하여 실행계획을 수립할때 힌트도 파싱을 합니다.. 일반적으로 힌트에서 힌트간의 우선 순위는 거의 없습니다.. 일부 힌트의 경우 특정힌트가 나오면 무시되거나 하는것은 있습니다.. 우리가 쿼리 문장에 힌트를 기술시 힌트에 따라, 또는 테이블 엘리어스를 사용하는것에 따라 또는 테이블명을 직접 기술해야만 하는 힌트도 있습니다.. 힌트의 파싱 옵티마이져가 힌트를 파싱할때 쿼리 블럭의 스키마도 같이 파싱하는 것은 아닙니다.. 단지 구문을 파싱하며 체크할 뿐입니다.. 즉 간단히 예를 들면 SELECT * FROM EMP WHERE EMPNO > 10 ; 이 구문을 가지고 예를 들면 ..

Programming/Oracle 2008.12.02
728x90