Database Bottlenecks Every Internal PM Should Recognize


Hi Reader,

If you have ever taken over an internal product with
old architecture,
a complex SQL database,
and very little documentation…

You have probably worried about database performance.

I have been there.

And when the database struggles, everything struggles.

Because if your database is slow or unstable, your app is effectively down.

I am not a database expert.
But over time, I learned the high-level basics that help me investigate problems, ask better questions, and stop guessing.

That is what I want to share today.

Today in 10 minutes you will:

  • Understand the most common database bottlenecks
  • Learn how they usually show up in real life
  • Follow a solid investigation pattern
  • Walk away with a one-page summary you can reuse

My most recent database investigation


I recently took over a very old custom internal product.

The symptoms looked like this:

→ RAM usage suddenly spikes
→ CPU stays mostly fine
→ The app becomes slower and slower
→ A restart fixes it temporarily

What helped was not restarting faster.

What helped was understanding all the different things that can cause database bottlenecks, and ruling them out one by one.

A solid investigation pattern

This is the order I follow now.

1. Start with user symptoms

Before dashboards, ask:

→ Is the app slow, unavailable, or timing out?
→ Does it degrade over time or fail suddenly?
→ Does a restart help?

This already hints at memory, connections, or long transactions.


2. Check CPU

High CPU usually means too much work.

→ Constantly high CPU
→ Spikes during peak usage

Often caused by inefficient queries or missing indexes.


3. Check memory (RAM)

Important rule:

High RAM usage alone is not always bad.

Databases intentionally use memory for caching.

It becomes a problem when:

→ RAM keeps growing and never drops
→ Performance degrades over time
→ Swapping starts
→ Restarts fix things


4. Check connections

Very common in internal tools.

→ Too many open connections
→ No pooling
→ Connections not released properly

This often explains RAM pressure with normal CPU.


5. Look at queries

Only now do we zoom in.

→ Long-running queries
→ Queries pulling too much data
→ Missing indexes


6. Look at disk and I/O

Especially relevant for older systems.

→ Slow reads or writes
→ Batch jobs impacting users
→ Backups causing slowness


7. Look at locking and transactions

If performance feels random:

→ Queries waiting on each other
→ Writes blocking reads
→ Long transactions holding locks


The top 10 database bottlenecks explained simply

These are the ten most common ones PMs usually run into.

1. Inefficient database queries and indexing

Queries do more work than necessary.

Shows up as:
→ Slow responses
→ High CPU
→ Timeouts



2. Slow disk I/O

The database waits too long to read or write data.

Shows up as:
→ Slowness even with low CPU
→ Problems during heavy writes or reports


3. Network latency

The database itself is fine, but data travels slowly.

Shows up as:
→ Delays between app and database
→ Inconsistent response times



4. Locking and concurrency issues

Queries block each other.

Shows up as:
→ Random slowdowns
→ Requests waiting on other requests


5. Scaling and load limitations

The database cannot handle the current load.

Shows up as:
→ Performance drops under traffic
→ Spikes cause failures


6. Resource contention

Multiple workloads fight for the same resources.

Shows up as:
→ Unpredictable performance
→ Spikes without a clear cause


7. Inefficient data models

The schema makes queries more complex than needed.

Shows up as:
→ Too many joins
→ Hard-to-optimize queries


8. Unoptimized data retrieval

Too much data is fetched.

Shows up as:
→ Slow pages
→ High memory usage


9. Inadequate caching

The same expensive queries run again and again.

Shows up as:
→ Repeated database load
→ Slow responses for common actions


10. Long transactions

Transactions stay open too long.

Shows up as:
→ Locks
→ Cascading slowdowns
→ Other queries waiting


Is this actually part of my PM job?

I know, I know.

Digging into database and technical topics does not sound fun to everyone.
And you might be thinking:

Why am I doing this as a product manager?

Here is the reality.

If you have experienced developers and operations engineers on your team, and they can quickly troubleshoot, explain what is happening, and recommend the right fix, perfect. Let them do it.

But many internal PMs do not work in that setup.

Sometimes:
→ the team is understaffed
→ the most experienced engineer is on vacation
→ you are working with vendors
→ or you inherited a legacy product with very little context

And suddenly, you are the first line of investigation.

In those moments, knowing these basics helps you:
→ ask the right questions
→ collect the right signals before restarting systems
→ avoid panic-driven decisions
→ and move the conversation forward instead of blocking it

There is another benefit people often overlook.

Understanding database bottlenecks also changes how you work before things break.

It influences:
→ how you design new features with engineering
→ how you think about performance and scalability
→ how you prioritize and explain technical debt
→ and where you push for improvements early, instead of firefighting later

You do not need to become a database expert.

But having this mental model makes you a much stronger PM in real internal environments.

Summary: database bottlenecks, symptoms, and fixes

Summary: database, symptoms, and fixes

You can download the whole table from my Notion page here.

Behind the Scenes

I just came back from my parents’ home in Saint Petersburg.

It was nice to experience snow again and a very different kind of winter.
The city was full of people preparing for the holidays. Busy streets, lights everywhere, that end-of-year energy.

At the same time, I am happy to be back in Frankfurt.
Where going outside does not automatically mean three layers and a full winter strategy.

What do you think?

Have you ever inherited a product where the database felt like a black box?

Hit reply and tell me:
→ What was the symptom?
→ And what finally helped you understand it?

See you next week,

Maria

Frankfurt am Main, 60311, Germany
Unsubscribe · Preferences

Maria Korteleva

Hi, I’m Maria. For the past 7 years, I’ve been building internal products across FMCG and tech companies.Now, I share everything I’ve learned to help junior PMs master delivery from technical skills to stakeholder communication. Join 80+ Internal PMs who get weekly insights from the Build Internal Products newsletter.

Read more from Maria Korteleva

Hi Reader, Today I want to give you an unfiltered look at what a week as an internal PM actually looks like. Not the LinkedIn version. The real one. Spoiler: I updated servers, got humbled by engineering, and built something I'm proud of. All in one week. Today in 10 minutes you will: See what a real internal PM week looks like (calendar and all) Learn how I protect focus in a meeting-heavy environment See what surprised me and what I'm actually proud of New product, new surprise Last...

Hi Reader, today I am going to share a secret with you on how to stop being the human FAQ for your product. You can set it up in 30 minutes. And it will save you hours. The secret? An AI agent that answers your users before they ping you. Today in 10 minutes you will: Learn what documentation AI agents actually do See the 5 most common enterprise tools and their AI options Follow a step-by-step overview of how I built one Get a ready-to-use prompt to build your own Read the 5 lessons I...

Hi Reader, What’s one thing you slightly dread…and when it finally happens, it never quite goes to plan? There are many contenders.But for a lot of internal PMs, 1:1s with product or business leadership are right up there. Talking about your product.Your roadmap.Your priorities.Your asks. So today, let’s prep together. And if you don’t have a 1:1 scheduled yet, my hope is this gives you the confidence to set one up. Today in 10 minutes you will: Understand why 1:1s with leadership actually...