RE: speeding varray queries in DBD::Oracle

[email protected] (John Scoles)
Newsgroups perl.dbi.users
Message-ID <[email protected]>
First I would upgrade to 1.24 that would speed things up conciderably as it can do more than on fow per round trip fetch.

 

The problem with VARRAY is that you have to iterate over the arrary at each select to build up the perl array.  While it is done in OCI (C) it will still take time.  Ther is no supper magic in PERL, or OCI to get the varray as a big chunk.

 

In fact a Varry, table and object are not realy what most people thing they are.  They are just a predfined link (join) from one table to, in the case of VARRY, another table of one type,  Oracle just hides the nasty relational db stuff from you the user.

 

1600 row is not a very large select are you having speed problems??

 

It could ber a ver large select if you are doing 1600*200+1600*200 for the two varrys.  The internal nastyness of the varry in OCI is unknown to me.  I would not be surprised if OCI is actully makeing a round trip to the varry table for each of the fields that it is returning.  

 

The actual process in OCI for filling the varray is 

 

get object

get itrator for object

iterate over object

get and then copy contents of object to perl   
 

It wold not surprise me that the iteration and get part does a hidden round trip to the DB.

 

according to the docs it might. Not way to tell for sure except by a tracke.

 

 

There may be some hope here as I see in the doc that one can cache the object though it is not clear how.  That would take a little time

 

By the way you seem to be the only one using varray would love to talk to you off line n how you use them.

 

Cheers

John Scoles 


From: [email protected]
To: [email protected]
Date: Fri, 30 Apr 2010 16:12:20 -0700
Subject: speeding varray queries in DBD::Oracle





We have a lot of similar queries (see attached) that return a non-unique identifier and two varrays.  One varray is a timestamp array and the other is a float value array.  See attached SQL.  We are currently returning on the order of 1600 rows.  We would like to change the settings in DBD::Oracle 1.23 (or possibly upgrade), possibly change the queries to use table functions (how?).  Our DBA suggested using “set arraysize”  how do you do that from DBD::Oracle?  We have VARRAY(200) for our varrays.
 
Thanks!
 
John Carlson 		 	   		  
_________________________________________________________________
Hotmail & Messenger. Get them on your phone now.
http://go.microsoft.com/?linkid=9724463
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.