53100 error could not write to hash join temporary file no space left on device

I am executing PostgreSQL functions to update a table which has a huge amount of data and the update happens for about 100000 records everyday. During the update I get an error saying: "could not ...

I am executing PostgreSQL functions to update a table which has a huge amount of data and the update happens for about 100000 records everyday. During the update I get an error saying:

"could not write to hash-join temporary file: No space left on device"

I have not really been able to get something useful to overcome this error. I got something where it says to SET a temporary table spaces. But I was not able to find how do I create a temporary table space where the data will be stored during the executing of the update procedure.

halfer's user avatar

halfer

19.7k17 gold badges95 silver badges183 bronze badges

asked Apr 13, 2015 at 9:49

Yousuf Sultan's user avatar

Yousuf SultanYousuf Sultan

2,9148 gold badges31 silver badges60 bronze badges

2

  1. SQL> create tablespace temp_tbs location '/some/big/disk';
  2. change temp_tablespaces = 'temp_tbs' in postgresql.conf.
  3. select pg_reload_conf();
  4. enjoy

Vivek S.'s user avatar

Vivek S.

19.1k7 gold badges66 silver badges84 bronze badges

answered Apr 13, 2015 at 10:09

Vao Tsun's user avatar

8

I got the same issue, but I was working with docker.

Just in case if you are working with docker too, go to:

Docker Preferences > Disk Panel > Disk image size and increase it.

It solved my problem.

alxlives's user avatar

alxlives

5,0044 gold badges26 silver badges47 bronze badges

answered Sep 26, 2019 at 12:28

pruthvi nath's user avatar

1- How do the internals of postgres work that cause this message to occur in the first place?

When joining two very large data sets, one strategy PostgreSQL can use is to scan one table and hash its join columns. Then scan the other table and compare the hashes of the join columns to hashes calculated for the second table.

See https://en.wikipedia.org/wiki/Hash_join

It works really well when you’re joining a small table against a much larger one, especially where no indexes suit the join conditions.

PostgreSQL can use a hash join strategy for bigger tables where it writes the hash table partitions out to disk first. This is presumably what you got.

What is the hash-join in reference to the creation of the temporary file that the db creates?

Hash tables. I don’t really understand this question.

2- How can I predict and prevent errors like this (related to performance and memory) occurring in the future?

Have more spare disk space for temporary storage. It doesn’t have to be in the main tablespace; see the temp_tablespaces setting.

As far as I know PostgreSQL doesn’t have the ability to estimate hash table sizes and decide the hash table will be too big for the available disk space.

   DeeK

09.01.23 — 12:29

8.3.20.2180

обновление бух 3.0 с 3.0.123.26 на 3.0.127.49

postgre 10

53100:error: could not extend file «base/52185646/95696157»: no space left on device HINT: check free disk space

размер базы около 20Гб

свободного места на тот момент было 7ГБ

загрузили бэкап, все ок

админ и руководство хотят узнать есть ли методы анализа требуемого места для предстоящего обновления

я не знаю таких методов, помогите найти вразумительные слова для них, или может предложите решение

   Builder

1 — 09.01.23 — 12:33

(0) Жесть, экономить место на диске? Вы серьезно? 7 гигов свободно????

ИМХО на диске должно быть хотя бы в 2-3 раза больше места чем размер базы.

   DeeK

2 — 09.01.23 — 12:34

(1) это само собой, я сразу это сказал, налейте места и забудем на ближайшие несколько лет

но им хочется анализ

   PLUT

3 — 09.01.23 — 12:34

если перекладывать из одних таблиц в другие при реструктуризации базы, логично предположить, что свободного места должно быть не меньше текущего размера базы + логи транзакций?

если база 20 Гектар, то и места должно быть не меньше 20 Га?

   Ryzeman

4 — 09.01.23 — 12:39

>>есть ли методы анализа требуемого места для предстоящего обновления

Не думаю, если при обновлении не написано ничего в подсказках, но если

>>размер базы около 20Гб

>>свободного места на тот момент было 7ГБ

тут ИМХО и так более чем очевидно. Если у вас там не раритетные суперскоростные скази-диски или не оптаны лимитированной серии, то смысл крохоборить?…

   PLUT

5 — 09.01.23 — 12:40

(4) ну как вариант арендовать SSD диск на время обновления, после обновления базу вернуть взад

   DeeK

6 — 09.01.23 — 12:42

то есть метод анализа примерно такой как (3)?

минимум размер базы плюс подушка какая-то

   Trimax

7 — 09.01.23 — 12:43

(2) Дык анализ уже произведен средствами 1С: Нет места на жестком диске….

   Aleksey

8 — 09.01.23 — 12:43

(6) За анализом им к психологу, он им поставит анализ.

Или анализ чего им нужно?

   DeeK

9 — 09.01.23 — 12:44

(8) требуемого свободного места на диске для корректного завершения обновления

   DeeK

10 — 09.01.23 — 12:44

(7) они хотят перед обновлением оценивать — хватит места или нет

   Ryzeman

11 — 09.01.23 — 12:45

(8) Ну автор нормальный вопрос задал, просто читать всю ветку надо) Типа предварительный анализ перед обновлением — хватит ли места.

   PLUT

12 — 09.01.23 — 12:45

