Next steps: managed MySQL, Aurora and cloud operations
Understand what a managed service does and does not take over, tune it through parameter groups and replicas, and keep the bill and the alerts under control.
What managed services actually manage
| The provider handles | You still own |
|---|---|
| Host provisioning, patching and minor upgrades | Schema design and query performance |
| Automated backups and snapshots | Restore rehearsals and retention policy |
| Failover automation and monitoring | Application retry behaviour and transaction boundaries |
| Storage growth and replication plumbing | Index choice and connection pooling |
| Metrics collection | Alert thresholds and knowing what normal looks like |
A managed instance is still a MySQL server with the same optimiser, the same locking model and the same failure modes. Moving to a managed service removes operational work; it does not remove the need to read a plan when a query gets slow.
Parameter groups, replicas and scaling
aws rds create-db-parameter-group \
--db-parameter-group-family mysql8.4 \
--db-parameter-group-name app-mysql84 \
--description "application tuning"
aws rds modify-db-parameter-group \
--db-parameter-group-name app-mysql84 \
--parameters "ParameterName=innodb_buffer_pool_size,ParameterValue=8589934592,ApplyMethod=immediate"
aws rds create-db-instance-read-replica \
--db-instance-identifier app-rr-1 \
--source-db-instance-identifier app-primary- Parameters have dynamic and static apply methods. A static change needs a reboot, so make it part of a maintenance window rather than a surprise.
- A read replica is a real MySQL server with real replication lag. Send reporting traffic to it, but read your own writes from the primary for a short window after an update.
- Aurora's storage layer is different from stock InnoDB: replicas share storage and apply changes into their own buffer pool, so replica lag behaviour and instance sizing do not behave exactly like a classic replica.
- Connection limits scale with instance size. Pooling matters more in a managed environment, not less, because you cannot raise
max_connectionsbeyond what the instance class allows. - Vertical scaling requires an instance replacement. Design so that the application can survive a failover or a reboot without manual intervention.
Cost and monitoring
| Lever | Effect |
|---|---|
| Storage type and size | General-purpose SSD is far cheaper than provisioned-IOPS storage |
| Instance right-sizing | CPU and memory metrics decide; over-provisioning is the common default |
| Reserved capacity | A large discount for a one- or three-year commitment on a steady workload |
| Backup retention | Longer retention and point-in-time recovery both bill continuously |
| Multi-AZ | Pays for standby capacity that may or may not be warranted |
| Non-production instances | A staging database left running over a weekend costs the same as production |
SELECT event_name, COUNT_STAR,
ROUND(SUM_TIMER_WAIT / 1e9, 1) AS total_ms
FROM performance_schema.events_statements_summary_global_by_event_name
WHERE event_name LIKE 'statement/sql/%'
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
SHOW GLOBAL STATUS WHERE Variable_name IN
('Threads_connected','Threads_running','Slow_queries','Aborted_connects',
'Innodb_buffer_pool_read_requests','Innodb_buffer_pool_reads');The two status counters listed last give you the buffer pool hit ratio: divide non-hit reads by total read requests. Alert when the ratio falls rather than when a single query is slow, because the ratio is a property of the whole workload and predicts the problem before users feel it.
FAQ
Should I move to a managed service?
Is Aurora always faster?
Related
High availability, Group Replication and upgrades Query optimisation and diagnostics
Last refreshed 2026-09-18.