Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Expertos pl sql

Estas en el tema de Expertos pl sql en el foro de Oracle en Foros del Web. Hola a todos, tengo un problema muy grande y espero puedan ayudarme. Tengo un paquete que arma una cadena HTML dinámicamente, es decir, tengo una ...
  #1 (permalink)  
Antiguo 06/04/2009, 14:23
 
Fecha de Ingreso: noviembre-2006
Mensajes: 33
Antigüedad: 17 años, 5 meses
Puntos: 0
Expertos pl sql

Hola a todos, tengo un problema muy grande y espero puedan ayudarme.

Tengo un paquete que arma una cadena HTML dinámicamente, es decir, tengo una variable de tipo CLOB que va armando el html con datos que van siendo adquiridos de diferentes lados como son cursores o parámetros que me envían.

Después de armar la cadena, hago un insert sobre una tabla que tiene un campo clob y ahí es donde le paso la variable clob con el html que armé.

algo así:

insert into table X (fol, cuerpo, dato) values (1, VariableCLob, 2);

donde en la estructura de la tabla el campo "cuerpo" es de tipo CLOB y mi variable que arma la cadena HTML es del mismo tipo.

esto tenía más de un año en ambiente productivo, sin embargo, de un tiempo para acá se ha estado alentando el proceso considerablemente y lo que le llevaba mucho menos de 1 segundo ahora toma casi 6.

alguno de mis compañeros (no digo que sea lo correcto) me dijo que primero tenía que hacer el insert con un empty_clob y después hacer un update sobre el mismo campo.

algo así:

insert into tableX (fol, cuerpo, dato) values (1,empty_clob, 2);
update tableX set cuerpo = VariableCLob where fol = 2;

pero el resultado sigue siendo el mismo.

Cabe destacar que, la tabla tiene un trigger colgado que replica a otro lado y pensé que era eso... pero deshabilité el trigger y sigue con lo mismo.

Alguna idea??? ojala puedan ayudarme estoy súper desesperada.

Gracias.
  #2 (permalink)  
Antiguo 06/04/2009, 15:31
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Expertos pl sql

Hay muchas razones para que un proceso empiece a funcionar lento con el tiempo, de todos modos, podemos empezar con el código, si te parece lo puedes postear. También es importante la versión de la base de datos.

Saludos
  #3 (permalink)  
Antiguo 06/04/2009, 15:51
 
Fecha de Ingreso: noviembre-2006
Mensajes: 33
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Expertos pl sql

bueno el código es bastante extenso... porque obtengo información de varios cursores, mismos que, he probado y están rápidos...

también le hice un trace al paquete y solamente me marca la lentitud en el insert que es el siguiente:

INSERT INTO XX
(cve_entidad,
fol_confirmacion,
cuerpo,
folio_factura)
VALUES
('X',
2,
vlCuerpoHTML, -- mi variable de tipo CLOB que trae el html armado
null,
null);


cabe destacar que el html es de poco peso, realmente no pesa mucho.

Podría pasar el código por correo.... o msn... para no pegar tanta cosa por aquí.

Puedo???

ojala que si, dime y te mando un mensaje privado con mi correo o tú enviamelo.

Te agradezco infinitamente

gracias.
  #4 (permalink)  
Antiguo 06/04/2009, 16:23
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Expertos pl sql

Si ya hiciste un trace sobre el código y la única parte lenta es el insert, además de que el proceso antes funcionaba bien y con el tiempo fue cada vez mas lento, lo más probable es que la lentitud se deba a la dimensión de memoria de la instancia,

¿Cual es el resultado de lo siguiente?

Código:
SQL> show parameter sga
SQL> show parameter pga
SQL> show parameter workarea
Código:
SQL> select * from v$version;
Código:
select logging, in_row from dba_lobs where table_name = 'XX';
Donde table_name = 'XX' es el nombre de la tabla donde se inserta el HTML.

¿Estás ejecutando estadísticas sobre la base de datos?

Saludos
  #5 (permalink)  
Antiguo 06/04/2009, 16:42
 
Fecha de Ingreso: noviembre-2006
Mensajes: 33
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Expertos pl sql

de los primeras sentencias no me dejó, me dice table or view not exist.

después de esos 3 shows, la instrucción que sigue

me respondió esto:

BANNER
----------------------------------------------------------------
Oracle9i Release 9.2.0.4.0 - 64bit Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Solaris: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production

la última instrucción no me dejó correrla supongo que por razones d permisos.

No sé si se ejecuten estadisticas sobre la base de datos

la versión de la Bd es 9.2.0.4.0

ya estoy realmente desesperada :(
  #6 (permalink)  
Antiguo 06/04/2009, 16:45
 
Fecha de Ingreso: noviembre-2006
Mensajes: 33
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Expertos pl sql

ok pude correr la última instrcción en otra instancia:

y me salió:

LOGGING IN_ROW
YES YES


gracias matanga
  #7 (permalink)  
Antiguo 07/04/2009, 00:59
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Expertos pl sql

No se si esto funcionara con los campos tipo CLOB ( no suelo trabajar con CLOB's ), pero yo tuve un problema parecido con una tabla de menos de 20000 registros que al hacer un SELECT * FROM TABLA, se me demoraba 9-10 segundos.
El problema es que debido a unas pruebas que estaba haciendo con inserts y deletes, la tabla estaba super fragmentada. El problema lo resolví con un simple ALTER TABLE MI_TABLA MOVE;

Pero ya te digo, no sé si esto funcionara en tablas com campos CLOB ( intuyo que no, pero todo es probar ¿ no ? )
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:20.