4programmers.net
2019-08-12 06:47

Jak zapewne niektórzy z Was zauważyli, w ostatnich dniach serwis dostawał zadyszki i działał momentami bardzo wolno. Po sprawdzeniu, okazało się że winowajcą jest PostgreSQL. Konkretnie, w logach znajdowały się głównie proste zapytania UPDATE oraz INSERT, które normalnie powinny wykonać się w kilka milisekund.

Okazało się że lekiem było wykonanie zapytań VACUUM FULL na problematycznych tabelach. Domyślne ustawienia autovacuum są widocznie za mało restrykcyjne przez co autocavuum wykonywany jest zbyt rzadko.

#4programmers.net #coyote

yarel

A jak się okazało? Metodą prób i błędów, czy może przed uruchomieniem odzyskiwania przestrzeni dyskowej istniały jakieś przesłanki, że trzeba zrobić vacuuma? np. na problematycznych tabelach był sporo operacji DELETE?

czysteskarpety

dla mnie tam normalnie działało, a że czasami jest sekunda lagu to jakoś przeżyje ten stracony czas

Spine

Teraz już wiemy jakie sztuczki stoją za bazą danych obsługujących masy i możemy pisać nowego Facebooka! :)

Spine

Bo monopol jest zły...

danek

po co fb skoro jest 4p :)

Adam Boduch

Może nie wszyscy wiedzą, ale postgres tak naprawdę nie uaktualnia rekordu zapytaniem UPDATE ale dodaje nowy, a stary oznacza jako usunięty. @yarel: tak, na problematycznych tabelach często wykonywane były zapytania INSERT/DELETE/UPDATE. Po sprawdzeniu okazało się że vacuum wykonywany był kilka tygodni temu, a statystyki postgresa wskazywały na wiele "martwych rekordów" (dead tuple).

vpiotr

Krótko używałem PGSQL, ale takie czyszczenie poleciłbym robić regularnie: https://www.alibabacloud.com/help/doc-detail/59176.htm

Co Atlassian Support sugeruje: https://confluence.atlassian.[...]ze-and-reindex-885239781.html
np. sprawdzenie czy demon autovacum działa w tle.

Sam postgresql pisze: Plain VACUUM may not be satisfactory when a table contains large numbers of dead row:
https://www.postgresql.org/docs/10/routine-vacuuming.html

Adam Boduch

@vpiotr: autovacuum działa. Po prostu robiony jest zbyt rzadko jak na nasze potrzeby. Trzeba zmienić domyślne ustawienia po prostu.