2009-04-22 6 views
12

Należy pamiętać, że jestem nowicjuszem w świecie sql/baz danych.Dostrajanie wydajności PostgreSQL

Wstawiam/aktualizuję tysiące obiektów co sekundę. Obiekty te są aktywnie wyszukiwane w odstępach wielokrotnych sekund.

Jakie są podstawowe czynności, które powinienem wykonać, aby dostroić bazę danych (postgres)?

+0

trzeba skonfigurować plik postgresql.conf. I zrestartuj bazę danych. Zobacz ten link, aby uzyskać szczegółowe ustawienia konfiguracji: http://tekadempiere.blogspot.ae/2014/09/tuning-postgresql-for-better-performance.html – Sajeev

Odpowiedz

13

To szeroki temat, więc tutaj jest mnóstwo rzeczy do przeczytania.

  • EXPLAIN and EXPLAIN ANALYZE jest niezwykle przydatny dla zrozumienia tego, co dzieje się w Twojej db silnikiem
  • Upewnij się, że odpowiednie kolumny są indeksowane
  • upewnić, nieistotne kolumny są nie indeksowane (insert/update wydajność może iść w dół drenażu, jeśli zbyt wiele indeksy muszą być aktualizowane)
  • Upewnij się, że jest dostrojony postgres.conf prawidłowo
  • wiedzieć co work_mem jest i jak to wpływa na twoje pytania (przeważnie użyteczne dla większych kwerend)
  • Upewnij się, że baza danych jest prawidłowo znormalizowane
  • VACUUM na oczyszczaniu starych danych
  • ANALYZE do aktualizacji (cel statystyki dla kwoty statystyki) Statystyki
  • połączeń trwałych (można użyć Menedżera połączeń jak pgPool lub pgbouncer)
  • Dowiedz się, jak konstruowane są zapytania (łączenia, sub-selekcje, kursory)
  • Buforowanie danych (np.memcached) to opcja

A kiedy wyczerpałeś te opcje: dodaj więcej pamięci, szybszy podsystem dysku itd. Sprawy sprzętowe, szczególnie na większych zbiorach danych.

I oczywiście przeczytaj wszystkie inne wątki na temat postgreSQL/baz danych. :)

1

Absolutne minimum, które zalecam, to polecenie,. Pokaże on podział podkwerend, złączeń i innych, cały czas pokazując rzeczywistą ilość czasu zużywanego podczas operacji. Będzie również ostrzegać o kolejnych skanach i innych nieprzyjemnych problemach.

To jest sposób, aby zacząć od najlepszy.

5

Przede wszystkim przeczytaj oficjalny podręcznik użytkownika Performance Tips.

Uruchamianie przy wszystkich zapytaniach i zrozumieniu ich wyników pozwoli Ci dowiedzieć się, czy Twoje zapytania są tak szybkie, jak mogłyby być, i czy powinieneś dodawać indeksy.

Kiedy już to zrobisz, proponuję przeczytać część instrukcji z zakresu Server Configuration. Istnieje wiele opcji, które można dostosować w celu dalszego zwiększenia wydajności. Upewnij się, że znasz opcje, które ustawiłeś, ponieważ mogą one równie łatwo utrudnić działanie, jeśli są ustawione nieprawidłowo.

Pamiętaj, że za każdym razemzmienić zapytanie lub opcję, testu i odniesienia aby wiedzieć skutki każdej zmiany.

-2

Put fsync = off w posgresql.conf, jeśli ufasz swój system plików, w przeciwnym razie każda operacja PostgreSQL będzie imediately zapisane na dysku (z Fsync wywołania systemowego). Mamy tę opcję wyłączoną na wielu serwerach produkcyjnych od 10 lat i nigdy nie mieliśmy błędów w danych.

+2

To jest ZŁE porady. Ryzykujesz uszkodzenie danych. Oczywiście, możesz mieć szczęście przez kilka lat, tak jak ty. Ten sam zysk można uzyskać za pomocą kontrolera raid z buforowaną pamięcią podręczną zapisu - bez dodatkowego ryzyka. – tommym

+0

Ufamy naszym systemom plików ext3. Pamięć podręczna zapisu jest ograniczona. Na przykład przechowujemy bazę danych Century21 we Francji od 8 lat; ponad 3000 osób pisze do tej bazy danych w czasie rzeczywistym. Mamy domowe oprogramowanie pośrednie, które odzwierciedla wszystkie zapytania w innej bazie danych w przypadku awarii serwera, ale nigdy nie mieliśmy żadnych problemów. Zobacz: http://www.postgresql.org/docs/8.1/interactive/runtime-config-wal.html – fredz

+0

Ogólnie złe porady. Postgres nie może zagwarantować spójności z tym ustawieniem. Wyłączenie fsync oznacza, że ​​może nawet nie zostać zapisane w pamięci podręcznej dysków. Nie rób tego. Tylko dlatego, że nie zaobserwowałeś korupcji, znaczy bardzo mało ... szczególnie, jeśli nigdy nie zdarzył się wypadek. –

3

Faktycznie istnieje kilka prostych zasad, które będzie Ci w większości przypadków wystarczającą wydajność:

  1. Indeksy są pierwszą częścią. Klucze podstawowe są automatycznie indeksowane. Zalecam umieszczanie indeksów na wszystkich kluczach obcych. Następnie umieść indeksy we wszystkich często wyszukiwanych kolumnach, jeśli w tabeli są często używane zapytania o więcej niż jedną kolumnę, wstaw indeks do tych kolumn razem.

  2. Ustawienia pamięci w instalacji PostgreSQL. Ustaw następujące parametry:

.

shared_buffers, work_mem, maintenance_work_mem, temp_buffers 

Jeśli jest dedykowana maszyna bazie można łatwo ustawić pierwszy 3 z nich na pół barana (po prostu należy zachować ostrożność pod Linuksem ze wspólną buforów, może trzeba dostosować parametr SHMMAX), w każdy inny to zależy od tego, ile barana chciałbyś dać postgresql.

http://www.postgresql.org/docs/8.3/interactive/runtime-config-resource.html

+0

PKs są automatycznie indeksowane? Jak to się dzieje, że nie pojawiają się pod listą "indeksów" w narzędziu pgAdmin? – systemoutprintln

+0

Rozpatrzenie poprawnej pluralizacji słowa "indeks" od samego Kapitana Pedantta. Dzięki @Mauli! – Rastus7

Powiązane problemy