Week1_이진우

조회 수 28105 추천 수 0 2013.09.06 23:29:12
ljw *.229.63.12

3과목
1장


p481
1]버퍼 블록의 상태 종류중 틀린것은?
1)Free 버퍼
2)Dirty 버퍼
3)Clean 버퍼
4)Pinned버퍼


p513
2]괄호 안에 알맞은 단어를 적으시오(단답형)
사용자 정의 함수/프로시저는 내장함수처럼 Native 코드로 완전 컴파일된 형태가 아니어서
가상머신 같은 별도의 실행엔진을 통해 실행된다. 실행 될 때마다   (              )이 일어나며,
이 때문에 내장함수를 호출할 때와 비교해 성능을 상당히 떨어뜨린다.


p494~496

3]sql형태에 대한 설명중 올바른 것을 고르시오(2개)

1)java언어에서는 static sql문법을 제공한다.

2)dbms입장에서는 static sql과 dynamic sql의 차이가 없다.

3)dynamic sql을 embedded sql이라고도 한다

4)static sql, dynamic sql 구분보다는 바인드 변수 사용이 더 중요하다


(기출문제) 다음 괄호 안에 들어갈 올바른 용어의 순서로 올바른 것을 선택하세요
p484
Response Time = (            ) + Wait Time
                           = (             ) + Queue Time

1) Service Time, Cpu Time  
2) Cpu Time, Service Time
3) Idle Time, Service Time
4) Elapsed Time, Cpu Time


2장

p538
4]괄호안에 알맞은 단어를 적으시오(단답형)
(               ) 이란 관리할 Lock 리소스가 정해진 임계치를 넘으면서 로우 레벨 락이 페이지, 익스텐트, 테이블 레벨 락으로 점점 확장되는 것을 말한다.


p551
5] 괄호안에 알맞은 공통된 단어를 적으시오(단답형)
(                  )은 다른 트랜잭션에 의해 데이터의 추가, 변경, 삭제가 발생하더라도 단일 SQL문 내에서 일관성 있게 값을 읽는 것을 말한다.


p552~553
6]snap shot too old에 대한 설명으로 틀린 것을 고르시오

1)undo 영역의 크기를 증가시킴으로써 snapshot too old 발생을 줄일 수 있다.

2)long run select 쿼리가 snapshot too old를 발생시킨다면 쿼리 튜닝을 통해

    snapshot too old발생을 해결할수 있다.

3)대량 업데이트후 해당 테이블을 full scan을 하게되면 block clean out 실패로 인한

    snapshot too old 발생을 방지할 수 있다.

4)오라클의 경우 CR 블록을 생성하지 않기 때문에 snapshot too old 에러가 발생한다.



기출문제 트랜잭션의 특징

p542
원자성 / 일관성 / 격리성 / 영속성


3장


-자작문제
7] 다음 sql 문장을 실행한 결과 emp 테이블을 table full scan하는 실행계획이 나왔다.
실행결과와 sql문의 형태만을 보고 유추한 사실중 올바른것 2개를 고르시오
select *
 from emp
where job = ‘CLERK’ or deptno=20;

1)emp 테이블에 인덱스가 전혀 없을수도 있다.
2)인덱스가 한개만 있더라도 table full scan 실행계획이 나올 수 있다.
3)select 절에 * 대신 job, deptno으로 적어주면 table full scan 실행계획이 나타나지 않는다.
4)or 조건을 and로 바꿔야 table full scan 실행계획이 사라지고, 결과 값도 동일하다.


-자작문제 
8)다음 sql과 실행계획에 대한 설명중 올바른 것을 고르시오

select deptno, avg_sal 

  from (select deptno, avg(sal) avg_sal

          from emp group by deptno) a

where deptno = 30 

--------------------------------------------------------------------------- 

| Id | Operation  | Name     | Rows| Bytes | 

---------------------------------------------------------------------------

| 0 | SELECT STATEMENT    | 1  |    26 | 

| 1 |  VIEW    | 1  |    26 | 

| 2 |   SORT GROUP BY NOSORT    | 1  |     7 | 

| 3 |    TABLE ACCESS BY INDEX ROWID  | EMP    | 6  |    42 | 

|* 4 |     INDEX RANGE SCAN  | EMP_DEPTNO_IDX  | 6  |       |

| ------------------------------------------------------------------------ 

Predicate Information (identified by operation id): 

------------------------------------------------------------------------- 

