[SQLP 막간정리 2] [3] 실전 모의고사

Yu River·2022년 9월 3일
0

SQLP필기연습

목록 보기
34/35

[1] 실전 모의고사2

1번

오라클 리스너

  • 클라이언트로부터 연결 요청을 받는 프로세스
  • 전용 서버 방식에서는 서버 프로세스를 생성
  • 공유 서버 방식에서는 가용한 dispatcher 포트번호를 클라이언트에 전송

dispatcher 프로세서

  • 공유 서버 방식에서는 클라이언트가 보낸 request를 서버 프로세스가 사용할 수 있도록 큐에 담아줌

6번

DBMS_XPLAN.DISPLAY_CURSOR

  • 라이브러리 캐시에 적재된 실제 실행계획 출력
  • 라이브러리 캐시에 적재된 트레이스 정보 출력
  • SQL_PLAN , SQL_PLAN_STATISTICS_ALL 뷰와 관련

DBMS_XPLAN.DISPLAY

  • Explain plan을 통해 예상 실행계획 출력할 때

7번

  • AWR에서 최상위 대기 이벤트에는 CPU Time이 최상위에 위치하는 것이 좋다.
  • 최상위 이벤트에서 db file scattered read 대기 이벤트와 db file sequential read 이벤트가 있다고해서 효율이 꼭 나쁜 시스템인 건 아니다.

8번 ⭐️ Index Range Scan이 가능한지 꼭 확인할 것

  • 데이터 형변환이 일어나야 하는지 : VARCHAR , NUMBER
  • NULL , NOT NULL 제약 조건
  • OR 조건절 사용

10번

  • 인덱스에 뒤쪽에 컬럼을 추가하면 클러스터링이 더 나빠진다.
  • 인덱스 클러스터링이 좋으면 디스크에서 읽는 블록 개수가 줄어들고 DB 버퍼 캐시에서 읽는 블록 개수가 줄어든다.

11번 ⭐️ 인덱스 성능 효과 ⭐️

  • 인덱스에 컬럼을 추가했을 때 그 컬럼에 해당되는 데이터가 작을 수록 성능효과가 큰 것이다.
  • 인덱스 액세스 조건은 인덱스 스캔 범위를 줄이는 데 결정적인 역할을 한다.
    • 그 반대는 필터 조건 !

13번

  • IOT 구문 : ORGANIZATION INDEX;
  • IOT에서 만들어진 Secandary 인덱스에서는 PK 인덱스의 컬럼도 같이 포함한다.

22번

  • 라이브러리 캐시에서 SQL을 탐색하고 파싱부하를 줄이기 위해서 바인드 변수를 사용한다.
  • 라이브러리 캐시에서 SQL을 탐색하고 파싱부하를 줄이기 위해서 session_cached_cursors 파라미터 설정 값을 늘린다.
  • ⭐️ 동적 샘플링 레벨을 높이는것과 파싱 부하를 줄이는 건 상관이 없다. ⭐️

23번

  • 항상 바인드 수를 사용하는 컬럼에는 히스토그램을 수집하지 않아도 된다.
  • ⭐️ 바인드 변수를 사용하고 SQL 사용자가 다르면 별도의 커서를 생성한다.
    같은 사용자인 경우 같은 커서를 공유한다.⭐️

31번

  • 파티션을 한꺼번에 갖고오나 부분으로 가지고와 union all 처리하거나 둘 성능은 같다.

32번

  • 병렬 프로세스 집합과 병렬 프로세스는 엄연히 다르다.
    • PARALLEL(A 2) : 프로세스를 2개를 사용한다는 이야기

33번

  • 트랜잭션의 정합성을 유지함과 동시에 LOCK 경합에 의한 성능 저하를 최소화하기 위해
    채번 테이블보단 SEQUENCE를 이용한다.
  • ⭐️ SELECT FOR UPDATE를 쓴다고해서 꼭 성능저하가 나오는 건 아니다.이 기능은 온라인 트랜잭션에서 적절히 그리고 꼭 필요하다 !! ⭐️

단답형 1

  • ⭐️ REDO 버퍼 > REDO 로그 : LOG FORCE AT COMMIT ⭐️
  • ⭐️ REDO 로그 > 디스크 WRITE : WRITE AHEAD LOGGING ⭐️

단답형 3 : OPTION(FORCE ORDER)

실기 1

  • ⭐️ 실행계획에서 읽은 ROWS와 블록 갯수의 차이를 꼭 확인하도록 ! ⭐️

실기 2

  • 최대한 범위를 줄이고 집계를 한다.
  • not exists 문 서브쿼리 : /*+ qb_name(subq)*/
    • 위에서 참조할 때(쿼리블록 안에 있는 x 테이블) : /*+ leading(a b x@subq c)*/
[인덱스 설계]
고객_X1 : 고객구분코드
SMS거부등록_X1: 고객번호 + 거부여부 

SELECT /*+ leading(a x@subq b c)*/
a.고객명 , min(b.휴대폰번호) as 휴대폰번호 , sum(c.이용금액) as 이용금액,
FROM 고객 a , 고객 b , 서비스이용명세 c
WHERE a.고객구분코드 = 'INF'
AND b.고객번호 = a.법정대리고객번호
AND c.고객번호 = b.고객번호
AND c.이용일자 between :dt1 and :dt2
AND not exists (
SELECT 'X'
FROM SMS거부등록 x
where 거부여부 = 'Y'
AND 고객번호 = a.법정대리고객번호
)
GROUP BY a.고객명 , b.고객번
profile
도광양회(韜光養晦) ‘빛을 감추고 어둠속에서 힘을 기른다’

0개의 댓글