Mam aplikację internetową Django z zapleczem postgresql 9.3.10 (w systemie Linux). Wystąpił błąd pełnego dysku, taki że nawet jeśli spróbuję obciąć tabelę, dostaję błędy tego rodzaju:
ERROR: could not extend file "base/30137/33186048": No space left on device
HINT: Check free disk space.
Nie mogę łatwo dodać więcej miejsca na dysku do serwera, ani nie mogę usunąć rzeczy z tej maszyny wirtualnej. Istnieje jednak kilka tabel, które są kandydatami do obcinania, ale wydaje się, że nie mogę ich teraz obciąć.
Czy ktoś może mi doradzić, co mogę tutaj zrobić? Uderza to mocno w mój serwer produkcyjny, a ja jestem tu trochę przypadkowym DBA, więc jestem kompletnie zaskoczony.
postgresql
postgresql-9.3
Hassan Baig
źródło
źródło
Odpowiedzi:
Ponieważ PostgreSQL musi napisać WAL przed wprowadzeniem jakichkolwiek zmian w tabelach, potrzebuje wolnego miejsca na dysku, aby usunąć rzeczy i zwolnić więcej miejsca na dysku.
Jeśli pozwolisz, aby dysk się zapełnił, nie możesz odzyskać z PostgreSQL. Nawet
TRUNCATE
wciąż musi pisać do WAL.Więc musi zwolnić trochę miejsca na woluminie, lub poszerzyć głośność. Jeśli twoje pliki dziennika PostgreSQL znajdują się w
pg_log
katalogu danych, możesz bezpiecznie usunąć niektóre z nich i ponownie uruchomić Pg.Czy nie usuwać
pg_xlog
lubpg_clog
. To nie są dzienniki błędów serwera, to krytyczne części bazy danych, dziennik transakcji i dziennik zatwierdzeń.źródło
TRUNCATE
trzeba pisać na wal i jak wygląda ten wpis w WAL?rm -rf /tmp/*
lub usunąć vimrc.rm -rf /tmp/*
... które mogą również usuwać rzeczy, których możesz chcieć, takie jak gniazda aplikacji itp. Lepiej być bardziej selektywnym. Jeśli chodzi o potrzebne miejsce, masz rację, jest minimalne - 8k pustej tabeli + kilka kb wpisów WAL do obcinania, alokacji xid, zatwierdzania rekordów itp.