Jeden z moich serwerów PostgreSQL obsługuje kilka (1–3) baz danych, które otrzymują stały strumień danych. Dane nie są specjalnie ustrukturyzowane, odpowiadają bieżącemu czasowi i różnorodności obserwowanych danych dla tej konkretnej chwili. Szybkość transmisji danych jest dość wysoka; dla jednej bazy danych to około gigabajta dziennie, a dla jednej dziesiątej około jednej dziesiątej. Nie oczekuję, że ta stopa wzrośnie. Wydajność odczytu ma znacznie niższy priorytet i jest obecnie akceptowalna.
W logach mam ten komunikat:
LOG: checkpoints are occurring too frequently (15 seconds apart)
HINT: Consider increasing the configuration parameter "checkpoint_segments".
Ta wartość jest obecnie ustawiona na 16, co jest możliwe dzięki uprzejmości pgtune.
Jakie ustawienia powinienem rozważyć, aby poprawić wydajność zapisu? Wolałbym zachować jak najwięcej bezpieczeństwa. Biorąc pod uwagę ilość napływających danych, mogłem zaakceptować utratę niektórych ostatnich danych w wyniku awarii, o ile większość danych pozostała nienaruszona.
Edycja: Na razie korzystam z PostgreSQL 9.0, ale planuję aktualizację do wersji 9.1. Nie publikuję szczegółów dotyczących sprzętu, ponieważ chociaż potwierdzam ich znaczenie, ostatecznie będę musiał dokonać tej optymalizacji na kilku komputerach z bardzo zróżnicowanym sprzętem. Jeśli sprzęt jest niezbędny do udzielenia odpowiedzi, proszę podać mi ogólne informacje, aby móc zastosować odpowiedź na komputerach o różnych konfiguracjach sprzętowych.
checkpoint_segmentszgodnie z zaleceniami? Co się stało?