탑크리에듀(www.topcredu.co.kr) 제공 SQL튜닝 강좌중 Current Mode와 Consistent Mode에 대해 설명한 강좌 입니다. Consistent Mode : 읽기 일관성이 보장된 상태에서 데이터 블록을 읽는 것을 이야기하는데 대부분 SELECT 쿼리가 해당된다. 쿼리가 시작된 시점을 기준으로 일관성 있게 읽어 들이며 읽는 도중에 값이 바뀌더라도 쿼리 시작시점의 값으로 읽는다. 그러므로 SCN(System Change Number)의 값을 확인하면서 읽는데 값이 변경되면 SCN번호가 증가되므로 이 경우에는 Rollback Segment에서 과거의 블록을 읽어들인다. AUTOTRACE에서는 consistent gets로 표시된다.
Current Mode : SQL 시작시점이 아닌 실제 블록을 액세스하는 그 시점의 최종값을 읽어들이는데 AUTOTRACE에서는 db block gets로 표시된다. SELECT FOR UPDATE 또는 DML 또는 디스크 소트가 필요할 정도의 대용량 정렬시 나타난다.
2. Consistent Mode
읽기 일관성이 보장된 상태에서 데이터 블록을 읽는 것
대부분 SELECT 쿼리가 해당된다. 쿼리가 시작된 시점을 기준으로 일
관성 있게 읽어 들이며 읽는 도중에 값이 바뀌더라도 쿼리 시작시점
의 값으로 읽는다.
SCN(System Change Number)의 값을 확인하면서 읽는데 값이 변경
되면 SCN번호가 증가되므로 이 경우에는 롤백 세크먼트(Rollback
Segment)에서 과거의 블록을 읽어들인다. SQL AUTOTRACE에서는
consistent gets로 표시된다.
http://www.topcredu.co.kr
3. Current Mode
SQL 시작시점이 아닌 실제 블록을 액세스하는 그 시점의 최종값을
읽어들이는데 AUTOTRACE에서는 db block gets로 표시된다.
SELECT FOR UPDATE 또는 DML 또는 디스크 소트가 필요할 정도의
대용량 정렬시 나타난다.
http://www.topcredu.co.kr
4. 예문
Update emp Set sal = sal + 100 Where deptno = 10;
위 쿼리의 경우 수정될 데이터를 찾기 위해 먼저 deptno가 10인 데이터를 읽기 일관성
모드(Consistent Mode)로 읽고 실제 값을 변경하는 시점에 Current Mode로 다시 읽어서
그때의 SAL 값에 100을 더해 변경한다. 이때 deptno=10 데이터를 찾을 때 읽어들이는
blocks은 consistent gets에 나타나고, 실제 변경을 하려고 Current Mode로 읽은 블록은
db block gets에 나타난다.
추가로 한가지 더 이해할 부분은 수정할 데이터를 조회하는 Consistent Mode로 읽을 때
는 block단위로 I/O가 발생하므로 읽은 블록수가 표시되고 실제 수정하기 위해 Current
Mode로 읽을 때는 수정될 데이터를 찾기 위해 블록을 읽으므로 수정될 데이터 건수와
블록을 읽은 수가 비슷하게 나타나며 Consistent Mode로 수정하기 위해 데이터를 읽은
블록보다 더 큰값을 가질 확률이 높다.
http://www.topcredu.co.kr