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

Consulta dejo de funcionar de un momento a otro.

Estas en el tema de Consulta dejo de funcionar de un momento a otro. en el foro de Mysql en Foros del Web. Hola, bueno amigos se me presento un problema con una consulta que tengo en una aplicacion esta aplicacion ya tiene funcionado algo de 3 meses, ...
  #1 (permalink)  
Antiguo 02/12/2009, 18:38
 
Fecha de Ingreso: junio-2008
Mensajes: 13
Antigüedad: 15 años, 10 meses
Puntos: 0
Consulta dejo de funcionar de un momento a otro.

Hola, bueno amigos se me presento un problema con una consulta que tengo en una aplicacion esta aplicacion ya tiene funcionado algo de 3 meses, de un momento a otra la aplicacion se comenzo a colgar en el cliente y colgaba al servidor la colgada era tan critica que tenia que reiniciar el servidor pa poder seguir trabajndo. bueno la consulta es un join de 2 tablas con la particularidad de que 2 campos de la primera tabla habla hacen referencia a 2 codigos diferentes de la segunda tabla (no se si me dejo entender) la persona que lo hizo utilizo un constructor de consultas y la consulta es la siguiente:

SELECT tbcabingresos.CODINGRESO,tbcabingresos.CODCOMPRA,t bcabingresos.CODSUBDIARIO,tbcabingresos.FECHCOMPRO , tbcabingresos.TIPODEPAGO,tbcabingresos.CODTIPCAMBI O,tbcabingresos.MONTOCAMBIO,tbcabingresos.CODPROVE E,tbanexo.ADESANE,tbcabingresos.CODTDOCUM, tbcabingresos.NUMDOCUM,tbcabingresos.FECHEMISION,t bcabingresos.FECHAVENCIM,tbcabingresos.SUBTOTAL,tb cabingresos.TASAIGV,tbcabingresos.TOTALPROVEE,tbca bingresos.CODTRANSPOR,tbanexo_1.ADESANE AS ADET,tbcabingresos.NUMEROGUIA,tbcabingresos.NUMERO FACTURA,tbcabingresos.BULTOS,tbcabingresos.CODORIG EN,tbcabingresos.CODTIPTRANS,tbcabingresos.CODTIPP ESO,tbcabingresos.PESOTOTAL,tbcabingresos.TOTALTRA NS,tbcabingresos.FECHAINGRESO,tbcabingresos.IDUSUA RIO,tbcabingresos.ESTADO From tbanexo tbanexo INNER JOIN tbcabingresos tbcabingresos ON tbanexo.ACODANE =tbcabingresos.CODPROVEE INNER JOIN tbanexo tbanexo_1 ON tbanexo_1.ACODANE = tbcabingresos.CODTRANSPOR Where (tbcabingresos.CODINGRESO ='13/12005') AND (tbcabingresos.FECHAINGRESO ='2009-12-01') group by tbcabingresos.CODINGRESO;

Como veran el select en la tabla tbcabingresos hay 2 campos (CODPROVEE,CODTRANSPOR) que estan contenidas en tbanexo pero son distintos codigos, esto estuvo funcionando normalmente pero de un momento sin que nadie lo toque dejo de Funcionar y la maquina se colgaba, a ver amigos si me pueden ayudar con esto de antemano muchas gracias.
  #2 (permalink)  
Antiguo 02/12/2009, 22:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta dejo de funcionar de un momento a otro.

Pongo aqí pongo aquí la consulta con una sintaxis un poco más simplificada:
Código sql:
Ver original
  1. SELECT
  2.   TCI.CODINGRESO,
  3.   TCI.CODCOMPRA,
  4.   TCI.CODSUBDIARIO,
  5.   TCI.FECHCOMPRO ,
  6.   TCI.TIPODEPAGO,
  7.   TCI.CODTIPCAMBIO,
  8.   TCI.MONTOCAMBIO,
  9.   TCI.CODPROVEE,
  10.   TA1.ADESANE,
  11.   TCI.CODTDOCUM,
  12.   TCI.NUMDOCUM,
  13.   TCI.FECHEMISION,
  14.   TCI.FECHAVENCIM,
  15.   TCI.SUBTOTAL,
  16.   TCI.TASAIGV,
  17.   TCI.TOTALPROVEE,
  18.   TCI.CODTRANSPOR,
  19.   TA2.ADESANE ADET,
  20.   TCI.NUMEROGUIA,
  21.   TCI.NUMEROFACTURA,
  22.   TCI.BULTOS,
  23.   TCI.CODORIG EN,
  24.   TCI.CODTIPTRANS,
  25.   TCI.CODTIPPESO,
  26.   TCI.PESOTOTAL,
  27.   TCI.TOTALTRANS,
  28.   TCI.FECHAINGRESO,
  29.   TCI.IDUSUARIO,
  30.   TCI.ESTADO
  31. FROM tbcabingresos TCI
  32.   INNER JOIN tbanexo TA1 ON TA1.ACODANE =TCI.CODPROVEE
  33.   INNER JOIN tbanexo TA2 ON TA2.ACODANE = TCI.CODTRANSPOR
  34. WHERE
  35.   (TCI.CODINGRESO ='13/12005') AND
  36.   (TCI.FECHAINGRESO ='2009-12-01')
  37. GROUP BY TCI.CODINGRESO;
