반응형

1. Function Scalar Subquery 변경

ㅇ 서브쿼리의 위치에 따른 명칭
    - SELECT문에 있는 서브쿼리 : 스칼라 서브쿼리
    - FROM절에 있는 서브쿼리 : 인라인 뷰
    - WHERE절에 있는 서브쿼리 : 서브쿼리
ㅇ 스칼라 서브쿼리(Scala Subquery)
    - SELECT문에서 사용하는 서브쿼리로 1행만 반환

-- 1. 수정 전
SELECT PRODUCT_CD,
PRODUCT_NAME,
SUM(GET_AVG_STOCK(PRODUCT_CD, :B1, :B2)) AVG_STOCK
FROM PRODUCT
WHERE CATEGORY_CD = ’20’
GROUP BY PRODUCT_CD,
PRODUCT_NAME


-- 2. 수정 후(스칼라 서브쿼리 적용)
SELECT PRODUCT_CD,
PRODUCT_NAME,
SUM((SELECT GET_AVG_STOCK(PRODUCT_CD, :B1, :B2)
FROM DUAL
)) AVG_STOCK
FROM PRODUCT
WHERE CATEGORY_CD = ’20’
GROUP BY PRODUCT_CD,
PRODUCT_NAME
;

 

2. Deterministic Function 사용

입력값이 동일하면 리턴값도 받드시 동일한 함수에서 사용할 수 있는데 이점을 이용해서
함수가 반복 호출될때 이전에 호출한 값이 호출되면 함수가 호출되지 않고
바로 값을 되돌려 줘서 함수호출 부하를 줄이는 것이다.

  • Deterministic 키워드는, 함수의 입력 값이 같다면 출력값도 항상 같음을 선언하려는 데 목적이 있다.
  • 이러한 본래 의미를 무시하고 캐싱 효과를 얻을 목적으로 함부로 Deterministic 함수로 선언하면 안된다.

Good Bad
CREATE OR REPLACE FUNCTION f1 (
  p1 NUMBER
) RETURN NUMBER DETERMINISTIC
IS
BEGIN
  RETURN p1 * 2;
END;
/
CREATE OR REPLACE FUNCTION lookup (
  l_input NUMBER
) RETURN VARCHAR2 DETERMINISTIC
IS 
BEGIN
  select value into l_output from LookupTable where key = l_input;
END;
/

  • Deterministic Function의 Cache 기능은 10g에서부터 지원된다.
  • 이전 버전에서 이 효과를 누리려면 (Scalar) Subquery를 사용한다.
  • Cache는 Query Level이 아닌 Fetch Level에서 이루어진다.
  • 따라서 Cache 효과를 누리려면 Fetch Array Size를 크게 지정해야 한다.

  •  

    반응형
    LIST
    반응형

    Temporary tablespaces are used to manage space for database sort operations and for storing global temporary tables. For example, if you join two large tables, and Oracle cannot do the sort in memory (see SORT_AREA_SIZE initialization parameter), space will be allocated in a temporary tablespace for doing the sort operation. Other SQL operations that might require disk sorting are: CREATE INDEX, ANALYZE, Select DISTINCT, ORDER BY, GROUP BY, UNION, INTERSECT, MINUS, Sort-Merge joins, etc.

    1.       Create another  Temporary Tablespace

    CREATE TEMPORARY TABLESPACE TEMP2TEMPFILE  ‘/xxx/xxx/temp02′ SIZE 500m;

    2.       Change default Database temporary tablespace

    ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP2;          

    3.       Make sure No sessions are using your Old Temp tablespace

    SELECT USERNAME, SESSION_NUM, SESSION_ADDR FROM V$SORT_USAGE;
    If you find some sort of operation in progress, wait until the terms or manually end the process

    USERNAME                       SESSION_NUM        SESSION_ADDR

    ——————————   ———————      —————————

    SYS                                      65                              000007FF646EDE68

     

    4.       Drop old tablespace temp

    DROP TABLESPACE TEMP1 INCLUDING CONTENTS AND DATAFILES;

    5.       Recreate tablespace temp1

    CREATE TEMPORARY TABLESPACE TEMP1 TEMPFILE /xxx/xxx/temp01′ SIZE 500M;

    6.       Move Tablespace Temp, back to new temp tablespace

    ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP1;

    7.       Drop tablespace temp2 because default temporary tablespace is temp1

    DROP TABLESPACE TEMP2 INCLUDING CONTENTS AND DATAFILES;

    http://www.orafaq.com/node/2

    http://dbafix.blogspot.it/2010/08/how-to-drop-and-recreate-temp.html


    출처 http://www.areaetica.com/how-to-drop-and-create-a-temporary-tablespace/


    *추가* 

    - CREATE TEMPORARY TABLESPACE 쿼리

    CREATE TEMPORARY TABLESPACE TEMP1

    TEMPFILE '/app/oracle/oradata/ORCL/temp01.dbf' SIZE 500M REUSE

    AUTOEXTEND ON NEXT 100M MAXSIZE unlimited

    EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;


    반응형
    LIST

    + Recent posts