зеркало из
				https://github.com/iharh/notes.git
				synced 2025-10-30 21:26:09 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			22 строки
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			22 строки
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Актуальная статистика очень важна для планировщика запросов PostgreSQL. 
 | |
| Если статистика устаревшая, то планировщик начнет строить неоптимальные планы запросов, что в свою очередь приведет к высокому потреблению CPU. 
 | |
| В такой ситуации уже будет даже не важно на сколько хорошо оптимизированы ваши запросы, если статистика сильно устаревшая, то планировщик все равно начнет ошибаться.
 | |
| 
 | |
| Информацию о том когда в последний раз собиралась статистика по таблице можно получить с помощью представления pg_stat_all_tables, выполнив вот такой запрос:
 | |
| 
 | |
| SELECT schemaname, relname, last_autoanalyze, last_analyze 
 | |
| FROM pg_stat_all_tables 
 | |
| WHERE relname = 'table_name';
 | |
| 
 | |
| Колонка last_autoanalyze покажет когда в таблицу приходил AUTOVACUUM и собрал статистику, 
 | |
| а колонка last_analyze покажет когда статистика собиралась вручную с помощью команды ANALYZE.
 | |
| 
 | |
| Соответственно, если вы увидели, что статистика по какой-то причине по таблице не собиралась очень давно, то ее надо срочно собрать вот такой командой:
 | |
| 
 | |
| ANALYZE table_name;
 | |
| 
 | |
| Это основные (на наш взгляд) причины высокого потребления CPU PostgreSQL. 
 | |
| Конечно могут быть и менее очевидные причины, например неисправности дисковой подсистемы, или какие-то очень сложные вычисления на стороне приложения, 
 | |
| которые сильно загрузили CPU. 
 | |
| В любом случае расследование таких проблем нужно начинать с нахождения неоптимальных запросов, так как это наиболее частая причина всех наших бед 😉.
 | 