En principio, no se ven defectos en la consulta, que por otro lado es demasiado simple.
Abrevié los alias usados pra permitir que se pueda leer mejor.
Yo por mi lado, cambié el orden de las tablas leídas para que la secuencia de lectura sea correcta (la tabla tbanexo es una tabla de relación, pero no es la que contiene los datos principales).
Lo que puede estar sucediendo es que existan demasiados datos en la tabla principal, y esto esté ocasionando problemas de performance. Habría que ver si creando índice sobre la fecha, esta consulta funciona un poco mejor.
Por otro lado no hay que descartar la posibilidad de que el servidor usado sea insficiente, ya sea para los datos, o para las conexiones concurrentes, si las hay-
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 03/12/2009, 09:22
 
Fecha de Ingreso: junio-2008
Mensajes: 13
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Consulta dejo de funcionar de un momento a otro.

Gracias por responder. Claro la consulta es demasiado sencilla como para que me de complicaciones, es por eso que mi desconcierto es aun mayor. Dudo que sea problemas de lentitud en la consulta por cantidad de data pues la tabla tbcabingresos solo tiene 1000 registros y la tabla Tbanexo 1360 registros y lo del cuelgue fue de un momento a otro no de una manera gradual como deberia darse, no hubo un aumento drastico de registros en ese dia como para justificar dicha lentitud. Por otra parte tengo otras consultas mas conplejas con joins de mas tablas y con mas de 30000 registros en total y no tengo problemas de ningun tipo. El servidor es una maquina con placa DFI x48 ,proce Core 2 duo E6600,2gb de Ram y bueno el disco duro es uno normalito no mas, no creo que se necesita mas. En cuanto a las conexiones concurrentes tampoco creo que sea eso pues dicho incidente me paso hac 2 dias a esos de las 11 de la noche y en ese momento solo habia 2 maquinas conectadas al server. por ahora he roto el join y obtengo los 2 datos esos con otros 2 consultas eso lo hice por ahora hasta encontrar el problema. lo mas curioso es que reduje la consulta para ver si me arrojaba resultados y grande fue mi sorpresa que se demora un poco pero no me arroja resultados me sale "Empty set" esta es la otra consulta que reduje:

SELECT tbcabingresos.CODINGRESO,tbcabingresos.CODPROVE E,tbanexo.ADESANE,tbcabingresos.CODTDOCUM, tbcabingresos.NUMDOCUM From tbanexo tbanexo INNER JOIN tbcabingresos tbcabingresos ON tbanexo.ACODANE =tbcabingresos.CODPROVEE Where (tbcabingresos.CODINGRESO ='13/12005') AND (tbcabingresos.FECHAINGRESO ='2009-12-01') group by tbcabingresos.CODINGRESO;

Ahora para probar le quite el campo tbanexoa.adesane y quite el join y me muestra un registro, me fijo en el campo codprovee devuelto y busco en tbanexo el campo acodane con ese valor y veo que si existe. entonces la pregunta es, si existe el codigo de proveedor en tbanexo,¿ por que no me muestra ese registro el select con el join???.

A ver si me dan una manito muchas gracias.
  #4 (permalink)  
Antiguo 03/12/2009, 09:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta dejo de funcionar de un momento a otro.

Primero unos consejos para que podamos leer mejor las cosas:
Por un lado, trata de usar los tags que te proporciona el boton que ven con el "#" verde, poniendole SQL, si no puedes, usa la cita. De esa forma en el post el bloque de código se verá separado del resto.
Luego, trata de estructurar la forma en que escribes la sentencia en el post, para facilitar la lectura. Tal y como la pones, hay que andar buscando el código con mucho cuidado, poerque no se alcanza a entender bien.
En cuanto al código, ten en cuenta que el orden de lectura de las tablas es importante en los JOIN (más aún si usas LEFT o RIGHT), de modo que no pongas una tabla accesoria como primera tabla. Pon la tabla que contiene los datos primarios, en este caso tbcabingresos .
Además, el objetivo de usar alias es cambiar el nombre de la tabla por otro, para facilitar la escritura de código y controlar que no haya problemas de nombres de campos o tablas. No tiene sentido que como alias de tbcabingresos pongas tbcabingresos ... ¿ o sí?

