Skip to content

Higher CPU usage than usual db.t2.large Postgresql

0

Hello,

Since Wednesday, 26.05., we are experiencing higher CPU usage than usual on our db.t2.large Postgresql instance in eu-west-1a region. The usage is always above the 30% threshold and our CPU credits are almost over since they are reaching critical levels. The database is servicing a website which is not really that heavy and even during the night there are no visitors, just crawlers. For the first month and a half we didn't have any issues and now suddenly even if there are no connections the CPU usage is 26-28% and our credit usage is constantly above 3.

There is no increase in the users of the website, no problem with the EC2 server, no difference at all. It's even a weekend and there is even less writing on the DB, but still we are 300 credits down since yesterday. We are expecting to reach 0 credit balance at the end of today and the next week hasn't even started yet, when the people are actually active on the site.

What can we do? I have rebooted the instance, turned on Enhanced monitoring which proved that during the night there are 0 connections most of the time.

asked 7 years ago477 views

3 Answers
0

Apparently bots can cause this even if their crawling triggers one of the quickest requests. Quantity over quality here. Please delete the thread.

answered 7 years ago

0

What version of PostgreSQL is this?

Have you tried Performance Insights to see where the load is coming from?

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html

Kyle

answered 7 years ago

0

It sounds like you're dealing with a frustrating CPU issue on your RDS Postgres instance, especially since you've ruled out application traffic as the cause. Given that the CPU usage is high even with no active connections, the problem is almost certainly internal to the database itself. The most common culprits for this behavior are either a long-running or "stuck" query (perhaps initiated by a crawler or a background job and now running inefficiently) or intensive autovacuum processes. Postgres runs these maintenance tasks in the background to clean up the database, and if a table has seen a significant number of updates or deletes, autovacuum can consume considerable CPU resources to manage it. To diagnose this, your best tool is AWS RDS Performance Insights. Enable it if you haven't already, and set the timeframe to the period of high CPU usage; it will give you a clear, visual breakdown of exactly which queries or wait events (like I/O or locks) are consuming the CPU. You can also connect to your database and run a query against the pg_stat_activity view to see all current connections and their states; look for queries that have been running for a long time or connections that are stuck in an idle transaction state, as these can prevent vacuuming from completing. If you identify a problematic query, you can terminate its specific backend process for immediate relief using pg_terminate_backend(). For a long-term fix, you'll need to optimize that query, potentially by adding an index. However, given that you are on a db.t2.large burstable instance, it's also highly recommended to consider upgrading to a fixed-performance instance class, such as a db.m5.large. This will eliminate the CPU credit mechanism entirely, providing you with consistent CPU performance and preventing your database from being throttled, which is a critical consideration for any production environment.

answered a year ago

You are not logged in. Log in to post an answer.

A good answer clearly answers the question and provides constructive feedback and encourages professional growth in the question asker.