Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Tiempo de ejecucion excedido...

Estas en el tema de Tiempo de ejecucion excedido... en el foro de PHP en Foros del Web. Ya se el el titulo parece ser facil de resolver pero creanme que no lo es..., me esta sucediendo lo siguiente quiero actualizar el campo ...
  #1 (permalink)  
Antiguo 05/10/2012, 15:32
 
Fecha de Ingreso: septiembre-2012
Ubicación: Norte de Santander
Mensajes: 127
Antigüedad: 11 años, 7 meses
Puntos: 1
Exclamación Tiempo de ejecucion excedido...

Ya se el el titulo parece ser facil de resolver pero creanme que no lo es...,
me esta sucediendo lo siguiente quiero actualizar el campo de una table de una base de datos desde otra base de datos... ya tengo el script que cumple con la funcion el problema viene cuando intento correr el script, pues las bases de datos que manejo son inmensamente grandes una posee como 250.000 registros y esta en aumento y la otra va en 1.200 y aumentando, entonces cuando se intenta recorrer tablas tan grandes se excede el tiempo de ejecucion pero ya probe modificando el php.ini la linea de max_execution_time y no funciono ademas lo describen como no conveniente entonces me encontre con otro agregar la funcion void set_time_limit(0) pero igual no dio resultado...

Agradeceria mucho su ayuda....
  #2 (permalink)  
Antiguo 05/10/2012, 15:55
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Tiempo de ejecucion excedido...

¿void?

Pues yo manejo tablas de más de 4 millones de registros en minutos... y no es por presumir, si no que con 250,000 o tienes un serio problema de recursos o un serio problema de optimización.

¿Por qué tienes que recorrer las tablas? quizá si indicas qué procesos haces se te puede recomendar alguna optimización.

Por cierto, el set_time_limit sólo funciona cuando php está configurado para permitirlo, usualmente los host no lo permiten, a menos que rentes o sea tuyo el servidor....
  #3 (permalink)  
Antiguo 05/10/2012, 15:59
 
Fecha de Ingreso: septiembre-2012
Ubicación: Norte de Santander
Mensajes: 127
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Tiempo de ejecucion excedido...

<?php

include("../conexionesBD/conexion.php");

$rs = mysql_query("SELECT * FROM actaf WHERE nmatricula = 0");
if (mysql_num_rows($rs)>0){
while($registro = mysql_fetch_assoc($rs)){

$rf = mysql_query("SELECT * FROM sii_11.mreg_est_matriculados");

while($fila = mysql_fetch_assoc($rf)){
if($registro["cedula"] == $fila["numidprop"] and $fila["estmatricula"] = "MA" and $fila["fecmatricula"] >= "2012/08/01"){
$q="UPDATE actaf SET
nmatricula = '".$fila['matricula']."',
fecha = '".$fila['fecmatricula']."'
WHERE cedula = '".$fila['numidprop']."'
";
mysql_query($q,$link) or die (mysql_error());
}
}
}
}

?>

Como puedes ver lo que quiero es que el script tome el dato del campo matricula en la base de datos sii y lo actualice en la base de datos sif pero como es de prueba lo estoy manejando en un entorno local no se si sera por eso pero siempre que lo ejecuto excedo el tiempo de ejecucion...te agradeceria ma dieras una respuesta ya que creo que tienes bastante experiencia con bases de datos.
  #4 (permalink)  
Antiguo 05/10/2012, 16:59
 
Fecha de Ingreso: septiembre-2012
Ubicación: Norte de Santander
Mensajes: 127
Antigüedad: 11 años, 7 meses
Puntos: 1
Exclamación Respuesta: Tiempo de ejecucion excedido...

Por fa una ayuda ya deje el codigo y explique un poco mi situacion.....
  #5 (permalink)  
Antiguo 05/10/2012, 19:11
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Tiempo de ejecucion excedido...

Definitivamente es un problema de optimización, porque en cada iteración en el while de $registro = mysql_fetch_assoc($rf) lees toda una tabla y recorres los registros para ver si cumplen condiciones, eso deberías hacerlo desde la consulta:

