Podsumowując szczegóły: Musimy wprowadzić około 5 milionów wierszy do bazy danych dostawców (Oracle). Wszystko idzie świetnie w przypadku partii 500 tys. Wierszy przy użyciu OracleBulkCopy
(ODP.NET), ale gdy próbujemy skalować do 5 mln, wydajność zaczyna zwalniać do indeksowania, gdy osiągnie znak 1 mln, staje się stopniowo wolniejsza w miarę ładowania większej liczby wierszy i ostatecznie upływa po około 3 godzinach.
Podejrzewam, że jest to związane z kluczem podstawowym na stole, ale przeszukiwałem fora Oracle i Stack Overflow w celu uzyskania informacji i wiele tego, co czytam, zaprzecza temu (również wiele postów wydaje się zaprzeczać sobie nawzajem ) . Mam nadzieję, że ktoś może ustalić rekord w kilku ściśle powiązanych pytaniach dotyczących tego procesu:
Czy
OracleBulkCopy
klasa stosuje ładowanie konwencjonalne czy bezpośrednie? Czy jest jakiś sposób na potwierdzenie tego, w ten czy inny sposób?Zakładając, że robi załadunek korzystanie z bezpośrednim ścieżka: Czy to prawda, że Oracle automatycznie ustawia wszystkie indeksy bezużyteczny podczas obciążenia i umieszcza je z powrotem w Internecie potem? Przeczytałem kilka oświadczeń na ten temat, ale znów nie mogę tego potwierdzić.
Jeśli # 2 jest prawdą, to czy powinno mieć jakiekolwiek znaczenie, jakie indeksy znajdują się w tabeli przed zainicjowaniem operacji kopiowania zbiorczego? Jeśli tak, to dlaczego?
Czy w związku z punktem 3 istnieje jakakolwiek praktyczna różnica między ładowaniem masowym z indeksem bezużytecznym a faktycznym upuszczaniem indeksu przed ładowaniem, a następnie jego odtwarzaniem?
Jeśli # 2 jest nie poprawny, lub jeśli istnieją pewne zastrzeżenia nie mam zrozumienia, wtedy byłoby żadnej różnicy do jawnie zrobić indeks bezużyteczny przed obciążeniem luzem, a następnie jawnie odbudować go potem?
Czy istnieje coś innego niż kompilacje indeksu, które mogłyby powodować stopniowe spowolnienie operacji kopiowania zbiorczego w miarę dodawania coraz większej liczby rekordów? (Być może ma to coś wspólnego z logowaniem, chociaż spodziewałbym się, że operacje masowe nie są rejestrowane?)
Jeśli naprawdę nie ma innego sposobu na podniesienie wydajności do tabaki oprócz upuszczenia najpierw PK / indeksu, jakie kroki mogę podjąć, aby upewnić się, że indeks nie zniknie całkowicie, tj. Jeśli połączenie z bazą danych zostanie utracone w środek procesu?