How to diagnose where that terrible load on your PostgreSQL database server is coming from.
Before continue it's important to understand what heavy load for you is. Also, you may have the kind of system that needs to have large query volumes.
If you've come here because all of a sudden your system is slow and you don't know why, we can help you find the answer.
What are the resources that are being consumed the most?
htop to see, are you chewing RAM, I/O or CPU.
free shows you that you are using swap, you are running out of RAM.
Your best option is to increase the physical memory of the machine.
If this is not possible, try to stop all other non-essential services to reclaim that room.
To determine if I/O is the issue, look at how much wait time your system has.
top you can see this as the wa time.
Cpu(s): 0.3%us, 0.0%sy, 0.0%ni, 99.6%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
iotop is showing high values, find out where they are - in read or write side and for which processes.
iotop iotop -b5 -s1
htop you can see a lot of information at once, if there is a lot of red in the CPU area, that is wait time load.
If the CPUs are being used at high amounts but the bars are green, that means lots of user-space time is being chewed.
PostgreSQL Specific Performance
The tool pg_top is essential, it can show in near real-time the queries and connections.
pg_top pg_top -s2
Enable the Query logger to see which of your queries are the most frequent, then use
EXPLAIN ANALYZE to determine their costs.
Make the following adjustments to postgresql.conf.
log_duration = 'yes' log_statement = 'all'
Restart the database server, then use pg-query-log-stat.pl to give you details.
From the queries produced above you can then analyse them, determine which, if any, can be optimised.