4 - access("DEPTNO"=30)


1)조건절(Predicate) pullup이 발생했다.

2)emp테이블을 deptno컬럼을 기준으로 그룹함수를 사용하므로

   emp 테이블의 모든 데이터를 읽어 효율적이지 못한 쿼리이다.

3)실행계획에 나와있는 sort group by nosort operation을 통해 

    view 바깥에 있는 deptno=30 조건이 view 안쪽으로 조건절 pushdown된 것을

    알 수 있다.

4)조건절(deptno = 30)에 해당하는 부분의 데이터만 읽는 효율적인 쿼리이다.



-자작문제 
9] 주관식
다음 SQL문의 형태와 인덱스 컬럼 타입을 보고 나타날수 있는 비효율을 서술하고
튜닝할수 수단을 서술(인덱스 튜닝 등) / SQL을 재작성 하시오

-- 인덱스 구성 : n1 ( col2 + col3 + col1)
-- 컬럼 타입 : col1, col2, col3 : varchar2
   
select col1, col2, col3
from t1
where col1 = 'CD111'
 and to_date(col2, 'YYYYMMDD') between to_date('20120701', 'YYYYMMDD') and to_date('20120731', 'YYYYMMDD')
 and col3 = 'AA'

union all

select col1, col2, col3
from t1
where col1 = 'CD112'
 and to_date(col2, 'YYYYMMDD') between to_date('20120701', 'YYYYMMDD') and to_date('20120731', 'YYYYMMDD')
 and col3 = 'AA'



4장]

p609~p613 + 자작
10]인덱스에 대한 설명중 틀린것을 고르시오(2개)
1)잦은 데이터 삭제로 Index Sparse 현상이 나타날수 있다.
2)인덱스에는 null값 자체가 저장될수 없다.
3)비트맵 인덱스는 b-tree인덱스에 비해 상대적으로 저장 공간을 적게 차지한다.
4)비트맵 인덱스는 주로 값의 종류가 많은 경우에 유리하다.


p619
11]다음 칸에 알맞은 공통된 단어를 넣으시오
Oracle IOT를 개발하면서 두가지 액세스 방식을 모두 사용할 수있도록 설계하였다. IOT 레코드의 위치는 영구적이지 않기 때문에 물리적 주소(ROWID)대신  (              )를 사용한다.
(           )는 PK와  physical guess로 구성된다.


자작
12]인덱스 구성에 대한 설명중 올바른 것을 고르시오

1)unique인덱스는 단일컬럼으로 구성되어야한다.

2)order by, group by를 위한 소트 연산을 줄이기 위해 인덱스에 컬럼을 추가하기도 한다.

3)조건절에 기술된 컬럼에 의해 선택도가 높은 인덱스가 있을경우 table full scan보다 해당

   인덱스를 사용하는 것이 좋다.

4)인덱스 선두 컬럼은 범위조건으로 사용되는 컬럼이 위치하는 것이 인덱스 활용에 유리하다



문자 vs 숫자 : 문자--> 숫자
문자 vs 날짜 : 문자--> 날짜


5장

p703~706
13]top-n sql 구현을 통해 소트 연산 횟수를 최소화하여 소트 영역 사용량을 최소화 하려고 한다. 다음 쿼리 문과 sql문을 보고 올바른 설명을 고르시오
(인덱스 구성은 다음과 같다.   pk_emp : empno)

select *

from

(select rownum rn

  from

(select /*+ index (emp pk_emp) */ *

from emp

order by empno )

 )

where  rn between 21 and 30;

------------------------------------------ | Id  | Operation           ------------------------------------------ |   0 | SELECT STATEMENT
|*  1 |  VIEW              
|   2 |   
COUNT            
|   3 |    VIEW            
|   4 |     INDEX FULL SCAN( PK_EMP )
------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

  1 - filter("RN"<=30 AND "RN">=21)


1)위의 실행계획을 보면 정상적으로 top-n효과가 나타난 것을 확인 할 수 있다.
2)인라인 뷰의 중첩된 사용으로 인해  top-n효과가 나타나지 않았다.
3)인덱스 사용으로 top-n효과가 나타났다.
4)filter predicate을 통해  top-n효과가 정상적으로 나타나지 않은것을 알 수 있다.


p735~736

14]다음 쿼리에 대해 올바른 설명을 고르시오
select /*+ pq_distribute(e, none, none) */ *
from dept d, emp e
where e.deptno = d.deptno

