2009-05-27 4 views
3

40 개의 바인드 변수를 열 값으로 사용하는 느린 삽입 명령문에 문제가 있습니다. WAN 링크를 통해 실행될 때 몇 초 동안 실행되며 네트워크 분석기를 사용할 때까지는 문제를 해결할 수 없습니다. 이 준비된 쿼리를 실행할 때마다 클라이언트와 서버간에 120 개의 패킷을 교환해야합니다. 보다 효율적으로 실행하기 위해 할 수있는 일은 무엇입니까?WAN을 통한 많은 바인드 변수가있는 오라클 삽입이 매우 느립니다.

동일한 호스트에서 실제 매개 변수 (바인드 변수없이)를 실행하면 수십 밀리 초 내에 완료됩니다. 매개 변수에는 특별한 것이 없으며 짧은 varchars와 숫자 만 있습니다.

우리는 ODAC와 함께 델파이 6을 사용하고 있으며, 다양한 버전의 ODAC와 오라클 클라이언트를 사용해 보았습니다. 서버 측에서는 Oracle 10과 11을 모두 시도했습니다.

답변

1

TNSWAN보다 잘 작동하도록 설계되지 않았습니다.

가능한 경우 더 효율적인 HTTP과 같은 다른 네트워크 계층을 사용하도록 애플리케이션을 다시 작성하십시오.

예를 들어 Oracle HTTP Server을 사용하면됩니다.

+0

LAN에서도 모든 개별 바인드에 대해 서버로 이동하지 않아도되지만 쿼리가 실행될 때 대량으로 수행하는 옵션이 있으면 좋을 것입니다 . 물론, 오류 처리 의미가 조금 다를지라도 여전히 ... – Thilo

+0

실제로 모든 바인딩이 서버로 전달되면 일괄 처리 쿼리의 아이디어를 완전히 무효화하지 않을 것입니다 (여기서 중요한 성능 향상은 서버 제거로 인한 것입니다. 왕복)? – Thilo

+0

네트워크 스택을 완전히 변경하는 것은 허용되지 않습니다. 삽입 된 데이터는 텍스트 파일에서 비롯되었으므로 대신 SQL Loader를 사용하려고합니다. 그러나 코드의 변경없이 성능을 향상시킬 수 있다면 훨씬 더 행복 할 것입니다. – Juraj

0

External Tables을 보았습니까? SQL 로더에 대한 필요성을 대체합니다 Oracle 9i 이상 필요합니다.

+0

그러나 네트워크를 통해 외부 테이블에 액세스 할 수는 없습니다 (네트워크 파일 시스템/공유, 원격 데스크톱 등과 같은 복잡한 문제가있는 경우에만). – Juraj

+0

WAN을 통해 DB 서버로 데이터를 옮긴 다음 업로드 할 수 있습니까? –

+0

네,하지만 어떻게 데이터를 이동합니까? 서버 및 모든 클라이언트에서 원격 데스크톱 또는 파일 공유를 먼저 구성해야합니다. 혹시 sys/network 관리자로 일하셨습니까? 그런 의미가 무엇인지 압니까? 모든 사용자에게 sqlldr.exe + 업데이트 된 응용 프로그램을 배포하는 것은 서버에서 거의 변경이 필요하지 않고 클라이언트에 대한 추가 구성이 거의 필요 없기 때문에 우리에게는 훨씬 쉽습니다. 실제로이 기능이 필요한 소수의 사용자 만이 이미 원격 데스크톱을 사용하고 있기 때문에 최종 솔루션을 연기 할 수 있습니다. – Juraj