Ver Mensaje Individual
  #8 (permalink)  
Antiguo 19/11/2013, 14:40
Link_OOT
 
Fecha de Ingreso: noviembre-2008
Mensajes: 47
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Actualización muy lenta MySQL JPA

Cita:
Iniciado por MarronsDispatcher Ver Mensaje
Código Java:
Ver original
  1. Caused by: java.lang.StackOverflowError

Normalmente, aunque puede haber más motivos, se suele producir cuando te llamas a ti mismo, y lo por lo tanto, no obtienes nunca salida a tu método. (Debugear suele ser la mejor opción).


Saludos.
He cortado la excepción porque era muy larga y eran todo clases que estaban en el paquete de las dos últimas líneas.

Cita:
Iniciado por MarronsDispatcher Ver Mensaje

Código Java:
Ver original
  1. LEFT OUTER JOIN Cliente t1 ON t0.DNICLiente = t1.cif WHERE (t0.DNICLiente = ?) [params=(String) 12345678Z

¿Esa query corresponde a la sentencia previa de JPA a la merge que me comentabas antes? En la clausula WHERE filtras por un String, cualquier query que filtre por un String, suele penalizar mucho.

Esa LEFT OUTER JOIN...que tipo de relación es ? one to many? one to one? Sin tener ni idea de tu respuesta, normalmente el rendimiento mejora con una LEFT OUTER JOIN FETCH, nos evitamos que JPA realice sub-consultas por cada registro de la relación.

Saludos.
Tengo que actualizar ese registro, que esta enlazado a un cliente en una relación One to One. Para buscar el cliente busco por DNI que tiene que ser string.

Estoy intentando cambiar el persistence.xml para usar JTA, a ver si consigo que mejore el rendimiento

Usando RESOURCE_LOCAL en el persistence.xml he lanzado una consulta "global" contra la tabla registros (también tiene sobre 40.000 filas), si la lanzo desde un gestor de BBDD como HeidiSQL tarda en ejecutarse 0.047seg, sin embargo, en el servidor obtengo los siguientes resultados:

Codigo que se ejecuta:
Código:
                                q = em.createQuery("SELECT pro FROM Registro pro WHERE pro.IDEstado NOT IN (20)");
				long tiempo1=System.currentTimeMillis();
				List<Registro> lista = q.getResultList();
				System.out.println("Tiempo: " +Long.toString(System.currentTimeMillis()-tiempo1));
El resultado obtenido es:

Código:
11445  GestionServidorDefinitivo  TRACE  ["http-bio-8080"-exec-3] openjpa.jdbc.SQL - <t 811381485, conn 245066937> executing prepstmnt 272440927 SELECT t0.IDRegistro, t0.IDEstado, t0.NLineasFijo, t0.NLineasMovil, t1.cif, t1.codigoPostal, t1.comentarios, t1.concertador, t1.direccion, t1.email, t1.gerente, t1.id, t1.lineasFijo, t1.lineasMovil, t1.localidad, t1.nombreRazonSocial, t1.numeroCuenta, t1.operadorFijo, t1.operadorMovil, t1.permanenciaFijo, t1.permanenciaMovil, t1.personaContacto, t1.provincia, t1.segmento, t1.telefono, t1.telefonoContacto, t1.telefonos, t0.comentarios, t0.concertador, t0.fechaCreacion, t0.fechaModificacion, t0.nombreEstado, t0.operadorFijo, t0.operadorMovil, t0.origen, t0.permanenciaFijo, t0.permanenciaMovil FROM registros t0 LEFT OUTER JOIN Cliente t1 ON t0.DNICLiente = t1.cif WHERE (NOT (t0.IDEstado = ?) AND t0.IDEstado IS NOT NULL) [params=(long) 20]
11686  GestionServidorDefinitivo  TRACE  ["http-bio-8080"-exec-3] openjpa.jdbc.SQL - <t 811381485, conn 245066937> [241 ms] spent
nov 19, 2013 10:51:52 PM es.servicioweb.main.ServicioWeb contarRegistrosCif
INFO: CLIENTES LISTADOS
Tiempo: 7800
Hay algo que me esta ralentizando muchísimo la aplicación, pero no se me ocurre que puede ser
Saludos.

Última edición por Link_OOT; 19/11/2013 a las 15:51 Razón: Nueva informacion