반응형
DB2 성능이 떨어지는 쿼리에서 WITH UR을 추가하는 것에 대해서 검토하다가 WITH UR이 무엇인지 검색을 해보았다. 일반적으로 조회를 하고 마지막에 WITH UR을 포함하게 된다. ASIS에 아주 많은 부분에서 사용하고 있었으나, 보다보니 대부분은 사용하면 안되는? 상황인데 왜 쓰고 있는지 모르겠다. 그냥 샘플이 그러니까 다 가져다 붙힌건가..
SELECT *
FROM SYSIBM.DUAL
WITH UR
UR은 ISOLATION 옵션 중 Uncommitted Read 약자로
어플리케이션이 커밋되지 않은 데이터를 읽을 수 있음
테이블의 SELECT, SELECT INTO 또는 FETCH 읽기 적용 작업에만 적용
커밋되지 않은 데이터를 읽으면 불확실성 발생
- 한 레코드에서 금액을 다른 레코드에 추가하기 전에 빼면 쿼리에서 해당 금액이 완전히 누락될 수 있음
- 먼저 더한 다음 빼는 경우 쿼리에서 금액을 두 번 더할 수 있음
- 레코드를 다른 페이지로 이동시키는 방식으로 레코드를 업데이트하는경우 일시적으로 표시되지 않을 수 있음
사용해도 괜찮은 경우
- 오류가 발생할 수 없는경우 : 거의 업데이트 되지 않는 참조테이블 - 거의 업데이트 되지 않으며 이전데이터를 읽어도 그다지 상관없는 경우, 접근이 제한된 테이블 - 핸들링이 제한적이고, 업데이트가 이루어지지 않는 시간으로 쿼리를 제한한 경우
- 오류가 허용되는 경우 : 가끔 커밋되지 않은 데이터가 평균에 큰 영향을 미치지 않는 경우
- 데이터에 이미 일관성 없는 정보가 포함되어 있는 경우 : 일관성이 없거나 잘못된 경우가 많으며 데이터 사용자가 이 정보를 사용하는데 익숙한 경우
사용하면 안되는 경우
- 계산이 균형이 맞아야하는 경우
- 답변이 정확해야 할 때
- 손상이 발생하는지 확실하지 않은 경우
ISOLATION LEVEL
- Repeatable read(RR)
- Read stability(RS)
- Cursor stability(CS)
- Uncommitted read(UR)
반응형