Підсумовуючи особливості: нам потрібно надати приблизно 5 мільйонів рядків у базу даних постачальників (Oracle). Все ідеально підходить для партій з 500- OracleBulkCopy
рядкових рядків за допомогою (ODP.NET), але коли ми намагаємося масштабувати до 5М, продуктивність починає сповільнюватися до сканування, як тільки вона потрапляє на позначку 1М, стає прогресивно повільніше, оскільки завантажується більше рядків, і врешті-решт разів через 3 години.
Я підозрюю, що це пов’язано з первинним ключем на столі, але я перебирав форуми Oracle і стек переповнення інформації та багато того, що я читаю, суперечить цьому (також багато публікацій, здається, суперечать одне одному ) . Я сподіваюся, що хтось зможе встановити рекорд на деякі тісно пов'язані питання щодо процесу:
Чи використовує
OracleBulkCopy
клас звичайне або пряме завантаження? Чи я можу це, так чи інакше, підтвердити?Якщо припустити , що робить використання прямий шлях завантаження: Чи правда , що Oracle автоматично встановлює всі індекси в непридатною під час завантаження і поміщає їх назад в Інтернеті потім? Я прочитав кілька тверджень про це, але знову ж таки, не можу підтвердити це.
Якщо №2 є істинним, то чи має бути якесь значення, які індекси є в таблиці, перш ніж я ініціюю операцію масового копіювання? Якщо так, то чому?
Що стосується №3, чи є взагалі якась практична різниця між масовим завантаженням з непридатним індексом порівняно з фактичним скиданням індексу перед завантаженням та відтворенням його після цього?
Якщо # 2 це НЕ правильно, або якщо є деякі застереження я не розуміють, то він буде робити яке - або відмінність в явному вигляді зробити індекс непридатним для використання до масової завантаження, а потім явно відновити його потім?
Чи є щось інше, крім збірки індексу, що могло б призвести до того, що операція масової копії поступово повільніше зростає, оскільки додається все більше записів? (Можливо, щось пов'язане з веденням журналу, хоча я б очікував, що масові операції не реєструються?)
Якщо насправді немає іншого способу підняти продуктивність, щоб опустити спочатку PK / індекс, то які дії можна зробити, щоб переконатися, що індекс не зникне повністю, тобто якщо втрачено з'єднання з базою даних середина процесу?