1)병렬관련 힌트를 사용하여 emp 테이블을 먼저 읽는 형태(outter table)로 실행된다.
2)두번째 파라미터는 inner table의 병렬도를 설정하는 값으로, none 값을 주어 optimizer가
   스스로 판단하도록 유도 했다.
3)세번째 파라미터는 outer 테이블의 distirbution 방식을 지정하는 값으로 none 값을 주어
   optimizer가 스스로 판단하도록 유도 했다.
4)full-partition wise join을 유도한 힌트이다.


-자작문제

15]다음 sql문에 대한 설명으로 틀린 것을 고르시오

(table emp : 사원 테이블)

(dept_no 컬럼 : 부서번호 )


select dept_no, count(*) cnt,

(select count(*) from emp) totalEmp

from emp

group by dept_no


1)부서번호, 부서별 사원수, 전체 사원수를 select한다.

2)select 절에 기술된 스칼라 서브쿼리의 경우 dept_no수만큼 실행된다.

3)일반적인 형태의 sql로 흠잡을데 없는 쿼리이다.

4)emp table을 두번 읽게되며 특히 스칼라 서브쿼리의 경우 같은 값을 반복적으로 실행하는 비효율이 발생한다.



--p714

16] 다음 쿼리를 merge 문 으로 변경하시오


UPDATE /*+ BYPASS_UJVC */ ( SELECT A.EMP_ID, A.TMP_MON, B.DDCT_MON FROM TABLE_A A, TABLE_B B WHERE A.C_CD = '10' AND A.C_CD = B.C_CD AND A.CD = B.PAYROLL_NO AND A.EMP_ID = B.EMP_ID ) A SET A.TMP_MON = A.DDCT_MON;


ljw

2012.07.23 09:30:17
*.148.176.25

- _ㅜ 오늘 저녁에 올려놓도록 하겠습니다.

ljw

2012.07.25 09:44:24
*.148.176.25

정답

1] 3

2] context switching

3]2, 4


(기출문제)2


4]lock escalation

5]읽기일관성

6]4


7]1,2

8]4

9]

비효율 : 1.인덱스 선두컬럼이 범위 조건으로 사용되기 때문에 불필요한 인덱스 스캔이 발생한다.

             2. 같은 테이블을 접근하게된다.(한번만 읽어도록 수정가능)

             3.테이블의 컬럼에 함수를 사용하여 인덱스 활용이 불가능하다.


튜닝 : 1.인덱스 구성을 변경한다(범위 조건으로 사용되는 컬럼을 마지막에 놓는다.)

           n1(col3 + col1 + col2)

         2.테이블을 한번만 읽도록 쿼리를 수정한다.

         3.where 절의 테이블 컬럼을 함수로 가공하지 않도록 수정한다.


select col1, col2, col3

  from t1

where col3 ='AA'

  and col1 in ('CD111', CD112')

  AND col2 between'20120701' and '20120731'



10]2,4

11]logical rowid

12]2


13]4

14]4

15]3


16]

merget into table_a a

 using( select b.c_cd, b.payroll_no, b.emp_id, b.ddct_mon 

          from TABLE_B) B

 on( A.C_CD = i_C_cd

      AND A.C_CD = B.C_CD

      AND A.CD = B.PAYROLL_NO

      AND A.EMP_ID = B.EMP_ID)

when metched then update

     set  tmp_mon = b.ddct_mon;

ljw

2012.07.25 10:09:51
*.148.176.25

문제풀이

박우창교수님문제

1)4

2)4

3)4


4)1

5)1

6)4


7)1

8)1

9)3


10)4

11)2

12)1


13)1

14)3

15)4


주관식1)

select deptno 

  from dept a

 where exists ( select deptno 

                          from emp

                         where deptno = a.deptno)


주관식2) index (range scan)


ljw

2012.07.25 10:15:38
*.148.176.25

문제풀이

대수형님


1)3

2)아카이버(Archiver)

3)4


4)1

5)옵티마이저

6)3


7)2

8)2

9)order by custid desc


10.

select a.업체명, a.직원수 , a.도시, a.생산품 

from 업체 a

where 업체명 like '대한%' 

and 도시 = '서울'

and 연봉제 = 'Y'

order by 업체명 

ljw

2012.07.25 10:26:29
*.148.176.25

문제풀이

주영씨


1)2

2)3

3)다중버전읽기일관성


5)3


7)Index Sparse


8)3