Database초보우낙

11. 19C 뉴피쳐 기능2. 과도한 시스템 리소스를 사용하는 SQL 문에 대한 격리 본문

oracle 12c

11. 19C 뉴피쳐 기능2. 과도한 시스템 리소스를 사용하는 SQL 문에 대한 격리

오운학 2024. 4. 30. 09:49

▩ 예제11. 19C 뉴피쳐 기능2. 과도한 시스템 리소스를 사용하는 SQL 문에 대한 격리

  데이터베이스 서버에서 수행되는 SQL 중에 리소스를 과도하게 사용하는 SQL을
  자동으로 감지하고 격리하는 기능입니다. 
  이 기능의 이름을 "SQL Quarantine" 이라고 합니다. 
  시스템의 성능 저하를 초래할 수 있는 비효율적인 SQL쿼리를 자동으로 격리시켜
  다시는 실행되지 않도록 관리하는 기능입니다. 

* 19C 이전에 리소스 메니져로 제한을 둘 수 있는 것들 ?

1. 병렬 사용 쿼리문의 병렬도를 제한
2. UNDO 사용율에 대한 제한
3. LOCK 을 홀딩하고 있는 시간에 대한 제한 
4. Active  session 의 갯수도 제한
5. idle time에 대한 시간도 제한
6. sql 실행시간에 대한 제한 

※ 19c 의 리소스 메니저는 악성 sql을 스스로 감지해서 찾아낸후에
    다음에는 절대 수행되지 못하게 막아버리는 기능이 추가된것입니다.

https://cafe.daum.net/oracleoracle/SoYx/47

■ 실습:

-- 리소스 매니저 플랜을 활성화합니다.
BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(
    PLAN => 'my_plan',
    COMMENT => 'Resource Plan for detecting and quarantining expensive SQL'
  );
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    PLAN => 'my_plan',
    GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
    COMMENT => 'Limit for detected SQL',
    CPU_P1 => 10,    
    EXECUTIONS_P1 => 1    );
  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

-- SQL Quarantine 설정을 활성화합니다.
BEGIN
  DBMS_SQLQ.ENABLE_QUARANTINE();
END;
/

-- 리소스 매니저 플랜을 시스템에 할당합니다.
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'my_plan';


-- 악성 SQL을 수행하고 다음의 쿼리로 확인해봅니다.

격리된 SQL 문을 확인하려면 다음 쿼리를 사용할 수 있습니다:

SELECT * FROM DBA_SQL_QUARANTINE;