Oracle Data Transfer Rate Based on Rows Instead of Data Size

oracleoracle-11gssis

Is there a setting in Oracle 11g that can throttle the rows/second being pulled from the db?

Our data loads from Oracle are really slow. It does not seem to matter whether its OPENQUERY, SSIS, or SQL Developer. I ran some tests and found that as the row number increases, the time to transfer increases in a linear fashion (100K rows in 90 seconds, 1M rows in 903 seconds). I then ran another test where the row count remained the same (500K) but the amount of data in each row increased with each trial. For this test, the time was almost flat (~480s), even though the amount of data increased from 5MB to 45MB over 10 trials.

The issue does not seem to be a throughput (VPN tunnel) problem since data speed increased with data/row.

So, my question is, what in Oracle would be causing this consistent 1000 rows/sec value, regardless of the amount of data in each row?

We don't manage the Oracle db, but I'm hoping to go back to the dbas with some ideas to speed up our month end loads.

Test 1: Increase Row Count, Maintain Data/Row
Test 1: Increase Row Count, Maintain Data/Row

Test 2: Maintain Row Count, Increase Data Per Row
Test 2: Maintain Row Count, Increase Data Per Row

Best Answer

More likely limited by the fetch size, which is a client side setting.

For example: https://xzwang.wordpress.com/2013/06/20/oracle-ole-db-performance/

Quoting some content of the blog post:

Batch size controls how many rows SSIS retrieves with each “batch”. After retrieving all the rows in a batch, SSIS signals to Oracle that it is ready for another batch. Of course, network latency is introduced during this signaling process. Thus, decreasing the number of total batches also decreases the number of round-trips SSIS has to make. The default batch size is only 100; increasing this to a reasonable number should boost performance.

And:

https://scottadamsbi.wordpress.com/2010/11/02/sql-server-analysis-services-and-oracle-ole-db/

If you are experiencing the same or similar issue, then you may wish to experiment with different settings for the FetchSize parameter on the Oracle OLE DB connection string e.g. Data Source=ORACLE.WORLD;User ID=User;FetchSize=100000;. The default setting is FetchSize=100. This means that the Oracle OLE DB provider will request and fetch 100 rows of data. SQL Server will then read 100 rows of data. Once all 100 rows have been read, the Oracle provider will request another 100 rows of data. This will continue untill all rows are read.