(7) особенно «анализ» обновления типовой ERP (соблюдайте спокойствие. поезд скоро отправится. обновление в зависимости от количества данных займет от нескольких минут до нескольких дней)

и костыли в виде запуска в параллель нескольких фоновых заданий и галочка производительности обновления или работы пользователей.

а еще обновление через копию базы забыл :)

   Trimax

13 — 09.01.23 — 12:47

(9) Это вопрос должен быть адресован админу. Железо — его головняк. Он должен обеспечить работоспособность программы.

   Ryzeman

14 — 09.01.23 — 12:48

(6) я бы заморачивался если бы речь шла на терабайты. Но «жалкие» (по нынешним дням) ~50 гигов держать свободными уж точно можно…

   PLUT

15 — 09.01.23 — 12:48

(10)

п.1 бэкап базы.

п.2 обновление — > no space left on device HINT: check free disk space

БИНГО! предварительный анализ — недостаточно места! <- вы находитесь здесь

п.4 загружаем из бэкапа базу

п.5 пишем на форум, читаем, много думаем…

   Asmody

16 — 09.01.23 — 12:51

(0) если кратко, то примерно так:

1. через сравнение-объединение определяешь объекты с изменившейся структурой

2. смотришь объем таблиц этих объектов вместе с индексами + объем таблиц Config

3. умножаешь на 2, но лучше сразу на π

вот тебе будет оценка

   PLUT

17 — 09.01.23 — 12:52

(16) кстати да, и неделю времени на анализ (это ж сколько денег можно заработать, если франь)

   DeeK

18 — 09.01.23 — 12:53

(16) спасибо за конкретику

(17) тоже об этом подумал

я думаю мой конспект из этой темы их удовлетворит, всем спасибо, можно закрывать

   ViSo76

19 — 09.01.23 — 13:14

Есть шанс что ошибки на диске

   Aleksey

20 — 09.01.23 — 13:53

(11) так кроме эмпирического пути других методов нет, даже (размер базы умножь на 2) и то иногда не спасает, тем более когда модель восстановления стоит FULL а не простая.

Так что только делать обновление на копии и смотреть сколько заняло место

   bolobol

21 — 09.01.23 — 16:25

(20) И как же это посмотреть? После обновления база занимает +/- столько же, сколько и до

   bolobol

22 — 09.01.23 — 16:28

А по сути вопроса, если грубо, то: — да ну вас нахрен, даже голову напрягать не стоит из-за 50 гигабайтов…

   Новый1сник2

23 — 09.01.23 — 16:30

(0) обновлял на днях бух корп (размер не смотрел), места на диске было 10г свободных, при обновлении глюкануло что не достаточно места. пришлось чистить немного и повторно обновлять

   Новый1сник2

24 — 09.01.23 — 16:33

(О) размер диска какой? столкнулся с тем что под пользователем, которым обновлял. в темпах пользователя накопился кэш от обновлений, примерно 50 г. можно почистить

   Aleksey

25 — 09.01.23 — 16:35

(21) запустить стандартный виндовый счетчик свободного место на время обновления и смотреть минимальное значение?

   bolobol

26 — 09.01.23 — 16:37

(25) Спасибо, не знал что такое вообще есть стандартное в винде

   Aleksey

27 — 09.01.23 — 16:44

Счетчики производительности для дисковой подсистемы

%Free Space — Объем свободного дискового пространства на выбранном логическом диске, в процентах.

https://windowsnotes.ru/other/schetchiki-proizvoditelnosti-dlya-diskovoj-podsistemy/

Ну или по 1С-совски

Мониторинг свободного места на диске с помощью OneScript

https://infostart.ru/1c/articles/1450352/

   Kassern

28 — 09.01.23 — 16:58

(27) Все же можно проще, без всяких OneScript

Только что на коленке собрал

    FSO=Новый COMОбъект(«Scripting.FileSystemObject»);

    Для каждого ТекДиск Из FSO.Drives Цикл

        Если  ТекДиск.DriveType=2 Тогда

            СвободныйОбъем = Окр(fso.GetDrive(ТекДиск.DriveLetter).FreeSpace/1048576,1);

            Сообщить(«Диск «+ТекДиск.DriveLetter+» свободно «+СвободныйОбъем+» Мб.»);    

        КонецЕсли;    

    КонецЦикла;

   Kassern

29 — 09.01.23 — 16:59

   Aleksey

30 — 09.01.23 — 17:06

(28) там вроде как ограничения типа с сетевыми дискми не работает. или в виртуалки чудит, короче тестить надо

   bolobol

31 — 09.01.23 — 17:07

(28) В (25) говорят, что всё уже написано до Вас

  

Kassern

32 — 09.01.23 — 17:17

(30) Все же есть)

DriveType

Возвращаемое значение: число — определяет тип ресурса. Возможные значения:

    0 — неизвестное устройство.

    1 — устройство со сменным носителем.

    2 — жёсткий диск.

    3 — сетевой диск.

    4 — CD-ROM.

    5 — RAM-диск.

Понравилась статья? Поделить с друзьями:

Читайте также:

  • 5287 ошибка мерседес 221
  • 528 ошибка buderus
  • 5276691 ошибка тигуан
  • 5276435 ошибка адаптивного освещения тигуан
  • 525f ошибка мерседес

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии