인덱스생성시간이 너무 오래걸립니다.. 0 3 11,312

by 김선호 인덱스짜잉나ㅠ [2009.04.21 16:12:10]


안녕하세요 며칠만에 또 질문올리네요 허접한 내공에 대해 안타까움을 금치못하고 있습니다 ㅠ

이번에 하는일은 대용량 인덱스 생성작업인데요.

서버는 AIX 5.3 Mem 8G HDD140Giga SGA 6G 오라클 10gR2 이구요 cpu는 4cpu*2core 입니다.

.create index 할 때 뒤에 parallel 16 붙여서 세션모니터로 8개의 프로세서가 돌아가는거를 확인했습니다.

100만건생성시 200mb의 공간이 먹히는데 5000만건이라 10g정도 확보해 두었구요

temp도 8g, undo도 12g 확보했습니다. 인덱스생성대상 테이블에 degree 8 nologging도 주었구요.

parallel 꼭 수행해라 해서 alter session force parallel dml 도 주었습니다(헉헉...)

문제는

100만건으로 테스트를 했었는데 3분 만에 끝납니다.

그런데 5000만건 인덱스 돌리면 OEM으로 시간확인을 해봤는데 최소 6시간 이상이 걸립니다.

산술적으로 생각해보면 3분*50 이면 150분 즉 2시간30분이면 5000만건이란 얘긴데

실제로는 전혀 그렇지 않네요. 만들어지는 것도 도메인 인덱스라 nologging힌트도 못주고...

혹시 제가 까먹은 부분이나 대용량 인덱스 생성하는데에 있어 체크해봐야 할 사항이나 속도 개선하는 법좀 알려주세요!

오늘도 수고하세요 ^^

by 현 [2009.04.21 17:06:02]
정말로 parallel 프로세스가 잘 작동하는지 확인 한번 해보세요.
cpu의 상황등으로 인해서 parallel로 돌지 못하고 싱글로 도는 경우도 있습니다.
또한 공간이 부족하면 남는 공간을 찾느라 오래 걸릴 수도 있습니다.
인덱스는 테이블과 달라서 데이터 + 로우아이디를 가지고 있기 때문에 사이즈가 좀 더 먹습니다.
parallel dml 은 필요없는 거 같구요,
머 아뭏든 그렇게 비정상적으로 오래 돌때 세션을 한번 체크하셔서 parallel 프로세스가 정상적으로 작동하고 있는지 확인해 보시기 바랍니다..

by 김선호 [2009.04.23 13:41:43]
댓글 감사합니다. ㅎㅎ 세션모니터로 확인하는데 parallel(a,16)으로 돌리면 16+1개가 뜨고, 별렬동작은 잘 해요. 결국엔 db_writer_processes 를 늘려서 해결 했습니다ㅎㅎ 조언 감사합니다~

by 김선호 [2009.04.23 13:42:25]
아 세션모니터에서 채크했을 때, free buffer wait 라는 이벤트 때문이었어요 ^^;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입