Česky na konci článku.
When a production database becomes slow, the most dangerous response is to make changes before understanding the problem.
Increasing memory, adding CPU, creating indexes or changing database parameters can sometimes improve performance.
But they can also hide the real problem.
For a Senior Database Administrator, database performance troubleshooting should follow a structured methodology:
Measure → Isolate → Diagnose → Change → Validate
The objective is not simply to make one query faster.
The objective is to identify the root cause of the bottleneck and make the database platform more predictable under real production workloads.
1. Start With Response Time
Users experience response time.
The database administrator sees resources, waits and execution plans.
These two views need to be connected.
A simplified request path looks like:
If the application reports a response time of 5 seconds, that does not automatically mean the SQL statement spent 5 seconds executing inside the database.
The time could be distributed across several layers.
For example:
Optimizing SQL alone would address only part of the problem.
This is why senior DBA troubleshooting must be cross-layer.
2. Establish a Performance Baseline
Before changing anything, establish what „normal“ looks like.
Useful baseline metrics include:
- average query latency
- database response time
- transactions per second
- CPU utilization
- memory utilization
- I/O latency
- IOPS
- active sessions
- connection count
- lock waits
- replication lag
- cache hit ratios
- database growth
Without a baseline, it is difficult to determine whether a change actually improved the system.
A useful performance investigation therefore starts with:
One of the most valuable questions is:
What changed?
3. Performance Problems Often Begin With a Change
A database that has been stable for months suddenly becomes slow.
The DBA should immediately investigate recent changes.
For example:
- application deployment
- database upgrade
- statistics refresh
- new indexes
- changed execution plan
- increased data volume
- new workload
- storage migration
- configuration change
- network change
- increased concurrency
A performance regression often has a timeline.
Finding the moment when the system behavior changed can dramatically reduce troubleshooting time.
4. Find the SQL Consuming the Most Resources
A database can execute millions of SQL statements.
The DBA needs to identify which statements actually matter.
Useful dimensions include:
- total execution time
- average execution time
- CPU consumption
- logical reads
- physical reads
- executions
- rows processed
- memory consumption
- wait time
Consider two queries:
Query A is individually slow.
Query B may be the much larger production problem.
This distinction is extremely important.
A senior DBA should therefore analyze both:
Per-execution cost
and
Total workload cost.
5. Execution Plans Can Change
One of the most dangerous database performance problems is an unexpected execution-plan change.
A query that previously used:
may suddenly use:
The SQL text may not have changed.
Possible reasons include:
- changed statistics
- changed data distribution
- different bind values
- optimizer changes
- database upgrades
- new indexes
- dropped indexes
- changed configuration
This is why a senior DBA should not simply compare SQL text.
The DBA needs to compare execution plans and runtime behavior.
6. Oracle Performance Troubleshooting
Oracle provides a particularly rich set of performance diagnostics.
Important areas include:
- AWR
- ASH
- ADDM
- execution plans
- wait events
- SQL statistics
- system statistics
- I/O performance
- session activity
A simplified investigation might look like:
For example, AWR may show that database time increased dramatically.
ASH can then help identify which sessions and SQL statements contributed to that increase.
The execution plan can reveal how those statements were executed.
The important point is:
The diagnostic tool provides evidence. The DBA provides the interpretation.
7. PostgreSQL Performance Troubleshooting
PostgreSQL provides a different set of tools and concepts.
Important areas include:
pg_stat_activitypg_stat_statementsEXPLAINEXPLAIN ANALYZE- WAL activity
- autovacuum
- table and index bloat
- locks
- checkpoints
- replication
- I/O
A typical investigation could start with:
The goal is to understand what active sessions are doing and whether they are waiting.
For important SQL, the next step may be:
This can provide valuable information about:
- actual execution time
- row estimates
- actual rows
- buffer activity
- execution nodes
The difference between estimated rows and actual rows can be particularly useful when investigating optimizer problems.
8. MySQL Performance Troubleshooting
For MySQL, the investigation typically includes:
- Performance Schema
sysschema- slow query log
- execution plans
- InnoDB metrics
- buffer pool activity
- locks
- transactions
- replication
A DBA may begin with:
and then investigate the actual workload using Performance Schema and other monitoring data.
Important questions include:
- Which statements consume the most time?
- Which statements perform the most reads?
- Are transactions holding locks?
- Is InnoDB waiting for I/O?
- Is the buffer pool appropriately sized?
- Is replication introducing additional load?
9. Logical Reads vs. Physical Reads
A particularly important performance distinction is between logical and physical reads.
Conceptually:
A logical read can often be served from memory.
A physical read requires access to storage.
If a query performs an excessive number of physical reads, storage latency can become a major bottleneck.
But reducing physical I/O is not always as simple as increasing memory.
The DBA must first understand:
- which objects are being accessed
- which queries are responsible
- whether the access path is appropriate
- whether the workload is cache-friendly
- whether storage itself is the limiting factor
10. Locking and Blocking Can Look Like a Performance Problem
Sometimes the database is not CPU-bound or I/O-bound at all.
Sessions may simply be waiting for other sessions.
For example:
One transaction can therefore cause dozens or hundreds of other sessions to wait.
The resulting symptoms may look like:
- high response time
- low CPU
- low I/O
- increasing active sessions
This is a classic example of why resource utilization alone cannot explain database performance.
11. Concurrency Changes Everything
A query that performs well with one session may perform poorly with 500 concurrent sessions.
Concurrency can amplify:
- CPU consumption
- memory usage
- locks
- I/O
- connection overhead
- context switching
- contention
Consider:
Performance testing must therefore consider concurrency, not only single-query execution time.
12. Don’t Ignore the Application
The DBA should never assume that every performance problem is caused by the database.
Application behavior can create enormous database load.
Examples include:
- N+1 queries
- unnecessary polling
- excessive connections
- repeated identical queries
- missing pagination
- inefficient transactions
- fetching unnecessary columns
- committing too frequently
- keeping transactions open too long
A technically optimized database can still perform badly if the application generates an inefficient workload.
This is why senior DBAs need to communicate effectively with developers.
13. Performance Tuning Is a Trade-Off
There is rarely a change that improves everything.
For example, adding an index can improve:
but increase:
Increasing memory may reduce:
but excessive memory allocation can create:
Increasing parallelism may reduce execution time for one large query but increase:
A good DBA therefore asks:
What is the overall workload impact?
Not simply:
„Did this query get faster?“
14. Configuration Changes Should Be Evidence-Based
Database configuration contains hundreds of parameters.
Changing them without evidence creates risk.
A safer approach is:
For example:
„I/O latency is high.“
is an observation.
„Increasing the buffer pool will solve the problem.“
is a hypothesis.
The DBA should then test the hypothesis rather than treating it as fact.
15. Performance Tuning Needs Regression Testing
A successful optimization today can become a problem tomorrow.
Imagine that an index improves:
but the same index causes:
to become significantly slower.
Or a new execution plan improves one customer workload but makes another workload much worse.
Therefore performance changes should be validated against representative workloads.
The goal is:
Optimize the system, not one metric.
16. Automation Can Prevent Performance Incidents
Once a recurring performance problem has been identified, it should become a candidate for automation.
Examples:
or:
or:
This changes the DBA role from:
Incident responder
to:
Reliability engineer
17. Performance Engineering and Database Reliability
Performance and reliability are closely connected.
A database that regularly operates at:
may technically be available.
But it has very little resilience.
A small increase in workload can push the system into failure.
A reliable database platform therefore needs headroom.
The DBA should understand:
- current utilization
- growth trends
- capacity limits
- failure scenarios
- recovery capability
Performance engineering is therefore also a form of risk management.
18. The Senior DBA’s Real Advantage
Tools can collect metrics.
Monitoring systems can generate alerts.
AI can analyze patterns.
Cloud platforms can automate infrastructure.
But an experienced DBA can connect the evidence.
For example:
The individual metrics are useful.
The relationship between them is what reveals the root cause.
That is where senior-level database expertise becomes extremely valuable.
A Practical Senior DBA Troubleshooting Model
When investigating a production performance problem, use this sequence:
1. Define the symptom
What exactly is slow?
2. Establish the baseline
What did normal look like?
3. Identify the affected workload
Which applications, SQL statements or sessions are involved?
4. Identify the bottleneck
CPU, memory, I/O, locks, network or concurrency?
5. Compare historical behavior
What changed?
6. Validate the execution plan
Is SQL being executed efficiently?
7. Identify the root cause
Do not stop at the symptom.
8. Make a controlled change
Change one important variable.
9. Measure
Did the system actually improve?
10. Prevent recurrence
Automate detection, document the solution and improve the architecture.
Final Takeaway
Advanced Database Performance Troubleshooting is not about memorizing hundreds of database parameters.
It is about understanding how the entire system behaves.
The most important relationships are:
SQL → Execution Plan → Resources → Waits → Storage → Application → Business Impact
Oracle, PostgreSQL and MySQL provide different diagnostic mechanisms, but the underlying engineering principles are remarkably similar.
A strong DBA does not immediately ask:
„What parameter should I change?“
The better question is:
„What evidence do I have about the actual bottleneck?“
And the most important question after fixing the problem is:
„How do we make sure this problem is detected earlier—or does not happen again?“
That is the transition from traditional Database Administration to Database Performance Engineering and Database Reliability Engineering.
About the Author
Tomas Solar
Principal Database Reliability Engineer
20+ years of experience with Oracle, PostgreSQL, MySQL, SQL Server and MongoDB.
Specialized in Database Administration, Performance Engineering, High Availability, Disaster Recovery, Database Reliability, Automation, Database Migration and Database Architecture.
The best performance optimization is not the one that makes a query faster once. It is the one that makes the entire database platform predictable under real production load.
Troubleshooting výkonu databází: Jak najít skutečný bottleneck v Oracle, PostgreSQL a MySQL
Série #91 — část 2 | Advanced Database Performance
Když se produkční databáze zpomalí, jednou z nejnebezpečnějších reakcí je začít okamžitě měnit konfiguraci bez pochopení problému.
Přidání paměti, CPU, indexů nebo změna databázových parametrů může někdy výkon zlepšit.
Stejně tak ale může skutečný problém pouze zamaskovat.
Pro Senior Database Administrátora by proto měl troubleshooting výkonu probíhat systematicky:
Measure → Isolate → Diagnose → Change → Validate
Tedy:
Změřit → Izolovat → Diagnostikovat → Změnit → Ověřit
Cílem není pouze zrychlit jeden SQL dotaz.
Cílem je najít kořenovou příčinu bottlenecku a vytvořit databázovou platformu, jejíž výkon je předvídatelný i při reálném produkčním zatížení.
1. Začněte response time
Uživatel vnímá především dobu odezvy.
DBA naopak vidí zdroje, wait events a execution plans.
Tyto dva pohledy je potřeba propojit.
Zjednodušený průchod požadavku může vypadat:
Pokud aplikace hlásí response time 5 sekund, neznamená to automaticky, že SQL běželo 5 sekund v databázi.
Čas může být rozložen mezi několik vrstev:
Optimalizace SQL by v takovém případě vyřešila pouze část problému.
Proto musí seniorní DBA při troubleshootingu uvažovat napříč celým technologickým stackem.
2. Vytvořte performance baseline
Než začnete cokoliv měnit, potřebujete vědět, jak vypadá normální stav.
Mezi důležité metriky patří:
- průměrná latence SQL
- response time databáze
- transactions per second
- využití CPU
- využití paměti
- I/O latency
- IOPS
- počet aktivních sessions
- počet connections
- lock waits
- replication lag
- cache hit ratio
- růst databáze
Bez baseline je velmi obtížné určit, zda změna skutečně přinesla zlepšení.
Performance investigation by proto měla začínat:
Jedna z nejdůležitějších otázek zní:
Co se změnilo?
3. Performance problém často začíná změnou
Databáze může být měsíce stabilní a najednou se výrazně zpomalí.
První otázkou DBA by proto mělo být, co se v poslední době změnilo.
Například:
- deployment nové verze aplikace
- refresh statistik
- změna execution planu
- nové indexy
- změna objemu dat
- nový workload
- migrace storage
- změna konfigurace
- změna síťové infrastruktury
- zvýšení concurrency
Performance regression má často velmi konkrétní časovou osu.
Nalezení okamžiku, kdy se chování systému změnilo, může výrazně zkrátit dobu troubleshootingu.
4. Najděte SQL, které skutečně zatěžuje databázi
Databáze může zpracovávat miliony SQL statementů.
DBA musí zjistit, které z nich jsou skutečně důležité.
Sledovat lze například:
- celkový čas
- průměrný čas
- CPU consumption
- logical reads
- physical reads
- počet executions
- počet zpracovaných řádků
- memory consumption
- wait time
Například:
Query A je individuálně pomalý.
Query B ale může být mnohem větším produkčním problémem.
To je velmi důležité rozlišení.
Senior DBA by proto měl analyzovat:
náklady jednoho execution
i
celkové náklady workloadu.
5. Execution Plan se může změnit
Jedním z nejnebezpečnějších performance problémů je neočekávaná změna execution planu.
Dotaz, který dříve používal:
může najednou používat:
SQL se přitom vůbec nemuselo změnit.
Důvodem může být:
- změna statistik
- změna distribuce dat
- jiné bind values
- změna optimizeru
- upgrade databáze
- nový index
- odstraněný index
- změna konfigurace
Senior DBA proto nemůže porovnávat pouze SQL text.
Musí porovnávat execution plans a skutečné runtime chování.
6. Troubleshooting výkonu v Oracle
Oracle poskytuje velmi rozsáhlé možnosti diagnostiky výkonu.
Mezi důležité oblasti patří:
- AWR
- ASH
- ADDM
- execution plans
- wait events
- SQL statistics
- system statistics
- I/O performance
- session activity
Typický postup může vypadat:
Například AWR může ukázat výrazný nárůst database time.
ASH následně pomůže identifikovat konkrétní sessions a SQL, které se na nárůstu podílely.
Execution plan pak může ukázat, jakým způsobem byly tyto dotazy skutečně provedeny.
Důležité je:
Diagnostický nástroj poskytuje data. DBA poskytuje interpretaci.
7. Troubleshooting PostgreSQL
PostgreSQL používá jinou sadu nástrojů a mechanismů.
Důležité jsou například:
pg_stat_activitypg_stat_statementsEXPLAINEXPLAIN ANALYZE- WAL activity
- autovacuum
- table a index bloat
- locks
- checkpoints
- replication
- I/O
Analýzu lze například začít:
Cílem je zjistit, co aktivní sessions právě dělají a na co případně čekají.
U důležitých SQL může následovat:
To poskytuje informace například o:
- skutečném execution time
- odhadu počtu řádků
- skutečném počtu řádků
- buffer activity
- jednotlivých execution nodes
Velmi důležitý může být rozdíl mezi odhadovaným a skutečným počtem řádků.
8. Troubleshooting MySQL
U MySQL se performance investigation typicky zaměřuje na:
- Performance Schema
sysschema- slow query log
- execution plans
- InnoDB metrics
- buffer pool
- locks
- transactions
- replication
DBA může například začít:
a následně analyzovat skutečný workload pomocí Performance Schema a dalších diagnostických nástrojů.
Důležité otázky:
- Které SQL spotřebovává nejvíce času?
- Které SQL provádí nejvíce reads?
- Drží některé transakce locky?
- Čeká InnoDB na I/O?
- Je Buffer Pool správně nastaven?
- Nevytváří replication další zátěž?
9. Logical Reads vs. Physical Reads
Velmi důležité je rozlišovat mezi logical reads a physical reads.
Zjednodušeně:
Logical read může být obsloužen z paměti.
Physical read vyžaduje přístup ke storage.
Pokud dotaz provádí extrémní množství physical reads, může se storage latency stát hlavním bottleneckem.
Řešením ale nemusí být automaticky přidání paměti.
DBA musí nejdříve zjistit:
- které objekty se používají
- které SQL je čtou
- zda je access path správný
- zda je workload vhodný pro cache
- zda není problém přímo ve storage
10. Locking a blocking mohou vypadat jako performance problém
Databáze nemusí být CPU-bound ani I/O-bound.
Sessions mohou jednoduše čekat na jiné sessions.
Například:
Jedna transakce může způsobit, že čekají desítky nebo stovky dalších sessions.
Výsledkem může být:
- vysoký response time
- nízké CPU
- nízké I/O
- rostoucí počet aktivních sessions
Je to typický příklad toho, proč samotné využití zdrojů nedokáže vysvětlit výkon databáze.
11. Concurrency mění úplně všechno
Dotaz, který funguje dobře s jednou session, může mít úplně jiné chování při 500 současných sessions.
Concurrency může znásobit:
- CPU consumption
- memory usage
- locking
- I/O
- connection overhead
- context switching
- contention
Například:
Performance testing proto musí zohledňovat concurrency, nejen dobu provedení jednoho SQL.
12. Neignorujte aplikaci
DBA by nikdy neměl automaticky předpokládat, že každý performance problém způsobuje databáze.
Obrovskou zátěž může vytvořit samotná aplikace.
Typické problémy:
- N+1 queries
- zbytečný polling
- příliš mnoho connections
- opakované stejné dotazy
- chybějící pagination
- neefektivní transakce
- nepotřebné sloupce
- příliš časté COMMIT
- příliš dlouhé transakce
Databáze může být technicky velmi dobře optimalizovaná, ale pokud aplikace vytváří neefektivní workload, bude celý systém pomalý.
Proto musí seniorní DBA umět spolupracovat také s vývojáři.
13. Performance tuning je vždy určitý kompromis
Jen málokterá změna zlepší úplně všechno.
Například index může zrychlit:
ale zároveň zvýšit:
Více paměti může snížit:
ale příliš vysoká alokace může způsobit:
Vyšší parallelism může zrychlit jeden velký dotaz, ale současně zvýšit:
Dobrý DBA se proto ptá:
„Jaký bude dopad na celý workload?“
Ne pouze:
„Zrychlil se tento dotaz?“
14. Změny konfigurace musí být založené na důkazech
Databáze obsahují stovky konfiguračních parametrů.
Měnit je bez důkazů je rizikové.
Bezpečnější postup:
Například:
„I/O latency je vysoká.“
je pozorování.
„Zvětšení Buffer Pool problém vyřeší.“
je hypotéza.
DBA by měl hypotézu ověřit měřením, nikoli ji automaticky považovat za fakt.
15. Performance tuning potřebuje regression testing
Optimalizace, která dnes pomůže, může být za měsíc problémem.
Například nový index zlepší:
ale zároveň způsobí výrazné zpomalení:
Nebo nový execution plan zlepší workload jednoho zákazníka, ale zhorší workload jiného.
Proto je potřeba změny ověřovat proti reprezentativnímu workloadu.
Cíl je:
Optimalizovat systém, ne jeden jediný metric.
16. Automatizace může předcházet performance incidentům
Jakmile identifikujeme opakující se performance problém, měl by se stát kandidátem na automatizaci.
Například:
Nebo:
Nebo:
Tím se role DBA posouvá od:
Incident responder
k:
Reliability Engineer
17. Performance Engineering a Database Reliability
Výkon a spolehlivost spolu velmi úzce souvisejí.
Databáze, která dlouhodobě pracuje například na:
může být stále technicky dostupná.
Má ale velmi malou rezervu.
Malé zvýšení workloadu může systém dostat do problémů.
Spolehlivá databázová platforma proto potřebuje headroom.
DBA musí rozumět:
- současnému využití
- trendům růstu
- kapacitním limitům
- scénářům výpadků
- schopnosti recovery
Performance engineering je tedy zároveň určitým druhem risk managementu.
18. Skutečná výhoda Senior DBA
Monitoring umí sbírat metriky.
Monitoring platformy dokážou generovat alerty.
AI dokáže analyzovat určité vzorce.
Cloudové platformy dokážou automatizovat infrastrukturu.
Zkušený DBA ale dokáže propojit jednotlivé informace.
Například:
Jednotlivé metriky jsou užitečné.
Ale právě vztah mezi nimi často odhalí skutečnou root cause.
A právě zde se projevuje hodnota zkušeného databázového specialisty.
Praktický troubleshooting model pro Senior DBA
Při řešení produkčního performance problému doporučuji tento postup:
1. Definujte symptom
Co je přesně pomalé?
2. Vytvořte baseline
Jak vypadal normální stav?
3. Identifikujte workload
Která aplikace, SQL nebo sessions jsou problémem zasaženy?
4. Najděte bottleneck
CPU, memory, I/O, locks, network nebo concurrency?
5. Porovnejte historické chování
Co se změnilo?
6. Ověřte execution plan
Provádí se SQL efektivně?
7. Najděte root cause
Nezastavujte se pouze u symptomu.
8. Proveďte kontrolovanou změnu
Změňte jednu důležitou věc.
9. Změřte výsledek
Skutečně se systém zlepšil?
10. Zabraňte opakování
Automatizujte detekci, zdokumentujte řešení a zlepšete architekturu.
Závěr
Pokročilý Database Performance Troubleshooting není o memorování stovek databázových parametrů.
Je o pochopení toho, jak se celý systém chová.
Nejdůležitější vztahy jsou:
SQL → Execution Plan → Resources → Waits → Storage → Application → Business Impact
Oracle, PostgreSQL i MySQL mají rozdílné diagnostické mechanismy, ale základní principy jsou velmi podobné.
Silný DBA se neptá okamžitě:
„Jaký parametr mám změnit?“
Lepší otázka je:
„Jaké důkazy mám o skutečném bottlenecku?“
A po vyřešení problému přichází ještě důležitější otázka:
„Jak zajistíme, aby byl tento problém příště odhalen dříve – nebo aby už vůbec nenastal?“
Právě tím se tradiční Database Administration posouvá směrem k Database Performance Engineering a Database Reliability Engineering.
O autorovi
Tomas Solar
Principal Database Reliability Engineer
Více než 20 let zkušeností s Oracle, PostgreSQL, MySQL, SQL Server a MongoDB.
Specializace na Database Administration, Performance Engineering, High Availability, Disaster Recovery, Database Reliability, Automation, Database Migration a Database Architecture.
Nejlepší performance optimalizace není ta, která jednou zrychlí jeden dotaz. Je to ta, která udělá celou databázovou platformu předvídatelnou při reálném produkčním zatížení.
