При выносе в RAM выделяется определенно количество ОЗУ, которое будет использоваться для временных таблиц. Но что произойдет, если выделенного места не хватит?
В данном случае сеанс, который пытался это сделать, получит ошибку вида:
Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm:
по причине:
Ошибка СУБД:
53100: ERROR: could not extend file "pg_tblspc/6539232/PG_15_202209061/16439/t13_9297341": No space left on device
HINT: Check free disk space.
TEXT
Все другие сеансы, которые в этот же момент, хотели поместить данные во временные таблицы получат аналогичную ошибку и аварийно завершатся.
Но место в каталоге временных таблиц данные сеансы, которые завершились аварийно, удерживать не будут, поэтому все остальные сеансы, которые в момент проблемы не пытались поместить временную таблицу в оперативную память, продолжат успешно работать и их последующие попытки поместить данные во временные таблицы завершатся успешно.
Что будет с уже созданными временными таблицами в случае аварийного завершения работы PostgreSQL?
Тестовый сценарий:
- 20 сеансов в цикле постоянно создают временные таблицы
- Один из процессов постгреса завершается путем выполнения команды kill -9 PID
- Ребут сервера shutdown -r now
После перезагрузки в логах постгреса проблем нет, вход в базы 1С и операции в базе выполняются успешно.
Автовакуум удаляет безхозные временные таблицы, которые остались в результате аварийного завершения:
2024-01-14 16:41:28.431 MSK [29129:5/2] [] LOG: autovacuum: dropping orphan temp table "fragster.pg_temp_8.tt1"
2024-01-14 16:41:28.433 MSK [29129:5/3] [] LOG: autovacuum: dropping orphan temp table "fragster.pg_temp_9.tt1"
2024-01-14 16:41:28.433 MSK [29129:5/4] [] LOG: autovacuum: dropping orphan temp table "fragster.pg_temp_8.tt2"
...........
TEXT
Заключение
Каталог временных таблиц можно выносить в RAM, только следует настроить мониторинг, чтобы своевременно реагировать на возможные проблемы нехватки места.