Postgresql 8.3: Limite el consumo de recursos por consulta


12

Estoy usando PostgreSQL 8.3 + PostGIS 1.3 para almacenar datos geoespaciales en Ubuntu 8.04 Hardy .

Esta versión particular de PostGIS tiene un error al calcular un buffer()segmento muy complejo, lo que hace que la consulta tome más y más memoria hasta que toda la máquina se atasque.

Estoy buscando un mecanismo PostgreSQL que pueda:

  • Limite el consumo de memoria (y quizás otros recursos) utilizados por una consulta específica.
  • Detiene automáticamente las consultas cuyo tiempo de ejecución supera un cierto umbral.

¿Algunas ideas?


¿Por qué sigues usando una versión que tiene un error que te muerde? Use una versión que esté arreglada y su problema desaparecerá.
Frank Heikens

Es cierto, pero a veces hay errores en nuestro código, o simplemente consultas que tardan demasiado. Quiero que mueran con un mensaje de error de registro.
Adam Matan

Respuestas:


9

Para limitar el consumo de memoria, el parámetro de configuración principal es work_mem. Dado que esto se aplica por operación, no por consulta, no puede simplemente establecerlo en N si desea gastar N cantidad de memoria, sino que debe ajustarlo y ajustarlo un poco para obtener el resultado deseado.

Sin embargo, esto no ayuda en caso de errores y otras pérdidas de memoria en el código del servidor o en las extensiones. Puede controlar eso con los límites de recursos específicos del proceso controlados por ulimit. Pero si alcanza el límite y la asignación de memoria falla, ¿qué desea que suceda? Probablemente no se comportará muy bien. Mejor arregle esos errores o use una versión diferente.

Las consultas de detención cuyo tiempo de ejecución superó un umbral, use el parámetro `Statement_timeout ', por ejemplo,

SET statement_timeout TO '10min';

Excelente. Justo lo que estaba buscando.
Adam Matan

2

Echa un vistazo a la Wiki de Postgres :

PostgreSQL no tiene facilidades para limitar qué recursos consume un usuario, consulta o base de datos en particular, o en consecuencia para establecer prioridades de modo que un usuario / consulta / base de datos obtenga más recursos que otros. Es necesario utilizar las instalaciones del sistema operativo para lograr la priorización limitada posible.

Puede ajustar la configuración de rendimiento por usuario o por base de datos, pero no cuándo abortar ciertas consultas.


+1 ¿Qué hay de establecer un máximo en la cantidad de memoria que puede consumir todo el clúster?
Adam Matan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.