2010-05-26 5 views
1

Oracle에 데이터를로드하는 데 ODP.NET을 사용하고 있습니다. 각 호출 1000 행의 그룹에 삽입 bulking입니다.오라클에 비동기식으로 삽입하면 어떤 이점이 있습니까?

load 메서드를 비동기 적으로 호출 할 때 성능상의 이점이 있습니까? 10 개의 호출을 동 기적으로 만드는 대신 10 개의 호출을 비동기 적으로 수행하는 대신 10000 개의 행을 삽입하려고합니다.

데이터베이스가 현재 ASSM을 사용하고 있지만 그렇지 않은 경우 많은 프리리스트가 사용됩니다. 데이터베이스 서버에는 여러 개의 코어가 있습니다.

초기 테스트에서 성능이 향상되는 것 같지만 볼 수없는 것이 있습니까? 잠재적 인 교착 상태 또는 경합 문제?

물론 트랜잭션 처리와 이러한 방식으로 수행되는 부하가 복잡합니다.

답변

2

병목 현상의 위치에 따라 다릅니다.

병목 현상이 CPU이고 CPU/코어가 여러 개인 경우 여러 세션에서 여러 프로세서를 사용할 수 있으므로 속도가 빨라집니다.

병목 현상이 네트워크 인 경우 ('app'상자와 'db'상자 사이) 이점이 덜 명확 해집니다. 몇 가지 이점을 얻을 수 있습니다 (예 : 세션 'a'는 세션 'b'가 disk/cpu를 사용하고 그 반대의 경우도 마찬가지입니다).

디스크가 중간에 있습니다. 디스크 쓰기는 백그라운드에서 DBWR 프로세스와 REDO 로그의 LGWR에 의해 처리됩니다. 세션이 다른 시간대에 다른 리소스를 사용하는 경우에도 몇 가지 이점이 나타납니다.

특히 병렬 세션에서 색인의 동일한 비트에 쓸 수있는 '순차적'숫자 또는 날짜의 색인에 경합이 발생할 수 있습니다.

어떤 종류의 데이터 볼륨을로드합니까? 용량이 매우 큰 경우 외부 테이블을 통해 파일을 전송 (예 : CSV)하고 업로드하는 것이 좋습니다.

1

동시에 삽입하는 경우 (즉, 여러 세션을 기준으로) 성능이 향상되어야합니다 (최대 한도까지). 당신은 비동기 적으로 삽입하는 방법을 설명하지 않았지만 DB에 대한 다중 연결을 열 것이라고 가정합니다. 충분한 프리리스트가 있거나 ASSM을 사용하는 경우 병목 현상은 디스크 쓰기 속도 여야합니다. 세션 당 한 번만 커밋 (작업 부하의 끝에서)하고 경합 문제가 발생하지 않아야합니다.

이미 성능이 향상되고 있으므로 노력할 가치가 있는지 확인할 수 있습니다.

+0

예, DB에 여러 연결을 엽니 다. 성능상의 이점은 지금 다소 여드름이 난다. 네트워크를 통해 테스트를 수행하고 있으므로 실제로 차이가 있는지 로컬로 확인해야합니다. 슬프게도 가끔씩 약간의 ORA 오류가 발생하는 것 같습니다. 똑같은 테스트 데이터를 반복해서로드하고 있기 때문에 문제를 해결하기가 정말 어렵습니다. 그리고 일부로드는 데이터 유형 불일치에 대해 불평합니다. – KTrum

+0

@Karl Trumstedt : 정확한 오류 메시지와 코드 예제가 없으면 어떤 일이 발생하는지 알기가 어렵습니다. 가장 잘 수행되는 병렬 세션 수를 확인하십시오. 세션 수가 늘어 나면 수익이 감소하는 것을 관찰해야합니다 (너무 많은 연결을 만들면 결과적으로 처리량이 감소합니다). –

관련 문제