Página 1 de 1

¿Cómo puedo evitar un timeout?

NotaPublicado: 2008-01-14 20:44 @905
por dmartinezmurguia
¡Saludos a todos los perleros!

Tengo una duda. Lo que pasa es que estoy utilizando Perl en un servidor Apache entonces me ocurre un timeout porque una consulta suele tardarse más de 4 minutos y me saca de la aplicación y en la página web me lo despliega.

Mi administrador del servidor no me permite instalar muchos módulos, entonces tengo muy limitado ese recurso... ¿Alguien sabe cómo puedo evitar un timeout y poder prolongar el tiempo de espera sin modificar configuraciones en el servidor Apache?

¡Muchas gracias y saludos a todos!

NotaPublicado: 2008-01-15 07:07 @338
por monoswim
¿4 minutos haciendo una consulta? Me parece muchísimo... mira que yo tengo sistemas que hacen cosas pesadas, pero más de 1 minuto ya me parece excesivo, 4 es una locura...

Lo único que se me ocurre es un servidor dedicado, en donde tengas toda la CPU para tu petición y puedas configurar el Apache a tu gusto... Son muy caros, tal vez un servidor dedicado virtual, pero estos suelen tener poca memoria RAM...

Espero que te sirva.

Saludos
PD: ¿No puedes hacerle una reingeniería a tu consulta para dividirla en varias subconsultas?

NotaPublicado: 2008-01-15 12:27 @560
por explorer
Pero... ¿son cuatro minutos para recuperar la información desde la base de datos o es que tarda 4 minutos en obtener la primera respuesta desde la base de datos?

En el primer caso, como vamos a tardar mucho en obtener respuesta, mandamos al usuario una página en la que le informamos de esto y, por medio de un JavaScritp, (Ajax o no), llamamos, de forma periódica, a otro CGI para que nos informe de si ha terminado o no. Eso se puede saber si el proceso anterior todavía no ha terminado o no ha generado la salida. Si ha terminado y tenemos la salida, entonces el segundo CGI lo recoge y sustituye la página de espera. Esto último se puede hacer redirigiendo toda la página a otra en la que se solo se muestra el resultado.

Hay más formas, claro...

Si es el segundo caso, que vamos recibiendo datos durante 4 minutos, y se supone que entre dos de ellos no va a pasar un tiempo superior al timeout. Si es así, podemos crear la página y rellenarla a medida de que obtenemos resultados desde la base de datos (no esperamos a tener todos los datos). Dependerá entonces del cliente web que el usuario esté manejando, para que éste pueda ver los datos a medida de que van llegando.

Monoswim: yo he tenido tiempos de espera de más de media hora. Eso sí, eran tablas de millones de registros, con una consulta SQL muy (pero que muy) complicada. Naturalmente, al usuario se le dice que va a tardar ese tiempo, que se marche a tomar el café, y que el resultado se lo encontrará en el correo electrónico :-)