Робота з повним простором на диску в postgresql


14

У мене є веб-додаток Django з резервним файлом postgresql 9.3.10 (сидячи в ОС Linux). Я зіткнувся з повною помилкою диска, таким чином, що навіть якщо я спробую врізати таблицю, я отримую подібні помилки:

ERROR:  could not extend file "base/30137/33186048": No space left on device
HINT:  Check free disk space.

Я не можу легко додати більше дискового простору на сервер, а також не можу видалити речі з цього VM. Однак є декілька таблиць, які є кандидатами на усічення, але, здається, і зараз їх не вдається усікати.

Хтось може дати мені поради щодо того, що я можу зробити тут? Це важко вражає мій виробничий сервер, і я трохи випадковий DBA тут, настільки загарбаний.


Ви можете повернути трохи місця, якщо зможете (тимчасово) скинути індекс ... обрізати таблиці, а потім відтворити його
joanolo

Відповіді:


9

Оскільки PostgreSQL повинен записати WAL перед тим, як внести будь-які зміни в таблиці, йому потрібно вільний простір на диску, щоб видалити речі та звільнити більше місця на диску.

Якщо ви дозволите заповненню диска, ви не можете відновитись з PostgreSQL. Навіть TRUNCATEще доводиться писати в WAL.

Отже, ви повинні звільнити місце на гучності або розширити гучність. Якщо ваші файли журналів PostgreSQL знаходяться в pg_logкаталозі даних, ви можете сміливо видалити деякі з них і перезапустити Pg.

Ви НЕ видаляти pg_xlogабо pg_clog. Це не журнали помилок сервера, це критичні частини бази даних, журнал транзакцій та журнал фіксування.


Чому TRUNCATEпотрібно писати на wal, і як виглядає цей запис у WAL?
Еван Керролл

"усікання не записує повних даних, лише той факт, що усікання трапилося. Щоб мати змогу повернути їх, базовий файл зберігається навколо, поки транзакція не буде здійснена." [Джерело] ( postgresql.org/message-id/… Отже, запис усієї стіни в стіні - це дуже мало. Прості байти. Якби це була вся необхідна космічна навантаження, ви, ймовірно, могли її отримати, rm -rf /tmp/*видаливши свій vimrc.
Еван Керролл

@EvanCarroll rm -rf /tmp/*... який може видалити речі, які ви також можете захотіти, такі як гнізда додатків тощо. Краще бути більш вибірковим. Що стосується потрібного місця, ви маєте рацію, він мінімальний - 8-кілометрова порожня таблиця + кілька кб записів WAL для усікання, розподіл Xid, запис фіксів тощо.
Крейг Рінгер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.