Я думал, что уже никому не интересно тратить на меня время, поэтому не стал отписывать. Но сегодня тестировал этот момент.
В sqlplus все быстрее. В крайний раз вот так вышло по времени:
- 2.507s - sqlplus
- 22.094412s - DBI
Причем я для sqlplus заведомо не честно время замерял (не знаю нужных флагов, замерял время через time sqlplus и это real показатель) т.е. сам запрос еще быстрее выполняться должен. А у DBI я цифры беру из вывода профилировщика, и там только на саму операцию fetchall уходит эти волшебные 22 секунды.
А вот так вышло когда сделал запрос с сервера максимально близкого к БД:
- 0.143s - sqlplus
- 0.109958s - DBI
Собственно здесь и видна разница между честным выводом времени у DBI и нечестным как я сделал для sqlplus. Если через time проверить время выполнения перлового скрипта, то справедливость восстанавливается и у
test.pl время 0.168s, что чуть дольше чем у вызова sqlplus.
У DBI почему-то такой разрыв огромный именно когда БД далеко от самого приложения (у sqlplus все в этом плане лучше).
Ощущение, что DBI порционно забирает данные, т.е. ходим много раз до БД и теряем из-за этого много времени. Перманентно изучаю доку по dbi, но пока не нашел этот момент (или проглядел).