У меня есть один рабочий процесс в Informatica Powercenter для передачи данных между Informix и Oracle. Для выполнения этой работы Informatica требуется около 20 секунд (6 таблиц, ежедневные обновления, отфильтрованные по текущей дате).
Я пытался добиться того же в Python, используя JDBC... И это очень медленно...
Например, первая из этих таблиц — это около 100 000 строк в день — в Python выборка даже 10 000 строк занимает около минуты.
Это нормально, что Informatica намного быстрее? Могу ли я как-то ускорить свой скрипт Python?
пример:
import jaydebeapi
conn = jaydebeapi.connect("com.informix.jdbc.IfxDriver",
"jdbc:informix-sqli://server:port/cms:INFORMIXSERVER=x;user=x;password=x",
["chancel", "chancel"],
r"C:\app\informix-jdbc-complete-4.50.4.1.jar")
curs = conn.cursor()
curs.execute("select * from table")
curs.fetchall()
Как уже упоминалось здесь, может быть много причин, по которым вы видите разницу в производительности между двумя драйверами. Попробуйте поиграться с FET_BUF_SIZE (например, добавив «fet_buf_size=32000» в строку подключения), это должно улучшить ситуацию. Также SQLIDEBUG/SQLIPRINT можно использовать, чтобы узнать, как клиенты (Informatica и JDBC) выполняют SQL-запрос, и дать вам представление о том, как его оптимизировать.
Причиной «Почему Informatica быстрее» может быть несколько факторов:
Спасибо! Я попробовал ODBC, и в моем случае он оказался намного быстрее, чем JDBC, это все, что мне нужно :)
Каково общее количество строк в этой таблице? Python загрузит все это в память, возможно, сбрасывая на диск, что может сильно замедлить скрипт.