Jak sprawdzisz, czy instancja DB postgresql potrzebuje więcej pamięci RAM do obsługi bieżących danych roboczych?
database
performance
postgresql
memory
SDReyes
źródło
źródło
Odpowiedzi:
Jeśli wszystko jest w systemie Linux, całkowita fizyczna pamięć RAM powinna być większa niż rozmiar bazy danych na dysku, aby zminimalizować operacje we / wy. Ostatecznie cała baza danych będzie w pamięci podręcznej odczytu systemu operacyjnego, a operacje we / wy będą ograniczone do zatwierdzania zmian na dysku. Wolę znaleźć rozmiar bazy danych, uruchamiając „du -shc $ PGDATA / base” - ta metoda agreguje wszystkie bazy danych w jedną liczbę. Tak długo, jak jesteś większy, powinno być dobrze.
Ponadto możesz sprawdzić współczynnik trafień w pamięci podręcznej dla pobierania stosu i bloków indeksu. Mierzą one liczbę trafień we współdzielone bufory PostgreSQL. Liczby mogą być nieco mylące - chociaż mogło to być brak w pamięci podręcznej buforów współdzielonych, wciąż może być hitem w pamięci podręcznej odczytu systemu operacyjnego. Mimo to trafienia we współdzielonych buforach są nadal tańsze niż trafienia w pamięci podręcznej odczytu systemu operacyjnego (które z kolei są tańsze o kilka rzędów wielkości niż konieczność powrotu na dysk).
Aby sprawdzić współczynnik trafień wspólnych buforów, używam tego zapytania:
To daje ci 25 najgorszych przestępców, w przypadku których pamięć podręczna bufora została pominięta dla wszystkich tabel, w których co najmniej jeden blok musiał zostać pobrany z „dysku” (ponownie, którym może być albo pamięć podręczna odczytu systemu operacyjnego lub rzeczywiste operacje we / wy dysku). Możesz zwiększyć wartość w klauzuli WHERE lub dodać inny warunek dla heap_blks_hit, aby odfiltrować rzadko używane tabele.
To samo podstawowe zapytanie może być użyte do sprawdzenia całkowitej liczby trafień indeksu na tabelę poprzez globalne zastąpienie ciągu „sterty” ciągiem „idx”. Spójrz na pg_statio_user_indexes, aby uzyskać podział według indeksu.
Krótka uwaga na temat współdzielonych buforów: dobrą zasadą jest, aby w Linuksie ustawić parametr konfiguracyjny shared_buffers na 1/4 pamięci RAM, ale nie więcej niż 8 GB. Nie jest to trudna i szybka reguła, ale raczej dobry punkt wyjścia do strojenia serwera. Jeśli twoja baza danych ma tylko 4 GB i masz serwer 32 GB, 8 GB współdzielonych buforów jest w rzeczywistości nadmierną wydajnością i powinieneś być w stanie ustawić to na 5 lub 6 GB i nadal mieć miejsce na przyszły rozwój.
źródło
Zrobiłem ten SQL, aby pokazać stosunek tabel do liczby trafień dysku:
źródło
Działa również, jak powiedziano w dokumencie Heroku:
źródło