Lukas Eder shows the performance cost of doing row-by-row data retrieval:
The obvious difference between the JDBC benchmark and the PL/SQL one is the fact that the JDBC call has to traverse a vast amount of logic, APIs, “barriers” between the JVM and the Oracle kernel before it can actually invoke the really interesting part. This includes:
- JVM overhead
- JDBC logic
- Network overhead
- Various “outer” layers inside the Oracle database
- Oracle’s API layers to get into the SQL and PL/SQL execution engines
- The actual code running in the PL/SQL engine
In Toon’s talk (which again, you should definitely watch), the examples are running SQL code, not PL/SQL code, but the results are the same. The actual logic is relatively cheap inside of the database (as we’ve seen in the PL/SQL only benchmark), but the overhead is significant when calling database logic from outside the database.
Thus: It is very important to minimise that overhead
This particular example focuses on Oracle and JDBC, but it certainly applies to other database platforms and distributed architectures.