PSQLException: ERROR: could not write to hash-join temporary file: No space left on device
Calvin Kim <[email protected]> Wed, 13 Nov 2019 08:28:05 +1100
| Newsgroups | gmane.comp.db.postgresql.novice |
|---|---|
| Message-ID | <CAPhszwsY4YOp7kUg9-9kUF+=imRqjAe48dknWT-uyGYhCPDWsQ@mail.gmail.com> |
Hi team,
I have an issue with Postgres error: *PSQLException: ERROR: could not write
to hash-join temporary file: No space left on device*
After investigation, I could see that both *work_mem* and *temp_tablespace*
is NOT specified in postgresql.conf file,
but when I queried database, it showed as 15728kB.
$ cat postgresql.conf | grep temp_tablespaces
#temp_tablespaces = '' # a list of tablespace names, ''
uses
$ cat postgresql.conf | grep work_mem
#work_mem = 4MB # min 64kB
#maintenance_work_mem = 64MB # min 1MB
#autovacuum_work_mem = -1 # min 1MB, or -1 to use
maintenance_work_mem
--Recommend is 64MB
postgres=# show work_mem;
work_mem
----------
15728kB
(1 row)
I can see that large number of temp files have been created.
postgres=# SELECT datname, temp_files,temp_bytes from
pg_catalog.pg_stat_database;
datname | temp_files | temp_bytes
------------+------------+---------------
postgres | 24 | 25013533
user_db | 200797 | 2774922398171
template1 | 0 | 0
template0 | 0 | 0
(4 rows)
$ free -h
total used free shared buffers cached
Mem: 31G 18G 12G 5.4G 408M 17G
-/+ buffers/cache: 1.4G 29G
Swap: 4.0G 226M 3.8G
In my opinion, *work_mem* needs to be set since temp files created seem
quite large.
Can someone please advise the recommended value for work_mem (is 64MB
recommended?)
And if setting up temp_tablespace is also recommended in this case?
Thanks,
Calvin