Начало » Использование СУБД » PostgreSQL »  Перестает работать autovacuum, даже при отключении autovacuum_vacuum_cost_delay 
	
		
		
			    Перестает работать autovacuum, даже при отключении autovacuum_vacuum_cost_delay [сообщение #3185] | 
			Wed, 27 September 2023 15:32   | 
		 
		
			
				
				
				
					
						  
						xpg934
						 Сообщений: 3 Зарегистрирован: September 2023 
						
					 | 
					Junior Member  | 
					 | 
		 
		 
	 | 
 
	
		Коллеги, помогите разобраться - куда дальше копать. 
У нас огромные базы (10+ Tb, разбитые на базы по 100-500Gb). 
В части баз есть таблицы с постоянными update, т.е. dead tupples плодятся безбожно. 
И всё бы хорошо, пока работает autovacuum и дополнительно ночью ещё проходимся ручным vacuum (analyze, skip_locked) для таблиц, где dead_tupples > 5%. 
 
Сначала всё уперолось (по ощущениям) в дефолтный cost-based autovacuum - воркеры просто не запускаются после какого-то периода, и могут не работать 1-2 суток. Вчера отключили это, поставив autovacuum_vacuum_cost_delay = 0. Проблема сразу решилась, autovacuum стал работать четко 1 раз в минуту, согласно указанного autovacuum_naptime. 
 
Но вдруг это всё остановилось. Воркеры autovacuum перестали опять запускаться, dead tupples плодятся, что приводит к выборке по 100мс из таблицы, где всего 23 записи. 
 
Что смотреть? Почему оно опять перестало работать? Что проверить? 
 
Настройки кластера примерно такие: 
 
autovacuum = on 
log_autovacuum_min_duration = 1000 
 
autovacuum_max_workers = 4 
autovacuum_naptime = 1min 
autovacuum_vacuum_threshold = 50 
autovacuum_analyze_threshold = 50 
autovacuum_vacuum_scale_factor = 0.10 
autovacuum_analyze_scale_factor = 0.05 
 
autovacuum_vacuum_cost_delay = 0 
autovacuum_vacuum_cost_limit = 1000 
 
Ошибок в логе кластера - нет. 
 
 
		
		
		
 |  
	| 
		
	 | 
 
 
 |  
	| 
		
 |  
	| 
		
 |  
	| 
		
 |  
	
		
		
			| Re:  Перестает работать autovacuum, даже при отключении autovacuum_vacuum_cost_delay [сообщение #3192 является ответом на сообщение #3191] | 
			Wed, 27 September 2023 20:49   | 
		 
		
			
				
				
				
					
						  
						xpg934
						 Сообщений: 3 Зарегистрирован: September 2023 
						
					 | 
					Junior Member  | 
					 | 
		 
		 
	 | 
 
	
		Там причина понятна - по умолчанию включен cost-based autovacuum и он заставляет спать воркеры из-за огромного кол-ва записей в таблицах. 
Но это не наш случай, т.к. у нас autovacuum_cost_delay = 0, т.е. любые задержки вроде как отключены. 
 
Более того, я бы понял если бы autovacuum не запускался для каких-то отдельных, больших, таблиц. 
Но он не работает и для совсем маленьких, которые постоянно изменяются. 
Например такие: 
 
relname: contact_pools 
n_live_tup: 11434 
n_dead_tup: 2064 
autovacuum_count: 16727 
last_autovacuum: 2023-09-26 18:13:21.612 
last_autoanalyze: 2023-09-26 18:47:11.530  
 
Или ещё веселее: 
 
relname: ods_storage_sync_queue 
n_live_tup: 8 
n_dead_tup: 180542 
autovacuum_count: 74167 
last_autovacuum: 2023-09-26 18:48:11.868 
last_autoanalyze: 2023-09-26 18:48:11.869 
 
Обе таблицы давно требуют autovacuum, но нет. Как и все другие в этой базе (в кластере много баз). 
		
		
		
 |  
	| 
		
	 | 
 
 
 |   
Переход к форуму:
 
 Текущее время: Tue Nov 04 16:07:39 GMT+3 2025 
 Общее время, затраченное на создание страницы: 0.01158 секунд 
 |