parametrizar el numero de fetch en la devolucion

chemian
16 de Enero del 2006
Hola a todos,

Tengo una queri sencilla del estilo

SELECT CAMPO1,CAMPO2,CAMPO3....CAMPO20 FROM TABLA WHERE CAMPON=VALOR;

esta me devuelve 500 registros, y para ello me hace 35 fetch.
Mi pregunta es ¿ Como puedo hacer para disminuir el numero de fetch, ya que el tiempo que se lleva la en espera SQLNET from client es de unos 5 segundos en cada fetch?

Esta es la traza de la queri:

call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.01 0.00 0 2 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 35 0.01 0.01 0 82 0 500
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 37 0.02 0.01 0 84 0 500

Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 23

Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 35 0.00 0.00
SQL*Net message from client 35 70.38 245.56

Muchas gracias.

a
16 de Enero del 2006
primero, lo que espera para los 35 fetch son 0.01 segundos.
segundo, si lo has hecho desde el sqlplus el parámetro que tienes que subir es arraysize.
tercero, yo considero que de todas formas es una tonteria, el tiempo que tarda no es significativo y además, puede ser que para las select que devuelvan menos de 15 filas (ahora mismo que será el valor de tu arraysize por defecto) perderás ancho de banda ya que preparás espacio para más filas cuando en realidad solo vas a devolver menos de 15.

me explico?

chemian
16 de Enero del 2006
Gracias por tu respuesta. lo que yo he visto y por lo que queria minimizar el numero de fetch es porque viendo el fichero de traza sin tkprof, despues de cada fetch hay un wait que tarda 5 segundos de media, y creo que si minimizo el tiempo de fetch, minimizo las esperas.

este es el fichero de traza sin tkprof:

EXEC #1:c=0,e=76,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=6579539804957
WAIT #1: nam=\\'SQL*Net message to client\\' ela= 6 p1=1413697536 p2=1 p3=0
FETCH #1:c=0,e=104,p=0,cr=4,cu=0,mis=0,r=1,dep=0,og=4,tim=6579539805347
WAIT #1: nam=\\'SQL*Net message from client\\' ela= 1510 p1=1413697536 p2=1 p3=0
WAIT #1: nam=\\'SQL*Net message to client\\' ela= 1 p1=1413697536 p2=1 p3=0
FETCH #1:c=0,e=188,p=0,cr=2,cu=0,mis=0,r=15,dep=0,og=4,tim=6579539807216
WAIT #1: nam=\\'SQL*Net message from client\\' ela= 8140240 p1=1413697536 p2=1 p3=0
WAIT #1: nam=\\'SQL*Net message to client\\' ela= 4 p1=1413697536 p2=1 p3=0
FETCH #1:c=0,e=332,p=0,cr=2,cu=0,mis=0,r=15,dep=0,og=4,tim=6579547947980
WAIT #1: nam=\\'SQL*Net message from client\\' ela= 5884175 p1=1413697536 p2=1 p3=0
WAIT #1: nam=\\'SQL*Net message to client\\' ela= 4 p1=1413697536 p2=1 p3=0
FETCH #1:c=0,e=330,p=0,cr=2,cu=0,mis=0,r=15,dep=0,og=4,tim=6579553832720
WAIT #1: nam=\\'SQL*Net message from client\\' ela= 5755052 p1=1413697536 p2=1 p3=0
WAIT #1: nam=\\'SQL*Net message to client\\' ela= 4 p1=1413697536 p2=1 p3=0

no te pongo todos los fetch porque son 35, y los valores son muy similares.

Igual lo que esta pasando es que no estoy interpretando bien el fichero.
Muchas gracias por tu interes.

a
16 de Enero del 2006
puede ser problema de red, no lo estás lanzando en la propia máquina no?
revisa el sqlnet porque hay unos parámetros el SDU y TDU que te podrían ayudar a hacer menos viajes por la red también....