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