J'utilise PostgreSQL 8.3 + PostGIS 1.3 pour stocker des données géospatiales sur Ubuntu 8.04 Hardy .
Cette version particulière de PostGIS a un bogue lors du calcul d'un buffer()
sur des segments très complexes, ce qui oblige la requête à prendre de plus en plus de mémoire jusqu'à ce que la machine entière soit bloquée.
Je recherche un mécanisme PostgreSQL qui peut:
- Limitez la consommation de mémoire (et peut-être d'autres ressources) utilisée par une requête spécifique.
- Arrête automatiquement les requêtes dont le temps d'exécution dépasse un certain seuil.
Des idées?
performance
postgresql
Adam Matan
la source
la source
Réponses:
Pour limiter la consommation de mémoire, le paramètre de configuration principal est
work_mem
. Étant donné que cela s'applique par opération et non par requête, vous ne pouvez pas simplement le définir sur N si vous souhaitez dépenser N quantité de mémoire, mais vous devez l'ajuster et l'ajuster un peu pour obtenir le résultat souhaité.Cependant, cela n'aide pas en cas de bogues et autres fuites de mémoire dans le code du serveur ou les extensions. Vous pouvez contrôler cela avec les limites de ressources spécifiques au processus contrôlées par
ulimit
. Mais si vous atteignez la limite et que l'allocation de mémoire échoue, que voulez-vous qu'il se passe? Il ne se comportera probablement pas trop bien. Mieux vaut corriger ces bugs ou utiliser une version différente.Les requêtes d'arrêt dont le temps d'exécution a dépassé un seuil, utilisez le paramètre `statement_timeout ', par exemple,
la source
Jetez un œil au wiki Postgres :
Vous pouvez ajuster les paramètres de performances par utilisateur ou par base de données, mais pas quand abandonner certaines requêtes.
la source