Postgresql 8.3: Ogranicz zużycie zasobów na zapytanie

12

Używam PostgreSQL 8.3 + PostGIS 1.3 do przechowywania danych geoprzestrzennych na Ubuntu 8.04 Hardy .

Ta konkretna wersja PostGIS ma błąd podczas obliczania buffer()bardzo złożonych segmentów, co powoduje, że zapytanie zajmuje coraz więcej pamięci, dopóki cała maszyna nie utknie.

Szukam mechanizmu PostgreSQL, który może:

  • Ogranicz zużycie pamięci (i być może inne zasoby) używane przez określone zapytanie.
  • Automatycznie zatrzymuj zapytania, których czas wykonania przekracza określony próg.

Jakieś pomysły?

Adam Matan
źródło
Dlaczego nadal używasz wersji z błędem, który cię gryzie? Użyj wersji, która została naprawiona, a Twój problem zniknął.
Frank Heikens,
To prawda, ale czasami w naszym kodzie są błędy lub po prostu zapytania, które trwają zbyt długo. Chcę, żeby zginęli z komunikatem o błędzie dziennika.
Adam Matan

Odpowiedzi:

9

Aby ograniczyć zużycie pamięci, głównym parametrem konfiguracyjnym jest work_mem. Ponieważ dotyczy to jednej operacji, a nie zapytania, nie możesz po prostu ustawić N, jeśli chcesz wydać N ilości pamięci, ale musisz ją nieco poprawić i dostroić, aby uzyskać pożądany wynik.

Nie pomaga to jednak w przypadku błędów i innych wycieków pamięci w kodzie serwera lub rozszerzeniach. Można to kontrolować za pomocą limitów zasobów specyficznych dla procesu kontrolowanych przez ulimit. Ale jeśli osiągniesz limit, a alokacja pamięci nie powiedzie się, co chcesz zrobić? Prawdopodobnie nie będzie się ładnie zachowywał. Lepiej napraw te błędy lub użyj innej wersji.

Zapytania stop, których czas wykonania przekroczył próg, używają parametru `statement_timeout ', np.

SET statement_timeout TO '10min';
Peter Eisentraut
źródło
Świetny. Właśnie tego szukałem.
Adam Matan
2

Zobacz Wiki Postgres :

PostgreSQL nie ma możliwości ograniczania zasobów, które zużywa dany użytkownik, zapytanie lub baza danych, ani odpowiednio do ustawiania priorytetów, tak aby jeden użytkownik / zapytanie / baza danych otrzymywał więcej zasobów niż inne. Konieczne jest korzystanie z funkcji systemu operacyjnego, aby osiągnąć możliwy ograniczony priorytet.

Można dostosować ustawienia wydajności dla poszczególnych użytkowników lub baz danych, ale nie należy przerywać określonych zapytań.

DrColossos
źródło
+1 Co z ustawieniem maksymalnej ilości pamięci, którą może zużyć cały klaster?
Adam Matan