On 8/15/2017 8:09 AM, Mannott, Birgit wrote: > I'm using solr 6.6.0 and I have to do a complex data import from an oracle db > concerning 3.500.000 data rows. > For each row I have 15 additional entities. That means that more than 52 > Million selects are send to the database. > For every select that is done I optimized the oracle execution path by > creating indizes. > The execution plans are ok. > But the import still lasts 12 hours.
I think the reason it takes 12 hours is because there are 52 million SELECT statements. That many statements over 12 hours is an average of 1200 per second. This sounds like pretty good database performance. > Is there a way to execute a command like "ALTER SESSION SET cursor_sharing = > FORCE;" after getting the connection for processing an entity? I think that most JDBC drivers (by default) don't allow multiple SQL statements to be sent in a single request, so commands like "SELECT FOO; SELECT BAR" won't work. The idea behind denying this kind of command is protection against SQL injection attacks. There is likely a JDBC URL parameter for the Oracle driver that would allow that ... and if there is, then you could add that to the connection URL in the DIH config to allow putting the ALTER SESSION statement before SELECT in your DIH entity. The Oracle driver might also have a JDBC URL parameter to turn on the cursor sharing you're interested in. That would be the best way to handle it, if that is an option. You're going to need to consult Oracle documentation or an Oracle support resource to find out what URL parameter options there are for their driver. I have near zero experience with Oracle databases, but I suspect that even with cursor sharing, you're still going to have the sheer number of SELECT statements as a bottleneck. If there is a performance improvement, it probably won't be dramatic. Thanks, Shawn