Postgresql 8.3: Обмеження споживання ресурсів на запит


12

Я використовую PostgreSQL 8.3 + PostGIS 1.3 для зберігання геопросторових даних на Ubuntu 8.04 Hardy .

Ця конкретна версія PostGIS має помилку під час обчислення buffer()на дуже складних сегментах, через що запит займає все більше і більше пам’яті, поки вся машина не застрягне.

Я шукаю механізм PostgreSQL, який може:

  • Обмежте споживання пам’яті (та, можливо, інших ресурсів), що використовується певним запитом.
  • Автоматично зупиняти запити, час виконання яких перевищує певний поріг.

Будь-які ідеї?


Чому ти продовжуєш користуватися версією, яка містить помилку, яка тебе кусає? Скористайтеся версією, яка виправлена, і проблема зникла.
Френк Хайкенс,

Щоправда, але іноді в нашому коді є помилки або просто запити, які займають занадтоoooooo довго. Я хочу, щоб вони померли з повідомленням про помилку журналу.
Адам Матан

Відповіді:


9

Для обмеження споживання пам'яті основним параметром конфігурації є work_mem. Оскільки це стосується операції, а не для запиту, ви не можете просто встановити його на N, якщо ви хочете витратити N кількість пам'яті, але вам доведеться трохи налаштувати та налаштувати його, щоб отримати бажаний результат.

Однак це не допомагає у випадку помилок та інших витоків пам'яті в коді або розширеннях сервера. Ви можете це контролювати за допомогою обмежених ресурсів, обмежених процесом ulimit. Але якщо ви досягли межі, і розподіл пам’яті не вдається, що ви хочете, щоб це сталося? Це, мабуть, не буде вести себе надто приємно. Краще виправте ці помилки або використовуйте іншу версію.

Запитання зупинки, час виконання яких перейшов поріг, використовують параметр `statement_timeout ', наприклад,

SET statement_timeout TO '10min';

Чудово. Тільки те, що я шукав.
Адам Матан

2

Погляньте на Wiki Postgres :

PostgreSQL не має можливості обмежувати ресурси, які споживає конкретний користувач, запит або база даних, або відповідно встановлювати пріоритети, щоб один користувач / запит / база даних отримував більше ресурсів, ніж інші. Необхідно використовувати засоби операційної системи для досягнення обмеженої пріоритетності.

Ви можете налаштувати параметри продуктивності на кожного користувача або на базу даних, але не тоді, коли потрібно припинити певні запити.


+1 Як щодо встановлення максимуму обсягу пам'яті, який може використовуватись весь кластер?
Адам Матан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.