Я использую PostgreSQL 8.3 + PostGIS 1.3 для хранения геопространственных данных в Ubuntu 8.04 Hardy .
Эта конкретная версия PostGIS имеет ошибку при вычислении buffer()
очень сложных сегментов, в результате чего запрос занимает все больше и больше памяти, пока вся машина не застрянет.
Я ищу механизм PostgreSQL, который может:
- Ограничьте потребление памяти (и, возможно, других ресурсов), используемых конкретным запросом.
- Автоматически останавливать запросы, время выполнения которых превышает определенный порог.
Есть идеи?
performance
postgresql
Адам Матан
источник
источник
Ответы:
Чтобы ограничить потребление памяти, основным параметром конфигурации является
work_mem
. Поскольку это применимо к каждой операции, а не к запросу, вы не можете просто установить его на N, если хотите потратить N памяти, но вам нужно немного его настроить и настроить, чтобы получить желаемый результат.Это не помогает, однако, в случае ошибок и других утечек памяти в коде или расширениях сервера. Вы можете контролировать это с помощью ограничений ресурсов, специфичных для процесса
ulimit
. Но если вы достигнете предела и произойдет сбой выделения памяти, что вы хотите, чтобы произошло? Это, вероятно, не будет вести себя слишком хорошо. Лучше исправить эти ошибки или использовать другую версию.Остановите запросы, время выполнения которых превысило пороговое значение, используйте параметр Statement_timeout, например:
источник
Посмотрите на Postgres Wiki :
Вы можете настроить параметры производительности для каждого пользователя или базы данных, но не для отмены определенных запросов.
источник