Widzę znaczne różnice wydajności między OracleBulkCopy (ODP.NET) i SQL * Loader, gdy serwer Oracle znajduje się na innym komputerze.OracleBulkCopy vs SQL * Wydajność programu ładującego
Mam bardzo podstawową tabelę w Oracle z trzema kolumnami (jeden BINARY_FLOAT, dwa NUMBER (18,0)). Nie ma kluczy podstawowych, indeksów, wyzwalaczy itp. Jest on używany jako tabela pomostowa, aby uzyskać zbiorcze dane do bazy danych.
SQL * ładowanie zajmuje około 27 sekund, aby załadować 4.5 miliona wierszy do tabeli.
OracleBulkCopy zajmuje około 10 minut, aby załadować tylko 1 milion wierszy.
OracleBulkCopy, zgodnie z dokumentacją, * "... stosuje podejście bezpośredniego obciążenia ścieżką, które jest podobne do, ale nie takie samo, jak Oracle SQL * Loader." * Może nie być tam z programem SQL * Loader pod względem wydajności, ale ta różnica jest absurdalna.
Po kilku podstawowych analizach ruchu sieciowego, stwierdziłem, że OracleBulkCopy wysyła i otrzymuje ogromną liczbę małych pakietów. Użyłem Wiresharka do porównania pakietów dla każdego i znalazłem kilka interesujących wyników.
SQL * ładowarki - po wstępnym uzgadniania połączenia - wysyła serię 8 kilobajtowego pakietów protokołów (TNS) i otrzymuje 60 bajtów ACK w reakcji.
OracleBulkCopy przesyła szereg 102 bajtów pakietów protokołów (TNS) i otrzymuje 133 bajtów pakiet (host TNS) w reakcji. Co...!? To tak jakby wysyłać jeden wiersz na raz!
Korzystając z klasy OracleBulkCopy, używam partii o wielkości 100 000 i używam niestandardowego identyfikatora IDataReader do odczytu z pliku danych.
Więc moje pytania to:
Czy ktoś kiedykolwiek widział ten problem?
Czy OracleBulkCopy faktycznie działa jako narzędzie do ładowania zbiorczego?
Czy jest coś, co muszę skonfigurować, aby działało poprawnie? (ustawienia klienta/serwera, itp.)
Każda pomoc jest doceniana.
Mam podobne czasy wstawiania przy użyciu datatable. Co gorsza, kilka kolumn jest typu znacznik czasu, więc muszę ustawić kolumnę danych na typ OracleTimeStamp, który również wydaje się mieć dobre trafienie podczas profilowania aplikacji. Czy udało ci się przyspieszyć proces zbiorczy? Wyskakiwanie do linii poleceń, aby uruchomić program sqlloader, wydaje się być naprawdę kiepskim sposobem na obsługę dużych plików na serwerze WWW! – Dan