Yendo al problema, si esta sentiencai:
Código sql:
Ver original
  1. SELECT
  2.   TBI.CODINGRESO,
  3.   TBI.CODPROVE E,
  4.   TA1.ADESANE,
  5.   TBI.CODTDOCUM,
  6.   TBI.NUMDOCUM
  7. FROM tbcabingresos TBI INNER JOIN tbanexo TA1 ON TA1.ACODANE = TBI.CODPROVEE
  8. WHERE
  9.   (TBI.CODINGRESO ='13/12005')  AND (TBI.FECHAINGRESO ='2009-12-01')
  10. GROUP BY TBI.CODINGRESO;
te devuelve un registro, pero no te lo devuelve si cruzas
así:
Código sql:
Ver original
  1. INNER JOIN tbanexo TA1 ON TA1.ACODANE =TCI.CODPROVEE
  2.   INNER JOIN tbanexo TA2 ON TA2.ACODANE = TCI.CODTRANSPOR
eso puede implicar que no hay un registro que pueda cumplir con eso y al mismo tiempo con esto:
Código sql:
Ver original
  1. (TCI.CODINGRESO ='13/12005') AND
  2.   (TCI.FECHAINGRESO ='2009-12-01')
, caso en el cual hay que revisa ese registro que te devuelve para ver si se da que pueda cumplirlo.
Por las dudas, yo probaría esto:
Código sql:
Ver original
  1. SELECT
  2.   TCI.CODINGRESO,
  3.   TCI.CODCOMPRA,
  4.   TCI.CODSUBDIARIO,
  5.   TCI.FECHCOMPRO ,
  6.   TCI.TIPODEPAGO,
  7.   TCI.CODTIPCAMBIO,
  8.   TCI.MONTOCAMBIO,
  9.   TCI.CODPROVEE,
  10.   IFNULL(TA1.ADESANE,'') ADESANE,
  11.   TCI.CODTDOCUM,
  12.   TCI.NUMDOCUM,
  13.   TCI.FECHEMISION,
  14.   TCI.FECHAVENCIM,
  15.   TCI.SUBTOTAL,
  16.   TCI.TASAIGV,
  17.   TCI.TOTALPROVEE,
  18.   TCI.CODTRANSPOR,
  19.   IFNULL(TA2.ADESANE, '') ADET,
  20.   TCI.NUMEROGUIA,
  21.   TCI.NUMEROFACTURA,
  22.   TCI.BULTOS,
  23.   TCI.CODORIG EN,
  24.   TCI.CODTIPTRANS,
  25.   TCI.CODTIPPESO,
  26.   TCI.PESOTOTAL,
  27.   TCI.TOTALTRANS,
  28.   TCI.FECHAINGRESO,
  29.   TCI.IDUSUARIO,
  30.   TCI.ESTADO
  31. FROM tbcabingresos TCI
  32.   LEFT JOIN tbanexo TA1 ON TA1.ACODANE =TCI.CODPROVEE
  33.   LEFT  JOIN tbanexo TA2 ON TA2.ACODANE = TCI.CODTRANSPOR
  34. WHERE
  35.   (TCI.CODINGRESO ='13/12005') AND
  36.   (TCI.FECHAINGRESO ='2009-12-01')
  37. GROUP BY TCI.CODINGRESO;
para ver si el problema es que no hay coincidencias en algúno de los códigos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 03/12/2009, 15:44
 
Fecha de Ingreso: junio-2008
Mensajes: 13
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Consulta dejo de funcionar de un momento a otro.

Creo que no me explique bien, ahi va de nuevo espero que esta vez se entienda, como habras visto el codigo de un select sin join es este:
Código :
Ver original
  1. SELECT
  2.    TBI.CODINGRESO,
  3.    TBI.CODPROVEE,
  4.    TBI.CODTDOCUM,
  5.    TBI.NUMDOCUM
  6. FROM tbcabingresos TBI
  7.    WHERE
  8.    (TBI.CODINGRESO ='13/12005')  AND (TBI.FECHAINGRESO ='2009-12-01')
  9.    GROUP BY TBI.CODINGRESO;
Este select me devuelve un registro, entonces reviso el Codprovee devuelto de esta consulta para verificar que se encuentre en la tabla Tbanexo y me doy con la sorpresa que si existe. la consulta en la cual hago el join es la siguiente:
Código :
Ver original
  1. SELECT
  2.     TBI.CODINGRESO,
  3.     TBI.CODPROVE E,
  4.     TA1.ADESANE,
  5.     TBI.CODTDOCUM,
  6.     TBI.NUMDOCUM
  7. FROM tbcabingresos TBI INNER JOIN tbanexo TA1 ON TA1.ACODANE =       TBI.CODPROVEE
  8.     WHERE
  9.     (TBI.CODINGRESO ='13/12005')  AND (TBI.FECHAINGRESO ='2009-12-01')
  10.     GROUP BY TBI.CODINGRESO;
Esta es la que no me devuelve ningun registro lo peor de todo es que se toma su tiempo siendo una consulta tan simple y donde se involucran pocos registros. la verdad ya no se que hacer esto es muy extraño.
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 03:44.