Улучшение производительности для массовой обработки в cx_Oracle - PullRequest
0 голосов
/ 09 апреля 2019

Проблема с производительностью при массовой загрузке данных в oracle с помощью cx_Oracle. кажется, подсказка добавления не работает с cx_Oracle или, по крайней мере, я не могу заставить его работать. любая помощь будет принята с благодарностью

Я пытался отправить 2 миллиона записей в Oracle в Oracle, используя cx_Oracle, но от оракула до оракула уходит 1,5 минуты, если я использую подсказку добавления, это занимает всего 20 секунд.

insertquery="""insert /*+ append parallel(XYZ,8) */ into XYZ(A,B,C,D,E,F,G,H, I,J,K,L,M,N,O,P,Q,R,S)             VALUES('abc',:B,'N',:D,:E,:F,:G,:H,:I,:J,:K,:L,:M,:N,:O,'MIG','MIG',{current_time},{current_time})""".format(current_time=current_time)


print("XYZ START",datetime.datetime.now())
trg_cur.prepare(insertquery)
trg_cur.executemany(None,entityList)'''

оставшееся время остается неизменным, если я оставлю подсказку в приложении или нет. Есть ли способ улучшить эту производительность, кроме потоков, я бы запустил это в несколько потоков, так как мои входные данные могут варьироваться до нескольких сотен миллионов строк, и мне нужно вставить эти данные в несколько таблиц

1 Ответ

0 голосов
/ 29 апреля 2019

с использованием append_Values ​​работало как заговор, а 40 секунд сократились до 10 секунд для отправки 1 миллиона записей

insertquery="""insert /*+ append_values parallel(XYZ,8) */ into XYZ(A,B,C,D,E,F,G,H, I,J,K,L,M,N,O,P,Q,R,S)             VALUES('abc',:B,'N',:D,:E,:F,:G,:H,:I,:J,:K,:L,:M,:N,:O,'MIG','MIG',{current_time},{current_time})""".format(current_time=current_time)

...