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?
performance
postgresql
Adam Matan
źródło
źródło
Odpowiedzi:
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.
źródło
Zobacz Wiki Postgres :
Można dostosować ustawienia wydajności dla poszczególnych użytkowników lub baz danych, ale nie należy przerywać określonych zapytań.
źródło