db에 대용량 insert 시 통계 생성 0 2 1,721

by classwizar [Oracle Tuning] [2014.05.26 11:36:17]


안녕하세요. 

오래만에 글 남깁니다. 

일을 하다보니 궁금한 부분이 있어 이리저리 궁리하다. 질문 드립니다. 

저희 회사 테이블 DDD가 있는데 , 이 테이블 인덱스는   관리회사, 카드번호 입니다. ( PK) 

관리회사별로 데이터를 관리하고 있는데 ,  한 관리회사당 많으면 10만건 , 적으면 2~3만 건의 데이터를 

관리하고 있습니다. 

 

문제가 발생한 시점은 ㅈ저희 팀에서 sqlloader를 이용하여, 대용량 insert를 할 수 있도록 프로그램 하나을 

만든 시점입니다. 

처음에는 빠르게 데이터가 insert 되어 사용하기 편했는데, 

비지니스 로직이 이것저것 추가 되다 보니 , insert 한 정보를 토대로  프로시저등을 호출한다든가.

하면서 속도가 현저하게 느려졌다는 사실입니다. 

 

처음 계약한 관리회사같은 경우 row 수가 없으니, 데이터가 없다고 판단하여, 풀 스켄을 타는 것으로 해석하고 있습니다. 

10건 자료가 들어가는데 , 2시간 정도 걸려 튜닝 문의가 들어와 이리 저리 해본 결과 , 

통계자료가 올바르지 못해 최적화된 통계가 돌지 않아 문제가 발생하였고, 

통계를 갱신해보고 돌리게 되면 , 2~3분으로 시간이 단축 되는 하는 것을 확인 할 수 있었습니다. 

 

insert -> 통계갱신 ->  타 프로시저 호출 식으로 

프로세스를 잡고자 하는데 

insert될때마다 통계를 갱신한다는건 굉장한 무리수라 생각하기 때문에 참 곤란합니다. ( 프로그램에서 insert시 통계를 

갱신하자);;

좋은 방법이 없을까요 ?

제머리로는 답이 안나오네요 . 

 

by 임상준 [2014.05.26 13:09:08]

처음 계약 시 row 가 0 에서 변하는 경우 외에는 통계정보를 매번 수집 할 필요는 없어보입니다.

플랜을 보시고 최적 플랜 타도록 힌트를 SQL 삽입 한다든가 하시면 될 것 같습니다.

10건  추가했다고 통계정보 갱신을 할 필요는 없어 보이네요

 


by classwizar [2014.05.26 13:42:09]

말씀 주신 것 처럼 하는게 맞을 거 같습니다. 

로우건이 0건에서 변경될때 , 통계 생성 그 외 경우에는 일일 통계를 쌓도록 하든, 월단위로 하든

통계 관리 정책을 세워서 하는게 맞을거 같습니다. . 감사합니다. 

많은 도움이 되었습니다. 

 

감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입