아.. 대충 답변할려고 했는데 이넘의 성격은 ㅠ
1) 인덱스 단편화 현상은 발생합니다.
- 해결 방안 : 해당 테이블에 트랜잭션이 최저일때 시간을 알아본다 ( 패턴분석)
- 수동 리빌드 아니면 배치 리빌드 추가
- 50만건이라도 트랜잭션이 빈번하게 일어나면 나중에 완전 겁데기 리프블록을 스캔이 발생하여
아주 극심한 비효율이 발생합니다( 여기 사이트가 그래요, 주기적인 리빌드가 필요함 )
- 50만건정도의 인덱스 분할 부하( 인덱스 컨탠션 )정도는 부하정도에 희박해 보이지만...
추후 단편화로 인해 겁데기 리프블록 스캔으로 인한 부하 발생 소지가 다분함.
2) 네
- 9/1 : 맨 왼쪽이나 오른쪽( 양끝 ) 리프블록에서 분할이 발생하면 9/1로 분할이 일어납니다.
- 5/5 : 위 경우가 아닐때 5/5로 분할이 발생합니다.
3) 온라인 옵션을 주고 한번 실행해보세요.
4) 구글에 찾아보면 겁나 많음.
전 경험한 것으로 판단을 해서...
경험이 적어 오류가 많지만... ㅋㅅㅋ)ㆀ
(그래서 배우기 위해 막막 개념 없이 글을 쓰고 있습니다. 커뮤니티 특성상 그런거니 이해 바랍니다~~ ^.^)
저런 경우도 인덱스 단편화 현상이 발생하나요?
Deadlock 걸려서 속도가 현저히 떨어지는게 아닌가용? >ㅅ<)ㆀ
그리고 60만건에서 1/4 데이타가 빈번하게 업데이트 되는데
이런 경우 잡으로 인덱스 리빌드는 무리가 아닐까용? @.@)?
(역시 배워볼려고 막 찔려보는...)
그리고 빈번하게 발생한다면 highwater mark가 고려 대상이 되나요?
@.@)? 헤헷.. 답변이 아닌 질문만 하네요.
추가 질문이 될 수 있겠지만... ㅋㅅㅋ)ㆀ
자원 사용중이라는 것은 트렌젝션 처리가 완료되지 않은 것인데 이때 인덱스 추가는 물론
관련 처리중 항목 업데이트도 안되는데 관련 트렌젝션이나 세션을 강제 종료하지 않는 이상
자료 무결성 원칙에 따라 냅두는 것이 바람직한 것이 아닌가영... ㅋㅅㅋ)/ 후다닥 ==3==3
1) 다편화
- 한 공간에 전체 공간은 8K에서 빈번한 업데이트로 인해 사용량은 2K 빈공간 6K 이런 상황에서
인덱스 스캔시 ( 레인지 ) 어쩔수 없이 비효율이 발생함
- 날짜 컬럼에 인덱스가 걸려있다고 하면 해당 날짜가 최근날짜로 업데이트가 발생하면
맨 오른쪽 리프블록에 인서트 원 리프블록 삭제 처리 마킹함 추후 블록클린( 패스트 블록클린 발생 )
2) 인덱스 리빌드
- 엄청나게 인덱스 단편화가 발생했다면 오랜시간이 소요되겟지만 매일 일정한 리빌드는 다편화 부분이적어 빠른시간안에 끝나고, 리빌드는 온라인으로 가능한걸로 아는데 아닌가요?
3) 오라클에서 데드락이 발생하는 경우 무한 웨이팅 현상이 발생하기 때문에 데드락을 유발하는 세션을 킬을 하고 데드락 상황을 배제함. alert.log에 데드락 발생이라 표시하고 덤프파일 표시.
4) 하이 워터 마크
- 아주 극심함 입력, 수정, 삭제가 발생하는 경우 테이블 풀 스캔시 30만건 읽어오는데 몇백만 블록 스캔 이 발생하는 경우가 있음. 그러므로 해당 테이블도 리로그 작업이 필요함( 주기적 )
물론 적정한 입력 수정 삭제 라면 익스텐트을 적절이 재사용을 함( 완전 재사용은 아님 )
5) 인덱스을 온라인 옵션으로 생성한다고 해서 데이타 무결성 이상현상은 발생하지 않습니다.
전 개념이 없어서... 또 글 막막 남깁니다.
배움을 주시는 모든 분들께 진심으로 감사드립니다.
보다 구체적으로 상황 예를 들면,
전 개발자로 대국민 서비스하는 시스템을 여러개 만든 경험이 있었는데요,
대부분 하루에 업데이트가 10만건을 넘습니다.
최근 만든 시스템도 영업사원이 3000명 정도되서 일 업데이트가 50만건을 넘고요,
근데 굳이 인덱스 재구성 안해도 속도를 어느 정도 보장합니다.
혹 인덱스 종류에 따라 영향이 있을 수 있는지요?
그렇다면 대국민 서비스가 아니더라도 업데이트가 많으면 잡으로 재구성해야 한다는 말이 되는데..
뭔가 제가 이해하고 있는 것이 분명 오류가 있는 것 같은데,
이해할 수 있는 방향으로 말씀 부탁드려도 될까용.. ㅋ ^.^; (날로 먹기..ㅋ)
업데이트가 발생하는 컬럼에 인덱스 존재 유무 부터 확인해야 할거같습니다.
그리고 어떤 패턴으로 해당 컬럼에 업데이타가 되지는 업데이트가 되는 시점에
인덱스 분할이 발생하는지 아님 해당 블록에서 업데이트가 되는지?
아래 같은 현상을 인덱스 단편화에 의한 형상입니다.
해당 테이블은 x 처러하겠습니다.
-- xxxx
SQL> SELECT TO_CHAR(xxxx) FROM xxx.xxxWHERE xxxx> 0 AND
2 ROWNUM <= 1;
선택된 레코드가 없습니다.
----------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 0 |00:00:00.16 | 33672 |
|* 1 | COUNT STOPKEY | | 1 | | 0 |00:00:00.16 | 33672 |
|* 2 | INDEX RANGE SCAN| xxxx_IDX02 | 1 | 1 | 0 |00:00:00.16 | 33672 |
----------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(ROWNUM<=1)
2 - access("xxxx">0 AND "xxxx" IS NOT NULL)
늘 프로젝트 때 DBA가 같이 다녀서 인덱스 재구성에 대한 이해가 적은데요,
인덱스 재구성은 자주 쓰나요?
개발자 입장에서 초기 시스템 빅데이타 재구성 작업 할 때 인덱스 효율이 급격히 떨어져서
그 때 써보고 안써봐서요, 자주 쓴다면 재구성을 하는 기준과 작업 시점이 있는지요.
위에서도 썼지만 지금도 운영하고 있는 시스템을 많은 사용자가 쓰고 있는데
업데이트가 자주 일어나는 시스템은 효율적인 성능을 위해 정책을 두고 정기적으로
인덱스 리빌드를 해주는 것이 좋은가요?
DBMS 마다 인덱스 종류가 차이가 있겠지만 인덱스 마다 이런 기준점이 달라질 수 있는지요?
얘기하다 보니 저도 질문자와 같은 질문을 하고 있는 것 같네요.. ^.^;
조금 방대한 것 같고,
저도 결론은 인덱스 관리에 관한 자료를 찾을 수 있는 방법을 알려주시는 것이 좋아 보입니다.... ! ^.^;