- 전체
- Sample DB
- database modeling
- [표준 SQL] Standard SQL
- G-SQL
- 10-Min
- ORACLE
- MS SQLserver
- MySQL
- SQLite
- postgreSQL
- 데이터아키텍처전문가 - 국가공인자격
- 데이터 분석 전문가 [ADP]
- [국가공인] SQL 개발자/전문가
- NoSQL
- hadoop
- hadoop eco system
- big data (빅데이터)
- stat(통계) R 언어
- XML DB & XQuery
- spark
- DataBase Tool
- 데이터분석 & 데이터사이언스
- Engineer Quality Management
- [기계학습] machine learning
- 데이터 수집 및 전처리
- 국가기술자격 빅데이터분석기사
- 암호화폐 (비트코인, cryptocurrency, bitcoin)
ORACLE SQL HINT 를 이용하여 SQL Tunning 을 하는 방법
2017.03.15 17:43
SQL HINT 를 이용하여 SQL Tunning 을 하는 방법
|
SQL 힌트의 사용 방법 |
|
● DBA는 특정 데이터에 대하여 optimizer가 알 수 없는 정보를 가질 수 있음.
|
|
∮ 힌트의 사용 |
|
● 힌트의 사용범위 |
|
|
|
·DELETE, SELECT, UPDATE : SQL문 block을 시작하는 DELETE, SELECT, UPDATE 키워드입니다. 힌트를 포함하는 comments는 이 키워드들이 나타난 후에 써야합니다. |
|
|
|
옵티마이저를 위한 힌트와 사용 목표 |
|
― 힌트는 cost-based approach와 rule-based optimization approach 중에 하나를 선택 OPTIMIZER_GOAL와 OPIMIZER_MODE 초기 파라메타의 값과는 상관없이 기술된 approach를 사용. |
|
∮ ALL_ROWS |
|
― ALL_ROWS 힌트는 best throughput(minimum total resource consumption)을 목적으로 SQL문 block을 최적화하기 위해 cost-based approach를 선택
|
|
∮ FIRST_ROWS |
|
― FIRST_ROWS 힌트는 best response time을 목적으로 SQL문 block을 최적화하기 위해 cost-based approach를 선택.(minimum resource usage to return first row)
|
|
∮ CHOOSE |
|
― CHOOSE 힌트는 statistics가 존재하고, SQL문에 의해 접근된 table에 대해 rule-based approach나 cost-based approach중 어떤 것을 쓸 것인지 optimizer가 선택.
|
|
∮ RULE |
|
― RULE 힌트는 한 SQL문 block에 대해 rule-based optimization을 선택.
|
|
실행 순서 방법을 위한 SQL 힌트 |
|
― 각 힌트들은 table에 대한 access method를 제안 |
|
∮ FULL |
|
― FULL 힌트는 table에 대해 full table scan을 선택
|
|
∮ ROWID |
|
― ROWID 힌트는 table에 대해 ROWID에 의한 table scan을 선택 |
|
∮ CLUSTER |
|
― CLUSTER 힌트는 table에 대해 cluster scan을 선택 |
|
∮ HASH |
|
― HASH 힌트는 table에 대해 HASH scan을 선택 |
|
∮ INDEX |
|
― INDEX 힌트는 table에 대해 index scan을 선택
|
|
∮ FULL 힌트와 INDEX 힌트의 비교 예제 |
|
― 1. EMPtable의 총건수는 10,000건, DEPTtable의 총건수는 2400건.
― 예제 1 analyze table emp estimate statistics; alter session set sql_trace = true; select empno, ename, sal select /*+ full(emp) */ empno, ename, sal select /*+ index(emp job_index) */ empno, ename, sal
· OPTIMIZER_GOAL 은 FIRST_ROWS로
― 예제 2 analyze table emp estimate statistics; alter session set sql_trace = true; select empno, ename, sal select /*+ full(emp) */ empno, ename, sal select /*+ index(emp job_index) */ empno, ename, sal |
|
∮ INDEX_ASC |
|
― INDEX_ASC 힌트는 table에 대한 index scan을 선택
|
|
∮ INDEX_DESC |
|
― INDEX_DESC 힌트는 table에 대해 index scan을 선택
FROM tank_readings
- step 4는 시간 T와 같거나 더 적은 모든 TIME 값들을 반환할 UN_TIME index의 range scan을 수행.
·step 2 와 1은 parent query를 실행. - step 2는 step 3에 의해 반환된 TIME 값에 맞는 UN_TIME index의 unique scan을 수행하고 관련된 ROWID를 반환.
· step 3은 T와 동일하거나 더 적은 TIME값을 찾기위해 UN_TIME index를 range scan하고 그와 관련된 ROWID를 반환.
최초의 시간을 scaning함으로서 시작하게 됨. step1은 최초의 시간에대한 온도를 반환하게 됩니다. |
|
∮ AND_EQUAL |
|
― AND_EQUAL 힌트는 몇몇의 single-column index에대한 scan을 merge하는 access path를 사용하는 execution plan을 선택
― 최소 2개 이상 최대 5개 이하의 index를 기술해야 합니다. |
|
∮ USE_CONCAT |
|
― USE_CONCAT 힌트는 OR 조건을 UNION ALL set operator를 사용하는 compound query로 변환 |
|
조인 순서를 위한 SQL 힌트 |
|
ORDERED 힌트는 join order를 제안 |
|
∮ ORDERED |
|
― ORDERED 힌트는 FROM절에 table이 나타나는 순서대로 table을 join시킨다. |
|
Table 조인 방법 SQL 힌트 |
|
● SQL문에서 나타나는 조인된 table을 정확하게 기술해야만 합니다. |
|
∮ USE_NL |
|
― USE_NL 힌트는 table을 적는 부분에 table 기술된 table은 inner table로서 사용하여 nested loops로서 다른 table의 row source와 기술된 table을 join하게 합니다.
― 예를 들어서, ACCOUNTS와 CUSTOMERS table을 조인하는 SQL문이 있다고 생각해보자. 이들 table들은 cluster에 함께 저장되지 않았다고 가정합니다.
|
|
∮ USE_MERGE |
|
― USE_MERGE 힌트는 오라클이 sort-merge join으로 각 table을 조인하게끔 하는 방법입니다.
|
|
병렬 쿼리 실행을 위한 SQL 힌트 |
|
∮ CACHE |
|
― CACHE 힌트는 full table scan이 수행됐을 때 힌트에 있는 table에 대해 retrieve된 블록들은 버퍼 캐시에 있는 LRU list의 가장최근(most recently)에 사용되어진 것의 끝에 위치
|
|
∮ NOCACHE |
|
― NOCACHE 힌트는 full table scan이 수행됐을 때 힌트에 있는 table에 대해 retrieve된 블록들은 버퍼 캐시에 있는 LRU list의 가장 오래전(least recently)에 사용되어진 것의 끝에 위치
|
|
구문 연계를 고려하는 SQL 힌트 |
|
● SQL이 융통성이 있는 언어이기 때문에 하나 이상의 SQL문이 Application을 필요로 할 것입니다. |
|
∮ 두 SQL문에 대한 execution plan 비교 |
|
● 첫 번째 SQL문과 그것에 대한 execution plan
― step3을 통해 오라클은 DEPTNO 칼럼에 index가 있음에도 불구하고 EMPtable을 full table scan함으로서 위 SQL문을 실행합니다는 것을 알수 있습니다.
― subquery의 WHERE절이 EMPtable의 DEPTNO칼럼을 사용하므로 DEPTNO_INDEX를 사용할 수 있습니다. |
|
기존 SQL문을 튜닝하는 방법 |
|
● 존재하는 application에서 SQL 문을 튜닝하는 것은 새로운 문장을 기록하는 것과는 다른 작업(task)입니다. |
|
∮ Know the Application |
|
― application과 SQL 문장과 data에 익숙해져야 합니다.
|
|
∮ Use the SQl Trace Facility |
|
― 오라클은 성능을 측정하기 위하여 진단에 도움이 되는 tool을 몇가지 제공합니다
|
|
∮ Tuning Individual SQL statements |
|
― 사용중인 사용자 응용을 수정하지 않고 SQL문의 변경된 문법을 탐색할 수 있음을 명심하라. |
[출처] http://otsteam.tistory.com/138
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 공지 | 오라클 기본 샘플 데이터베이스 | 졸리운_곰 | 2014.01.02 | 86337 |
| 공지 | [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE | 가을의 곰을... | 2013.02.10 | 78797 |
| 공지 | [G_SQL] Sample Database | 가을의 곰을... | 2012.05.20 | 95543 |
| 9 |
[Sample DB] DBeaver 데이터 dump(export)/restore(import) 방법
| 졸리운_곰 | 2024.07.08 | 2420 |
| 8 |
W3Schools sample Database sql dump
| 졸리운_곰 | 2020.05.16 | 1917 |
| 7 |
다운타임 없는 서비스 구현 패턴
| 졸리운_곰 | 2017.07.15 | 2033 |
| 6 |
[칼퇴족 김대리는 알고 나만 모르는 SQL 예제, mysql 변경 Sample DB SQL 책밥 출판
| 졸리운_곰 | 2017.04.04 | 2030 |
| 5 | [칼퇴족 김대리는 알고 나만 모르는 SQL 예제, Oracle Sample DB SQL 책밥 출판 | 졸리운_곰 | 2017.04.04 | 1841 |
| 4 | SQL Style Guide ; SQL 코딩 표준 | 졸리운_곰 | 2017.01.14 | 30790 |
| 3 |
SQL 기초 sample.pdf
| 졸리운_곰 | 2016.03.16 | 2060 |
| 2 | Select와 동시에 Delete 하기. | 졸리운_곰 | 2016.03.16 | 3108 |
| 1 |
SQL Explorer : Eclipse를 위한 RDMS 쿼리 도구
| 가을의 곰을... | 2013.11.27 | 2385 |












