У меня проблема с postgres, блокирующим мой SSD (256 МБ), так как он накапливается со временем.
В моем приложении есть таблица с caseA - caseB
парами, которые я создаю заранее.Используя параллельных рабочих, каждый рабочий со своим собственным соединением запускает запрос на выборку - соединяет несколько других таблиц по своим первичным ключам (занимает около 5 с, включая fetchall()
) на основе caseA-caseB pair
, которое он получает.
Затем онвыполняет некоторый анализ данных и делает copy_from
для двух других таблиц.Смысл в том, что со временем использование диска возрастает и пики отставания составляют 400s
, что в конечном итоге приведет к остановке моей системы.
Я не понимаю, почему это происходит и как это предотвратить?Мы говорим всего о 65 млн. Парных кейсов.В одной таблице результатов будет столько же строк, а в другой будет гораздо больше - сотни миллионов записей.
Я пытался поиграться с Semaphor
, чтобы контролировать, сколько рабочих может загружать / выгружать, увеличивал work_mem
, shared_buffers
и т. Д. Но, похоже, проблема только откладывается.
Я реализовал время сна для всех рабочих после нескольких прогонов, но, похоже, это не помогает, поэтому я думаю, что проблема должна быть где-то в postgres.
Большое спасибо за любую помощь.