2016년 12월 1일 목요일

[오라클교육,SQL교육,튜닝교육학원추천_탑크리에듀]Literal SQL & Bind Variable SQL 사용하기(SQL바인드변수,리터럴)

Literal SQL & Bind Variable SQL 사용하기(SQL바인드변수,리터럴)


 Literal SQL문을 많이 사용하면 Hard Parsing의 빈도를 높이게 되어 Library Cache내에서 Cache되는 SQL문들이 자주 age out 하게 되므로 주기를 빠르게 하고 Dictionary Cache의 사용율을 높이게 된다. 이러한 이유로 OLTP DB환경에서는 Shared SQL문 중에서 Literal SQL 문들을 찾아서 Bind Variable을 이용한 방법을 사용하도록 해야 한다. 

Hard Parse 

하드파싱이란 새 SQL 문장이 실행 되는 경우엔 Shared Pool에는 없으므로 완전히 전부 새로 파싱을 한다는 의미이다. 오라클은 Shared Pool에 새로운 SQL문장을 할당 하며 SQL 문장이 문법은 맞는지, 권한이 있는지 등을 검사 하게 됩니다. 이 경우 CPU 사용이 매우 많아 지게 되고 Latch의 사용도 증가 하게 됩니다.


Soft Parse 

소프트 파싱이란 스행하고자 하는 SQL 문장이 이미 Shared Pool에 있어 이미 존재하는 SQL에 관련된 정보를 그대로 이용하는 겁니다. 

결국 Soft Parse가 되기 위해서는 가능 하면 동일한 SQL 문장을 구사해야 한다.

우선 하드 파싱의 대상에는 어떤 것이 있는지 알아 보자.

- 우선 같은 테이블을 질의 하더라도 사용자 계정이 다른 경우 동일한 SQL 문장으로 간주 되지 않는다.

- SQL문장의 공백이 다른 경우
select * from emp
select     *     from     emp는 다르다.

또한 동일한 질의라도 SQL문장의 대소문자 역시 다르면 이것 역시 하드 파싱의 대상이므로 삼가 해야 한다. 

-  SQL문장의 라인이 달라도 다르게 인식한다.

아래는 V$SALAREA라는 동적뷰에서 실행된 SQL 조회

select substr(sql_text,1,40) "SQL", count(*),
       sum(executions) "총 실행 횟수"
from v$sqlarea
group by substr(sql_text,1,40)
having count(*) > 5
order by 2;


[실습]

SQL> conn / as sysdba
연결되었습니다.

공유 영역을 클리어 합니다.
SQL> alter system flush shared_pool;

시스템이 변경되었습니다.

SQL> conn scott/tiger
연결되었습니다.

SQL> select count(*) from emp;

  COUNT(*)
----------
        14

v$SQLAREA 뷰에서 확인

SQL> conn / as sysdba

SQL> select substr(sql_text,1,40) "SQL", count(*),
  2         sum(executions) "총 실행 횟수"
  3  from v$sqlarea
  4  where sql_text like '%emp%'
  5  group by substr(sql_text,1,40)
  6  having count(*) > 0
  7  order by 2;


 SQL                    COUNT(*)      총 실행 횟수
---------- ----------------------------------
select count(*) from emp         1            1
이하 생략

SQL> conn scott/tiger
연결되었습니다.

SQL> select count(*) from emp;

  COUNT(*)
----------
        14

SQL> select count(*) from emp;

  COUNT(*)
----------
        14

그런 다음 다시 v$SQLAREA에서 확인 하죠^^

SQL> select substr(sql_text,1,40) "SQL", count(*),
  2         sum(executions) "총 실행 횟수"
  3  from v$sqlarea
  4  where sql_text like '%emp%'
  5  group by substr(sql_text,1,40)
  6  having count(*) > 0
  7  order by 2;

SQL
---------------------------------------------------------------------

  SQL                    COUNT(*)   총 실행 횟수
---------- -----------------------------
select count(*) from emp        1            3

이번에는 동일한 SQL 문장인데 공백을 더 넣어서 Hard Parsing이 일어나게 해 보자.


SQL> conn scott/tiger
연결되었습니다.

SQL> select count(*) from EMP;;

  COUNT(*)
----------
        14

V$sqlarea를 조회해 보자

SQL> select substr(sql_text,1,40) "SQL", count(*),
  2         sum(executions) "총 실행 횟수"
  3  from v$sqlarea
  4  where sql_text like '%emp%'
  5  group by substr(sql_text,1,40)
  6  having count(*) > 0
  7  order by 2;

SQL                             COUNT(*)    총 실행 횟수
---------- ---------------------------------------
select count(*) from EMP             1            1
select count(*) from emp              1            3

[손자병법,저자직강강의,PPT강의,프레젠테이션강의추천]손자병법을 활용한 제안서 작성 비밀_탑크리에듀 ppt강좌, 프리젠테이션 강의

탑크리에듀의 본과정은 병법에 기초한 제안서 작성 기법을 단기간에 습득하여 제안작업이 가능하도록 이론과 실습을 통해서 학습하는 과정입니다. 기본과정과 고급과정으로 나뉘어져 있으며 제안 전체 과정의 주요 핵심 포인트 이해와 전문적인 제안 요령및방법을 실습과 병행하여 진행 합니다.

[닷넷학원,C#학원,멀티쓰레드학원추천](C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제

탑크리에듀(http://www.topcredu.co.kr),오라클자바커뮤니티(http://ojc.asia)에서 제공하는 초보자를 위한 닷넷, C# 기초강좌 입니다. 이번강좌에서는 쓰레드에 대해 간단히 살펴보고 C#에서 멀티 쓰레드로 프로그래밍 하는 방법을 실습하는 강좌입니다. 동영상으로 보시려면 페이스북(http://www.facebook.com/topcredu.co.kr) 또는 유튜브(https://www.youtube.com/playlist?list=PLy5poRzDk4ypnjylVgzAo8RVWgiBzvz73&disable_polymer=true)에서 확인 기능합니다.

[C#교육,닷넷교육,자마린교육,WPF교육추천](C#,닷넷구조체강좌)구조체 개요 및 간단한 예제

탑크리에듀(http://www.topcredu.co.kr),오라클자바커뮤니티(http://ojc.asia)에서 제공하는 초보자를 위한 닷넷, C# 기초강좌 입니다. 이번강좌에서는 C#의 구조체에 개한 개요 및 심플한 예제를 설명하였습니다. 간단히 이론을 익히신 후 실습을 통해 이해해 보는 강좌 입니다. 동영상으로 보시려면 페이스북(http://www.facebook.com/topcredu.co.kr) 또는 유튜브(https://youtu.be/BviUL_FJFOE)에서 확인 기능하십니다.