LOOP구문과 CPU점유율과의 관게?? 0 3 1,497

by 김춘성 [2012.04.27 14:15:09]


제가 아래와 같은 프로시져를 통해서 데이터를 백업하는 일을 하려고 합니다.

--------------------------------------------------------------------------------------------------------------
    V_TEST_S := 1;
    V_TEST_E := 100000000;

LOOP
  
    FOR l_list IN ( select ~~~ pk 이퀄조건으로 row 한건 셀렉트 )
    LOOP

insert into for 문에서 가져온거 다른테이블에 인서트

commit;

    END LOOP;

    V_TEST_S := V_TEST_S + 1;
   
    EXIT WHEN V_TEST_S = V_TEST_E;

    END LOOP;
--------------------------------------------------------------------------------------------------------------

그런데 DBA분께서 이거 돌리니깐 CPU점유율이 막 올라간다고 합니다.
이런 로직구현으로는 문제가 있는 프로시져 인가요?

고수님들의 답변을 부탁드립니다.

by 김춘성 [2012.04.27 14:47:06]

건당 COMMIT 이라서 그부분은 아닌거 같고...
단지 LOOP를 1억번 돌렸다고 CPU가 올라가는건가? ㅠㅠ
도무지 이해가 안가네욤 흑 ㅠㅠ


by 마농 [2012.04.27 15:34:21]

1. 건건 루프
2. 한방 쿼리
3. 절충안 BULK COLLECT 를 이용해 보세요.
http://www.gurubee.net/article/12607


by 부쉬맨 [2012.04.27 17:02:45]
plsql 은아니지만
cs 단에서 테스트를 해본적이있는데

sga가 올라가서 메모리를 잡아먹으면서
cpu점유율도 올라가더군요

전 최대 만건 insert 후 select 했더만
로컬 pc가 죽을려고 헐떡헐떡 한경우가있었습니다.

한방쿼리를 추천하고싶습니다.

이건중간에 에러나도 문제가될만해보이네요.
지금 만들어진 plsql이라면 한방쿼리가 젤좋아보이네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입