You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 오라클 튜닝 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://toplist.maxfit.vn team, along with other related topics such as: 오라클 튜닝 오라클 튜닝 공부, 오라클 튜닝 가이드, 오라클 튜닝 책, 오라클 튜닝 힌트, 오라클 튜닝이란, 오라클 튜닝 예제, 오라클 튜닝 PDF, 오라클 메모리 튜닝
[Oracle] Select 쿼리 튜닝 순서
- Article author: 12bme.tistory.com
- Reviews from users: 39634 Ratings
- Top rated: 3.9
- Lowest rated: 1
- Summary of article content: Articles about [Oracle] Select 쿼리 튜닝 순서 [Oracle] Select 쿼리 튜닝 순서. 12bme. 쿼리 튜닝은 온라인 SQL이냐 대용량 배치 SQL이냐에 따라 튜닝방법이 달라집니다. 하지만 대용량 배치는 프로그램 수가 많지 … …
- Most searched keywords: Whether you are looking for [Oracle] Select 쿼리 튜닝 순서 [Oracle] Select 쿼리 튜닝 순서. 12bme. 쿼리 튜닝은 온라인 SQL이냐 대용량 배치 SQL이냐에 따라 튜닝방법이 달라집니다. 하지만 대용량 배치는 프로그램 수가 많지 … 쿼리 튜닝은 온라인 SQL이냐 대용량 배치 SQL이냐에 따라 튜닝방법이 달라집니다. 하지만 대용량 배치는 프로그램 수가 많지 않은 편입니다. 온라인 SQL 튜닝에서도 관점에 따라 튜닝방법이 다르게 됩니다. 예를..
- Table of Contents:
오라클 쿼리 튜닝 가이드 – 기본
- Article author: hyunipad.tistory.com
- Reviews from users: 4412 Ratings
- Top rated: 3.3
- Lowest rated: 1
- Summary of article content: Articles about 오라클 쿼리 튜닝 가이드 – 기본 오라클 쿼리 튜닝 가이드 – 기본 … SQL 튜닝 전문가가 있어도 모든 쿼리를 튜닝해줄 수 없기 때문에 개발자가 기본적으로 좋은 쿼리를 짜는 방법을 … …
- Most searched keywords: Whether you are looking for 오라클 쿼리 튜닝 가이드 – 기본 오라클 쿼리 튜닝 가이드 – 기본 … SQL 튜닝 전문가가 있어도 모든 쿼리를 튜닝해줄 수 없기 때문에 개발자가 기본적으로 좋은 쿼리를 짜는 방법을 … 대용량 데이터 베이스를 다루다 보면 쿼리의 미세한 차이로 성능이 달라지는 경우가 더러 있습니다. SQL 튜닝 전문가가 있어도 모든 쿼리를 튜닝해줄 수 없기 때문에 개발자가 기본적으로 좋은 쿼리를 짜는 방법을..
- Table of Contents:
태그
관련글
댓글0
공지사항
최근글
인기글
최근댓글
전체 방문자
티스토리툴바
오라클 실전 간단한 튜닝 기법 5가지 : 네이버 블로그
- Article author: m.blog.naver.com
- Reviews from users: 11888 Ratings
- Top rated: 3.8
- Lowest rated: 1
- Summary of article content: Articles about 오라클 실전 간단한 튜닝 기법 5가지 : 네이버 블로그 개발자를 위한 오라클 SQL 튜닝 책을 읽고.. 쿼리를 짜다보니 점점 쿼리가 복잡해지고, 접근하는 데이터도 많아지면서. …
- Most searched keywords: Whether you are looking for 오라클 실전 간단한 튜닝 기법 5가지 : 네이버 블로그 개발자를 위한 오라클 SQL 튜닝 책을 읽고.. 쿼리를 짜다보니 점점 쿼리가 복잡해지고, 접근하는 데이터도 많아지면서.
- Table of Contents:
카테고리 이동
하늘바람별
이 블로그
Oracle
카테고리 글
카테고리
이 블로그
Oracle
카테고리 글
DB 튜닝 입문 (1) 오라클의 구조 (진짜 처음에는 튜닝하기 전에 구조를 알아야 한다!)
- Article author: jeong-pro.tistory.com
- Reviews from users: 11536 Ratings
- Top rated: 5.0
- Lowest rated: 1
- Summary of article content: Articles about DB 튜닝 입문 (1) 오라클의 구조 (진짜 처음에는 튜닝하기 전에 구조를 알아야 한다!) * DB 튜닝 입문 포스트는 “그림으로 공부하는 오라클 구조” 라는 책을 읽고 정리한 내용이다. * MySQL, Oracle, PostgreSQL, MSSQL등 관계형 데이터베이스 … …
- Most searched keywords: Whether you are looking for DB 튜닝 입문 (1) 오라클의 구조 (진짜 처음에는 튜닝하기 전에 구조를 알아야 한다!) * DB 튜닝 입문 포스트는 “그림으로 공부하는 오라클 구조” 라는 책을 읽고 정리한 내용이다. * MySQL, Oracle, PostgreSQL, MSSQL등 관계형 데이터베이스 … 그림으로 공부하는 오라클 구조 * DB 튜닝 입문 포스트는 “그림으로 공부하는 오라클 구조” 라는 책을 읽고 정리한 내용이다. * MySQL, Oracle, PostgreSQL, MSSQL등 관계형 데이터베이스 중 아무거나 하나를 사용..
- Table of Contents:
‘DBDB 기본’ Related Articles
태그
티스토리툴바
오라클 퍼포먼스 튜닝 – DB CAFE
- Article author: dbcafe.co.kr
- Reviews from users: 9779 Ratings
- Top rated: 4.5
- Lowest rated: 1
- Summary of article content: Articles about 오라클 퍼포먼스 튜닝 – DB CAFE 1 오라클 퍼포먼스 튜닝. 1.1 개요. 1.1.1 퍼포먼스 튜닝의 순서; 1.1.2 퍼포먼스 튜닝 실행시의 주의점. 1.2 조인. 1.2.1 Nested Loop 조인. …
- Most searched keywords: Whether you are looking for 오라클 퍼포먼스 튜닝 – DB CAFE 1 오라클 퍼포먼스 튜닝. 1.1 개요. 1.1.1 퍼포먼스 튜닝의 순서; 1.1.2 퍼포먼스 튜닝 실행시의 주의점. 1.2 조인. 1.2.1 Nested Loop 조인.
- Table of Contents:
목차
11 개요
12 조인
13 튜닝 대상 검색
21 뷰 머징(View Merging)
22 분석함수의 튜닝 고려사항
23 병렬 쿼리 튜닝
24 쿼리 변환 종류
25 쿼리 변환 두 가지 방식
26 DB LINK를 사용한 분산 쿼리의 튜닝
31 힌트의 종류 별 분류
32 힌트의 설명 및 사용법
33 참조
[SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리
- Article author: devuna.tistory.com
- Reviews from users: 40242 Ratings
- Top rated: 3.6
- Lowest rated: 1
- Summary of article content: Articles about [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리 힌트(Oracle Hint)란 무엇일까? 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. 즉, 오라클 옵티마이저(Optimizer) … …
- Most searched keywords: Whether you are looking for [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법/자주쓰이는힌트 정리 힌트(Oracle Hint)란 무엇일까? 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. 즉, 오라클 옵티마이저(Optimizer) … [SQL 튜닝] 오라클 힌트(hint)의 개념/ 사용법 정리 💡 힌트(Oracle Hint)란 무엇일까? 힌트란 SQL 튜닝의 핵심 부분으로 일종의 지시 구문이다. 즉, 오라클 옵티마이저(Optimizer)에게 SQL문 실행을 위한..
- Table of Contents:
태그
관련글
댓글0
최근글
인기글
최근댓글
전체 방문자
티스토리툴바
Oracle SQL 튜닝 예제 #1 – 집합적 사고 접근법 :: 꿈을 향하여 질주하기
- Article author: sparkdia.tistory.com
- Reviews from users: 35948 Ratings
- Top rated: 4.4
- Lowest rated: 1
- Summary of article content: Articles about Oracle SQL 튜닝 예제 #1 – 집합적 사고 접근법 :: 꿈을 향하여 질주하기 Oracle SQL 튜닝 예제 #1 – 집합적 사고 접근법. Da-ol 2020. 4. 11. 20:32. * 성능 개선율 : (튜닝 전 – 튜닝 후) / 튜닝 후 … …
- Most searched keywords: Whether you are looking for Oracle SQL 튜닝 예제 #1 – 집합적 사고 접근법 :: 꿈을 향하여 질주하기 Oracle SQL 튜닝 예제 #1 – 집합적 사고 접근법. Da-ol 2020. 4. 11. 20:32. * 성능 개선율 : (튜닝 전 – 튜닝 후) / 튜닝 후 … [ 튜닝 전 ] 아래 쿼리를 살펴보도록 하겠습니다. SELECT CNT1, CNT2, CNT3, CNT4, CNT5, CNT6, CNT7, CNT8 FROM ( SELECT (SELECT COUNT(*) FROM CHG_LOGS WHERE REG_DT=:B1 AND ST_CD=’0′ AND LOG_LVL=’1′) CNT..현업에서 Data architect로 일하는 대한민국인입니다. 수많은 프로젝트를 수행하면서 경험했던 팁들을 공유하고자 포스팅을 시작합니다. 작은 팁이라도 많은 분들께 소중한 도움이 되길 바랍니다.
- Table of Contents:
Oracle SQL 튜닝 예제 #1 – 집합적 사고 접근법
티스토리툴바
오라클 쿼리튜닝 방법 ( 인덱스를 타지 않을때, 가장 기초 )
- Article author: youngram2.tistory.com
- Reviews from users: 7178 Ratings
- Top rated: 3.4
- Lowest rated: 1
- Summary of article content: Articles about 오라클 쿼리튜닝 방법 ( 인덱스를 타지 않을때, 가장 기초 ) 인덱스 컬럼을 가공하면 정상적인 Index Range Scan이 불가능하다. 가장 흔한 가공 사례와 튜닝 방법. (1) 인덱스 사용이 불가능하거나 범위 스캔이 … …
- Most searched keywords: Whether you are looking for 오라클 쿼리튜닝 방법 ( 인덱스를 타지 않을때, 가장 기초 ) 인덱스 컬럼을 가공하면 정상적인 Index Range Scan이 불가능하다. 가장 흔한 가공 사례와 튜닝 방법. (1) 인덱스 사용이 불가능하거나 범위 스캔이 … B*Tree 인덱스를 정상적으로 사용하려면 범위 스캔 시작지점을 찾기 위해 루트 블록부터 리프블록까지의 수직적 탐색 과정을 거쳐야 한다. 인덱스 컬럼을 가공하면 정상적인 Index Range Scan이 불가능하다. 가장..
- Table of Contents:
태그
관련글
댓글0
공지사항
최근댓글
태그
See more articles in the same category here: toplist.maxfit.vn/blog.
[Oracle] Select 쿼리 튜닝 순서
쿼리 튜닝은 온라인 SQL이냐 대용량 배치 SQL이냐에 따라 튜닝방법이 달라집니다. 하지만 대용량 배치는 프로그램 수가 많지 않은 편입니다. 온라인 SQL 튜닝에서도 관점에 따라 튜닝방법이 다르게 됩니다. 예를 들어 Peak Time에 Insert 문이나 Update 문, Select 문이 집중적으로 몰릴 때의 튜닝 방법이 있고, 단순히 SQL 하나에 집중해서 응답시간을 최소화하는 튜닝방법이 있습니다. 본 포스팅은 일반적으로 가장 많은 튜닝 사례에 해당하는 Select문 튜닝방법론을 기술한 포스팅입니다. 학습 용도로 작성한 포스팅으로 본 포스팅의 원본 출처는 Science of Database 블로그 SQL 튜닝방법론 입니다.
온라인 Select문 튜닝 방법론
온라인 SQL의 튜닝방법은 여러 가지가 있을 수 있습니다. 하지만 그 중에서 가장 기초적이고, 기본적인 방법입니다. 아래의 7가지 항목을 점검하고 약한 곳을 보강하면 됩니다. 이글은 SQL 튜닝책을 두 권정도 본 사람들을 위한 것입니다. 튜닝에 자신있는 사람들은 볼 필요가 없습니다.
1. 적절한 인덱스를 사용하여 Block I/O를 최소화 하라
조인이 없는 경우는 적절한 인덱스를 사용하는 것만으로도 상당한 효과를 볼 수 있습니다. 조인이 있는 경우는 특히 Driving(선행) 집합에 신경을 써야합니다. 왜냐하면 Nested Loop 조인을 사용했고, 선행집합의 건수가 많다면, 후행집합의 조인의 시도횟수가 증가하므로 성능이 느려지게 됩니다. 따라서 적절한 인덱스를 이용하여 선행집합의 건수를 줄인다면, 혹은 가장 적은 집합을 선행으로 놓는다면, 후행집합으로의 조인건수는 줄어들게 됩니다. 물론 이때에도 후행집합의 적절한 인덱스는 필수 조건입니다. Driving 집합의 Block I/O를 줄이기 위하여 최적화된 인덱스가 없다면 생성하고, 있다면 그것을 사용하십시오. 다시 말해 최적의 Access Path를 만드는 것이 좋습니다.
운영중인 시스템이라면 최적의 Access Path를 위해 인덱스를 변경하거나 생성할 때는 주의해야 합니다. 현재 튜닝하고 있는 SQL에 최적화된 인덱스를 생성하더라도 다른 SQL에 악영향을 줄 수 있기 때문입니다. 인덱스를 생성하거나 변경할 때는 그 테이블을 사용하는 다른 SQL의 실행계획이 변경되지 않는지 각별히 신경써야 합니다. 이런 이유 때문에 개발과정에서 효율적인 인덱스 설계가 중요시 됩니다.
2. 조인방법과 조인순서를 최적화 하라.
온라인에서 사용하는 Select문은 좁은 범위를 검색하는 경우가 많습니다. 이럴때는 대부분 Nested Loop Join이 유리합니다. 그러므로 조인건수가 소량인 SQL에 Hash Join이나 Sort Merge Join이 발견되면 Nested Loop Join으로 변경하는 것이 더 유리한지 검토해야 합니다. 물론 여기서도 Nested Loop 조인에 관해서만 다룹니다.
Nested Loop 조인에서 가장 중요한 것은 조인 순서입니다. From절에 테이블(집합)이 두 개라면 후행집합의 관점에서는 적절한 인덱스만 존재한다면 그것으로 족합니다. 만약 From절에 테이블(집합)이 세 개 이상이라면 조인순서를 변경할 수 있는지에 대한 두 가지 원리를 사용하면 좋습니다. 두 가지 원리는 아래의 단락에서 소개됩니다. 아무리 조인할 집합이 많다고 하더라도 이 두 가지의 원리는 동일하게 적용될 수 있습니다. 두 가지 원리를 이용할 때 필요하다면 Leading 힌트를 사용해야 합니다.
첫번째, 후행집합에 적절한 인덱스가 없는 경우에 조인순서를 바꾸면, 최적의 인덱스를 사용할 수 있는 경우가 많습니다. 예컨대, 튜닝전의 조인순서가 A → B → C라고 하면, 중간 집합인 B에 적절한 인덱스가 없고 오히려 C에 적절한 인덱스가 존재하는 경우가 있습니다. 이럴 때는 B에 인덱스를 무작정 생성하지 말고, 조인순서를 A → C → B로 바꿀 수 있는지, 바꾸는 것이 더 효율적인지 검증하면 좋습니다. 조인 순서만 바꿔주어도 일량이 획기적으로 줄어드는 경우가 많습니다. 만약 조인순서를 바꿀 수 없거나, C를 중간집합으로 하는 것이 비효율적이라면, B를 중간집합으로 유지하고 적절한 인덱스를 사용해야 합니다.
두번째, 조인되는 집합 중 특정 인덱스에서 Block I/O가 증가하는 경우에 조인순서의 변경을 검토하면 됩니다. 이때 10046 Trace나 DBMS_XPLAN.Display_Corsor를 이용하면 조인집합들의 Block I/O량을 관찰할 수 있습니다. 예를 들어, 튜닝전에 조인순서가 A → B → C라고 하고, 집합 B에서 Block I/O량이 증가하면 A → C → B로 바꾸면 일량이 줄어드는 경우가 많습니다. C를 먼저 조인(Filter)하여 선행집합(B의 입장에서는 C가 선행이다)의 건수를 줄이고 B에 조인하면 성능이 향상됩니다.
3. Table Access(Random Access)를 최소화하라.
Random Access란 rowid로 테이블을 액세스하는 것을 말합니다. 1번과 2번을 최적화했다면 Random Access도 자동으로 많이 줄어들었을 것입니다. 하지만 그것이 끝은 아닙니다. 여전히 성능이 만족스럽지 못한다면 Random Access 횟수를 줄이는 것을 간과해서는 안됩니다.
인덱스를 사용하면 rowid가 자동으로 획득됩니다. 만약 인덱스에 없는 칼럼을 Select 해야 한다면 rowid로 테이블을 액세스 해야합니다. 이때 테이블로액세스해야 할 건수가 많고, 인덱스 컬럼순으로 테이블이 sort되어 있지 않다면 성능이 매우 저하됩니다. 왜냐하면 테이블이 인덱스 기준으로 sort되어 있지 않기 때문에 테이블을 방문할 때마다 서로 다른 블럭을 읽어야 하기 때문입니다.
비유적으로 설명해보겠습니다. 우리가 심부름을 할 때 세 군대의 상점(A, B, C)을 들러야 한다고 치겠습니다. 그 상점들이 모두 한 건물 내부에 존재한다면 얼마나 좋겠습니까? 그 심부름은 매우 빠른 시간에 끝날 것입니다. 하지만 반대로 상점 A는 부산에 있고 상점 B는 대구에 있고, 상점 C는 서울에 있다면? 만약 당신의 성격이 매우 좋아서 그 심부름을 한다고 해도 시간이 많이 걸릴 것입니다. Random Access도 마찬가지 입니다. 인덱스의 rowid로 테이블을 방문할 때 테이블이 인덱스기준으로 sort되어 상점처럼 다닥다닥 붙어있다면 성능은 매우 빠르고, 흩어져 있을수록 성능은 느려집니다. (오라클에서는 테이블이 인덱스 기준으로 sort되어 있는 정도를 Clustering Factor라고 합니다) 바로 이런 이유 때문에 index scan 보다는 Table Scan이 느린 것입니다. 따라서 우리는 Random Access의 부하를 최소화해야 합니다.
Random Access의 부하를 줄이는 방법은 네가지 입니다. 첫번째, 테이블의 종류를 변경하는 방법입니다. IOT나 클러스터를 이용하면 Clustering Factor가 극단적으로 좋아집니다. 또한 파티션을 이용하면 같은 범위의 데이터를 밀집시킬 수 있습니다. 두 번째, 효율적인 인덱스를 사용하거나 조인방법과 순서를 조정하여 Table Access를 최소화하는 방법입니다. 이 방법은 1번과 2번에서 이미 설명되었습니다. 세번째, 인덱스에 칼럼을 추가하여 Table Access를 방지하는 방법입니다. 예를 들어 Select절의 특정 칼럼 때문에 테이블이 액세스 된다면, 인덱스의 마지막에 그 컬럼을 추가하면 됩니다. 네 번째, 인덱스만 액세스하고 테이블로의 액세스는 모든 조인을 끝내고 마지막에 시도하여 Random Access의 횟수를 줄이는 방법입니다.
4. Sort나 Hash 작업을 최소화하라.
1,2,3번을 통하여 최적의 Access Path와 Join을 사용했다면, Block I/O의 관점에서는 튜닝이 끝난 것입니다. 하지만 1,2,3번이 모두 해결되었다 해도 Order by나 Group By 때문에 성능이 저하될 수 있습니다. 특히 결과가 많은 경우, sort는 치명적입니다.
인덱스가 sort 되어 있다는 특성을 이용하면 order by 작업을 대신할 수 있습니다. Group By도 sort가 발생하는데 group by 단위와 인덱스의 컬럼이 동일하다면 sort는 발생하지 않습니다. 최적의 인덱스를 사용하면 Access Path를 개선하는 효과뿐만 아니라 Sort의 부하도 없어집니다.
Union All을 제외한 집합연산(Union, Minus, Intersect)를 사용하면 Sort Unique 혹은 Hash Unique가 발생하게 됩니다. Union은 Union All로 바꿀수 없는지 검토해야 하고, Minus는 Not Exists 서브 쿼리를 이용하여 Anti Join으로 바꿀 수 없는지 고려해야 합니다. Intersect는 교집합이므로 조인으로 바꿀 수 있는지 검토해야 합니다. 아주 가끔 Distinct를 사용한 SQL이 눈에 띄는데 이 또한 Sort unique 혹은 Hash Unique를 발생시킵니다. 모델러나 설계자의 문의하여 Distinct를 제거할 방법이 없는지 문의해야 합니다.
Oracle 10g 부터는 Hash Group By가 발생할 수 있는데, 이미 적절한 인덱스를 사용하는 경우라면 Hash Group By를 사용할 필요는 없습니다. 이런 경우 NO_USE_HASH_AGGREGATION 힌트를 사용하면 Sort Group By 로 바꿀수 있습니다. 이렇게 해주면 실행계획에 “SORT GROUP BY NOSORT” Operation이 발생하며, Sort나 Hashing 작업이 전혀 발생하지 않습니다. Group By의 부하를 해결하는 또 하나의 방법은 스칼라 서브쿼리를 사용하는 것입니다. 조인을 사용하면 Sum 값을 구하기 위해 Group By가 필수적입니다. 하지만 스칼라 서브쿼리를 사용하면 Group By를 사용하지 않고도 sum이나 Min/Max 값을 구할 수 있습니다. 또한 분석함수의 Ranking Family(rank, dens_rank, row_number)를 최적화된 인덱스와 같이 사용하면 Group By나 Sort를 하지 않고도 Min/Max 값을 구할수 있습니다. 이때는 실행계획에 “WINDOW NOSORT” Operation이 발생합니다.
5. 한 블록은 한번만 Scan하고 끝내라.
같은 데이터를 반복적으로 Scan하는 SQL이 의외로 많습니다. 대표적인 경우가 Union All로 분리되었지만 실제로는 그럴 필요가 없는 경우입니다. 예를 들어 Where 절에 구분코드가 1일 때, 2일 때, 3일 때 별로 SQL이 나누어져 있는 경우 입니다. Where 절을 구분코드 in (1, 2, 3)으로 처리하고, Select절에서 Decode나 Case 문을 사용하여 구분코드별로 처리해 준다면 Union All은 필요 없습니다. Unon All을 사용하는 또 한가지의 경우는 Sub Total(소계)와 Grand Total(총계)를 구해야 하는 경우입니다. 이 경우도 Rollup/Cube나 Grouping Sets를 Group By절에 사용한다면 소계나 총계를 위한 별도의 Select문을 실행시킬 필요는 없습니다. 1~4번의 과정은 SQL문의 변경이 없거나 최소화됩니다. 하지만 5번의 경우는 SQL을 통합시켜야 하기 때문에 시간이 많이 소모되며, 많은 사고가 요구되는 창조적인 과정입니다. 여기까지 했다면 진행되었다면 원본 SQL 자체의 튜닝은 완료된 셈입니다.
6. 온라인의 조회화면이라면 페이징 처리는 필수다.
부분범위 처리를 해야합니다. 물론 전체 건을 처리해야 하는 경우는 있을 것입니다. 하지만 조회화면이라면 몇 십만건 혹은 몇 만건이나 되는 결과를 모두 볼 수 없습니다. 따라서 볼 수 있는 단우로 끊어서 출력해야 합니다. 예를 들어 결과 건수가 10만건이라고 해도 최초의 50건을 화면에 먼저 뿌린다면 1,2,3,4 번에서 설명했던 모든 부하(Block I/O의 부하, 조인의 부하, Random Access의 부하, Sort의 부하)를 한꺼번에 감소시킬 수 있습니다. 따라서 가능하면 개발자를 설득하거나 책임자를 설득하여 페이징처리를 하는 것이 바랍직합니다.
페이징 처리를 해도 효과를 볼 수 없는 몇가지 예외가 있습니다. 분석함수를 사용하건, Connect By + Start With를 사용한다면 페이징 처리의 효과는 없습니다. 분석함수의 경우 인라인뷰의 외부로 뺄 수 있다면 부분범위 처리가 가능합니다. Connect By + Start With를 사용한 경우는 부분범위처리가 불가능합니다. 인덱스의 구성을 적절히 하여 Sort를 대신해야 합니다.
7. 답이 틀리면 안된다. SQL을 검증하라
7번은 SQL 자체를 튜닝하는 것은 아닙니다. 하지만 7번을 튜닝 방법에 추가한 이유는 있습니다. 튜닝을 하였음에도 답이 틀린다면, 튜닝을 하지 않은 것보다 못합니다. 그러므로 튜닝 후에 답이 옳은지 항상 검증해야 합니다. 1번~7번 중에 가장 중요한 것이 7번입니다.
방법론 정리
1. 적절한 인덱스를 사용하여 Block I/O를 최소화하라.
2. 조인방법과 조인순서를 최적화 하라.
3. Table Access(Random Access)를 최소화하라.
4. Sort나 Gash 작업은 최소화하라.
5. 한 블록은 한번만 Scan하고 끝내라.
6. 온라인의 조회화면이라면 페이징처리는 필수이다.
7. 답이 틀리면 안된다. SQL을 검증하라.
만약 1~7번을 모두 적용할 수 있는 경우임에도 불구하고 하나라도 빠진다면 그것은 최적화된 SQL이 아닙니다. 물론 튜닝을 할때 위의 1~6번을 항상 적용할 수 있는 것은 아닙니다. 경우에 따라서는 하나만 적용될 수도 있고, 두 개만 적용할 수 있는 SQL도 있습니다. 하지만 1~6을 모두 적용할 수 있는지 꼼꼼히 살펴야 합니다.
위 항목들은 튜닝의 기본 중에 기본입니다. 이것들만 알아도 온라인 조회화면에 사용하는 SQL을 튜닝하는데 어려움이 없을 것입니다. 다시 말해 90%는 해결할 수 있습니다. 그렇다면 나머지 10%는 상황별로 다르게 처리돕니다. 또한 그것들은 책이나 매뉴얼에 나와있지 않기 때문에 경험치이거나 실험과 연구의 결과로 알아내는 것들입니다.
오라클 쿼리 튜닝 가이드 – 기본
반응형
대용량 데이터 베이스를 다루다 보면 쿼리의 미세한 차이로 성능이 달라지는 경우가 더러 있습니다.
SQL 튜닝 전문가가 있어도 모든 쿼리를 튜닝해줄 수 없기 때문에 개발자가 기본적으로 좋은 쿼리를 짜는 방법을 알고 있는 것이 좋습니다. 쿼리를 튜닝하기 전에 좋은 쿼리를 짜기 위한 몇 가지 팁들을 소개합니다.
1. WHERE절 내의 JOIN 조건절 위치
SQL Parser에 의해 쿼리가 해석될 때 WHERE내의 조건은 밑에서 부터 위로 해석됩니다.
따라서 JOIN 조건절이 제일 위에 작성되었을 때 아래에서 처리건수를 줄여주기 때문에 효율적이게 됩니다.
처리건수나 통계정보에 따라 옵티마이저가 실행 경로를 다르게 실행할 수 있기 때문에 실행계획을 보는 것이 좋습니다.
1) 비효율적인 경우
SELECT … FROM EMP E, DEP D WHERE E.JOB = ‘manager’ AND E.DEP_NM = D.DEP_NM
2) 효율적인 경우
SELECT … FROM EMP E, DEP D WHERE E.DEP_NM = D.DEP_NM AND E.JOB = ‘manager’
2. EXISTS(서브쿼리) 대신 JOIN 사용
1) EXISTS의 사용
SELECT … FROM EMP E WHERE EXISTS (SELECT … FROM DEPT D WHERE D.DEPT_NO = E.DEPT_NO AND D.DEPT_CAT = ‘A’);
2) JOIN의 사용
SELECT ENAME FROM DEPT D, EMP E WHERE E.DEPT_NO = D.DEPT_NO AND D.DEPT_CAT = ‘A’;
3. EQUAL 비교와 범위 비교
한 테이블에 대해 두개의 인덱스를 가지고 있을 때 EQUAL 비교와 범위 비교를 동시에 할 경우 ORACEL은 인덱스 들에 대해 merge를 하지 않습니다. 저도 계속 인덱스를 안타는 경우가 있었는데 이 사실 때문이었습니다.
1) EMP 테이블에 DEPT_NO 컬럼과 EMP_CAT 컬럼에 인덱스가 있는 경우(merge를 하지 않음)
SELECT NAME FROM EMP WHERE DEPT_NO > 20 AND EMP_CAT = ‘A’;
WHERE내의 조건절은 아래에서부터 읽어 들이기 때문에 EMP_CAT에 대한 인덱스만을 사용합니다. 이럴 경우에는 다른 인덱스를 사용하는 것을 검토해야 합니다.
4. 비교문의 사용
1) Case 1
SELECT * FROM EMP WHERE DEPT_NO > 3;
2) Case 2
SELECT * FROM EMP WHERE DEPT_NO >= 4
Case 1에서는 조건절이 DEPT_NO > 3이기 때문에 3인 row부터 스캔을 시작하고 Case 2에서는 4부터 스캔을 시작합니다. 따라서 Case 1은 3인 row가 추가로 I/O가 발생하므로 시간이 더 오래 걸립니다.
5. IN 대신 EXISTS의 사용
둘 다 컬럼 값의 존재 여부를 판단하지만, IN은 조건에 해당하는 ROW의 컬럼 값을 비교하지만, EXISTS는 조건에 해당하는 ROW의 존재 여부만 체크하기 때문에 성능이 더 좋습니다.
6. Table Alias의 사용
여러 개의 테이블 조인 시 항상 테이블에 대한 alias를 사용하고 각각의 컬럼에 대해 alias를 붙여 사용하는 것이 좋습니다.
테이블 조인 시에 같은 이름의 컬럼이 존재할 때, alias를 붙이지 않으면 아래의 에러가 발생할 수 있습니다.
ORA-00918 : column ambiguously defined
alias를 붙여 에러를 미연에 방지할 수 있습니다. 또한 오라클이 딕셔너리에서 해당 컬럼이 어느 테이블에 있는지를 찾지 않아도 되므로 파싱의 시간을 줄일 수 있습니다.
7. HAVING 대신 WHERE의 사용
HAVING은 row들에 대해서 필터 역할을 하는데, 이 작업에는 sort나 sum의 작업이 포함됩니다. 따라서 특수한 경우가 아니라면 WHERE을 사용하여 오버헤드를 줄여주는 것이 좋습니다.
8. UNION 대신 UNION-ALL의 사용
두 개의 쿼리에 대해서 UNION을 사용할 때, 각각 쿼리에 대해 UNION-ALL에 의해 합쳐지고 SORT 작업 후 사용자에게 결괏값을 리턴해줍니다. 따라서 UNION 대신 UNION-ALL을 사용하게 되면 SORT 작업이 없어지므로 시간을 줄일 수 있습니다. 하지만 SORT 작업이 필요하지 않을 때만 사용해야 합니다.
9. 인덱스 컬럼의 가공과 부정형 비교
인덱스를 사용하여 컬럼을 조회하려고 할때, 인덱스 컬럼을 가공하거나 부정형 비교를 할시에는 인덱스를 타지 않고 TABLE FULL SCAN을 합니다.
1) 부정형 비교
SELECt * FROM EMP WHERE EMP_NM <> ‘manager’;
2) 인덱스 컬럼의 가공
SELECT * FROM EMP WHERE EMP_SAL * 12 = 360000000;
SELECT * FROM EMP WHERE to_char(REG_DDTM, ‘YYYYMMDD’) = ‘20220123’;
위의 9가지 팁들은 성능 향상뿐만 아니라 가독성에도 영향을 주기 때문에 잘 준수하여 작성하는 것이 좋습니다.
인덱스, 조인, 힌트에 대한 부분들은 좀 더 자세한 쿼리 튜닝에 대해 포스팅을 할 때 소개하도록 하겠습니다.
반응형
오라클 실전 간단한 튜닝 기법 5가지
개발자를 위한 오라클 SQL 튜닝 책을 읽고..
쿼리를 짜다보니 점점 쿼리가 복잡해지고, 접근하는 데이터도 많아지면서
쿼리 실행속도가 현저히 느려지게 되었고, 오라클 튜닝 지식에 욕구가 생기게 되어서
책을 한권 보게되었습니다.
이 책은 다른책처럼 두껍지가 않았습니다.
포캣북처럼 아담한 사이즈라서 출장갈때도 부담없이 가져갈수 있을만한 사이즈입니다.
책은 얇고 작지만 그 안에 들은 여러가지 실전 오라클 튜닝 기법들은
평소 성능에 대해서 큰 고려없이 개발하던 저에게 충격적이었습니다.
왜냐하면 쿼리 사용법에 따라서 같은 결과를 도출하는데 10분 걸리던 쿼리가
10초면 해결되기도 하는 내용들을 보았기 때문입니다.
또한 이 때문에 최적화된 쿼리를 짜야겠다는 생각이 많이 들었습니다.
실무에서도 요즘 금융권의 SM업무를 하다보니
수천건의 데이터들에 대한 통계를 도출하는 쿼리를 짜야 하는 경우가 많습니다.
쿼리 호출 한번에 1분 이상 걸리는 화면도 가끔씩 있는데, 이 책은 최적화에 많은 도움이 될 것 입니다.
책에 나온 예제중에서 가장 튜닝했을때 성능이 좋아진 예시를 5개를 따로 돌려보았습니다.
1. 효율적인 중첩 루프 조인으로 결과 도출하기
약 50만건의 데이터가 있는 테이블인데 튜닝 전에 ORD_DT와 ORD_NM 이 인덱스에 걸려있을 때는 조회 쿼리 실행시 약 7초가 걸렸지만, 조인할 때 사용되는 CUST_ID, ORD_DT, CUST_NM 컬럼들을 인덱스에 적용시키고 나서는 조회 쿼리 실행시 약 0.05초가 걸리는 놀라운 성능향상이 일어났다.
2.SUM 함수를 이용하여 반복적인 테이블 스캔 제거하기
SUM 분석함수를 사용하지 않았다면, 월별 누적 SALE_ANT 를 구하기 위하여 TB_SALE_MONTH 테이블을 두 번 풀 스캔을 하게 되지만, SUM 분석함수를 이용하면 테이블을 한번만 스캔하게되므로 실행시간이 혁신적으로 짧아집니다. 또한 쿼리도 짧아져서 가독성도 좋아집니다.
3.재귀 호출 부하 최소화하기
TB_EMP 테이블에 10만건의 데이터를 넣고 테스트 했는데, 왼쪽 쿼리에서는 FN_GET_EMP_CNT 함수가 총 10만번 호출이 되는 구조이다. 오른쪽 쿼리는 함수를 스칼라서브쿼리안에서 다시 호출하는 구조로 바꿔놨는데, 이 경우 DEPT_NO의 유일값은 49개라서 49번만 호출되어 속도가 획기적으로 향상될 수 있었습니다.
4.아우터 조인을 스칼라 서브쿼리 방식으로 변환하여 성능 극대화하기
TB_TRD_DAY 테이블에 100만건의 데이터를 넣고 테스트했을때, LEFT OUTER JOIN으로 쿼리를 구성하면 TB_EXPORTER 테이블의 EXPORTER_NM 컬럼만 SELECT 하므로 궂이 OUTER JOIN 할 필요없이 스칼라 서브쿼리로 구성하여 캐싱효과를 이용해 속도를 더욱 향상 시킬수 있습니다.
5.인라인 뷰를 이용한 해시 조인으로 성능 극대화하기
So you have finished reading the 오라클 튜닝 topic article, if you find this article useful, please share it. Thank you very much. See more: 오라클 튜닝 공부, 오라클 튜닝 가이드, 오라클 튜닝 책, 오라클 튜닝 힌트, 오라클 튜닝이란, 오라클 튜닝 예제, 오라클 튜닝 PDF, 오라클 메모리 튜닝