User Tools

Site Tools


mysql:performance-scalability:scaling

Database Scaling (MySQL)

Scaling means:

increasing system capacity to handle more traffic, more data, and more users

In MySQL, scaling is mainly split into:

Vertical Scaling (Scale Up) Horizontal Scaling (Scale Out)

1. Vertical Scaling (Scale Up)

What is it?

Improve a single database server by increasing its resources:

CPU RAM SSD / Disk speed

Example

Before:

 DB Server: - 2 CPU - 4 GB RAM 

After scaling up:

 DB Server: - 8 CPU - 32 GB RAM - NVMe SSD 

Pros

simple to implement no application change no architecture change

Cons

limited by hardware max expensive at high scale single point of failure

When to use

small to medium systems early stage startups quick performance improvement

2. Horizontal Scaling (Scale Out)

What is it?

Add more database servers instead of upgrading one.

Example

 Instead of 1 big DB:

→ add multiple DB nodes

Architecture:

 App / \ Primary Replica 1 Replica 2 Replica 3 

Pros

high scalability high availability better fault tolerance can handle large traffic

Cons

complex architecture data consistency challenges more DevOps effort

Common Horizontal Scaling Strategies

1. Read Replicas (Read Scaling)

Most common approach.

 Primary → handles writes Replicas → handle reads 

Example

 GET /users → Replica DB GET /orders → Replica DB POST /orders → Primary DB 

Benefit:

reduces load on primary improves read performance

2. Sharding (Data Partitioning)

Split data into multiple databases.

Example

 Users DB split by user_id 

Shard rule:

 Shard 1 → user_id 1–1M Shard 2 → user_id 1M–2M Shard 3 → user_id 2M–3M 

Result

 Each DB stores only part of data 

Pros

very high scalability reduces per-node load

Cons

complex joins across shards difficult migrations hard transactions across shards

3. Master-Slave + Load Balancer

Common production setup:

 App | ---------------- | | Read LB Write Router | | | Replica Replica Primary 

Tools:

ProxySQL MySQL Router custom routing logic

Scaling Bottlenecks

1. CPU bottleneck

slow queries missing indexes heavy joins

Solution:

index tuning query optimization

2. Connection bottleneck

too many DB connections

Solution:

connection pool max_connections tuning

3. Write bottleneck

primary DB overloaded

Solution:

sharding queue-based writes caching

4. Read bottleneck

too many SELECT queries

Solution:

replicas caching (Redis)

Scaling + Caching Architecture

 App / | \ Redis Read Write | LB | Cache Replica Primary 

Flow:

read → Redis first miss → replica DB write → primary DB + invalidate cache

Real Production Example

System:

10M users 5K requests/sec

Solution:

 DB Layer: - 1 Primary - 5 Read Replicas

Cache Layer:

Redis Cluster

App Layer:

10+ backend pods 

Result:

reads handled by replicas + cache writes isolated to primary system scales horizontally

Summary

Type Description Use Case
Vertical Scaling Upgrade single DB machine small/medium systems
Horizontal Scaling Add more DB nodes large systems
Read Replicas Scale reads high traffic SELECT
Sharding Split data across DBs massive datasets
Caching Reduce DB load performance optimization
mysql/performance-scalability/scaling.txt · Last modified: by phong2018