Código PHP:
Ver original
  1. include("../conexionesBD/conexion.php");
  2.  
  3. $rs = mysql_query("SELECT * FROM actaf WHERE nmatricula = 0");
  4. // El siguiente if no es necesario, si no hay resultados no entrará al while
  5. // if (mysql_num_rows($rs)>0){
  6. while($registro = mysql_fetch_assoc($rs)){
  7.     // En esta consulta necesitas un filtro
  8.     // WHERE numidprop = $registro['cedula'] and estmatricula... bla bla bla
  9.    $rf = mysql_query("SELECT * FROM sii_11.mreg_est_matriculados");
  10.  
  11.     while($fila = mysql_fetch_assoc($rf)){
  12.         // El siguiente if no es necesario
  13.         // if($registro["cedula"] == $fila["numidprop"] and $fila["estmatricula"] = "MA" and $fila["fecmatricula"] >= "2012/08/01"){
  14.             $q="UPDATE actaf SET
  15.                nmatricula = '".$fila['matricula']."',
  16.                fecha = '".$fila['fecmatricula']."'
  17.                WHERE cedula = '".$fila['numidprop']."'
  18.             ";
  19.              mysql_query($q,$link) or die (mysql_error());
  20.          // } // cierre de if no necesario
  21.     } // fin while fila
  22. } // fin while registro
  23. // } cierre de primer if no necesario
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 08/10/2012, 08:23
 
Fecha de Ingreso: septiembre-2012
Ubicación: Norte de Santander
Mensajes: 127
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Tiempo de ejecucion excedido...

Cita:
Iniciado por Triby Ver Mensaje
Definitivamente es un problema de optimización, porque en cada iteración en el while de $registro = mysql_fetch_assoc($rf) lees toda una tabla y recorres los registros para ver si cumplen condiciones, eso deberías hacerlo desde la consulta:

Código PHP:
Ver original
  1. include("../conexionesBD/conexion.php");
  2.  
  3. $rs = mysql_query("SELECT * FROM actaf WHERE nmatricula = 0");
  4. // El siguiente if no es necesario, si no hay resultados no entrará al while
  5. // if (mysql_num_rows($rs)>0){
  6. while($registro = mysql_fetch_assoc($rs)){
  7.     // En esta consulta necesitas un filtro
  8.     // WHERE numidprop = $registro['cedula'] and estmatricula... bla bla bla
  9.    $rf = mysql_query("SELECT * FROM sii_11.mreg_est_matriculados");
  10.  
  11.     while($fila = mysql_fetch_assoc($rf)){
  12.         // El siguiente if no es necesario
  13.         // if($registro["cedula"] == $fila["numidprop"] and $fila["estmatricula"] = "MA" and $fila["fecmatricula"] >= "2012/08/01"){
  14.             $q="UPDATE actaf SET
  15.                nmatricula = '".$fila['matricula']."',
  16.                fecha = '".$fila['fecmatricula']."'
  17.                WHERE cedula = '".$fila['numidprop']."'
  18.             ";
  19.              mysql_query($q,$link) or die (mysql_error());
  20.          // } // cierre de if no necesario
  21.     } // fin while fila
  22. } // fin while registro
  23. // } cierre de primer if no necesario
Muchas gracias por responder al post Triby, probe tu solucion pero sin mucha suerte pues sigo excediendo el tiempo de ejecucion, el script esta realizando exactamente lo mismo... La verdad no se que hacer pues no tengo experiencia con grandes bases de datos cualquier otra sugerencia la pondre en practica...
  #7 (permalink)  
Antiguo 08/10/2012, 12:08
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Tiempo de ejecucion excedido...

Podemos ver tu código actualizado?
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 11/10/2012, 09:23
 
Fecha de Ingreso: septiembre-2012
Ubicación: Norte de Santander
Mensajes: 127
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Tiempo de ejecucion excedido...

Muchas gracias triby por tu colaboracion, como las condiciones de las consultas cambiaron pude optimizar mi codigo y ponerlo a funcionar, ademas encontre la linea que necesitaba para extender el tiempo de ejecucion cuando en php.ini no se puede, se los voy a dejar para quien lo pueda necesitar.
Linea:
Código PHP:
ini_set('max_execution_time'300); 
Solo hay que agrgarlo al inicio de tu script entre las etiquetas php por supesto....

Etiquetas: ejecucion, registro, tabla
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:25.