Troubleshooting and Performance
đ 151. Database suddenly became slow after deployment. How do you debug?â
āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻĄā§āĻĒā§āϞāϝāĻŧāĻŽā§āύā§āĻā§āϰ āĻĒāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻšāĻ āĻžā§ āϏā§āϞ⧠āĻšāϝāĻŧā§ āϝāĻžāĻāϝāĻŧāĻž āϏāĻĢāĻāĻāϝāĻŧā§āϝāĻžāϰ āĻāĻā§āĻāĻŋāύāĻŋāϝāĻŧāĻžāϰāĻŋāĻāϝāĻŧā§āϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻŽāύ āĻāĻŽāĻžāϰā§āĻā§āύā§āϏāĻŋ (P0 Incident) āĻā§āϞā§āϰ āĻāĻāĻāĻŋāĨ¤
āĻā§āĻāĻžāĻŦā§ āĻĄāĻŋāĻŦāĻžāĻ āĻāϰāĻŦā§āύ?
āύāϤā§āύ āĻĄā§āĻĒā§āϞāϝāĻŧāĻŽā§āύā§āĻā§āϰ āĻĒāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏā§āϞ⧠āĻšāϞ⧠āĻĒā§āϰāĻĨāĻŽā§āĻ āĻā§āĻĄ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰāĻžāϰ āĻāĻĨāĻž āĻāĻŋāύā§āϤāĻž āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āĻāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻāĻžāύā§āĻāĻļāύ āϞāĻŋāĻ, āĻĻā§āϰā§āĻāϏāĻŽāϝāĻŧ āϧāϰ⧠āĻāϞāĻž āϏā§āϞ⧠āĻā§āϝāĻŧā§āϰāĻŋ, āĻāĻŦāĻ āύāϤā§āύ āϰāĻŋāϞāĻŋāĻā§āϰ āĻāĻŋāĻ āĻāĻŽāĻŋāĻā§ āĻā§āύ⧠āĻāύ-āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻāĻĄ JOIN āĻŦāĻž āĻāύāĻĄā§āĻā§āϏāĻŋāĻ āĻāĻžāĻĄāĻŧāĻž āĻā§āϝāĻŧā§āϰāĻŋ āĻāĻā§ āĻāĻŋ āύāĻž āϤāĻž āĻāĻāĻĄā§āύā§āĻāĻŋāĻĢāĻžāĻ āĻāϰ ā§ āĻĢāĻŋāĻā§āϏ āĻāϰāϤ⧠āĻšāϝāĻŧāĨ¤
Technical summary: Debugging a slow database after a deployment involves immediately checking resource metrics, identifying unoptimized or new slow queries introduced in the release, analyzing active connections for potential leaks, and rolling back the deployment if the system is completely unresponsive.
đ What are the first things you would check?â
- CPU āĻ Memory Usage: āϏāĻžāϰā§āĻāĻžāϰā§āϰ āϰāĻŋāϏā§āϰā§āϏ āĻšāĻ āĻžā§ āĻāϰ⧠⧧ā§Ļā§Ļ% āĻšāϝāĻŧā§ āĻā§āĻā§ āĻāĻŋ āύāĻž āϤāĻž āĻā§āĻ āĻāϰāĻž (āϝā§āĻŽāύ:
htop,top, āĻŦāĻž CloudWatch āĻĻāĻŋāϝāĻŧā§)āĨ¤ - Active Connections & Locks: āύāϤā§āύ āĻā§āĻĄ āĻšāϝāĻŧāϤ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏā§āĻļāύ āĻŦāĻž āĻāĻžāύā§āĻāĻļāύ āĻ āĻŋāĻāĻŽāϤ⧠āĻā§āϞā§āĻ āĻāϰāĻā§ āύāĻžāĨ¤ āϏāĻŦāĻā§āϞ⧠āĻāĻžāύā§āĻāĻļāύ āĻĢā§āϞ āĻšāϝāĻŧā§ āĻā§āĻā§ āĻāĻŋ āύāĻž āϤāĻž āĻā§āĻ āĻāϰāĻž (āϝā§āĻŽāύ:
pg_stat_activityāĻŦāĻžSHOW PROCESSLISTāĻĻāĻŋāϝāĻŧā§)āĨ¤ - Recent Commits: āϞā§āĻā§āϏā§āĻ āϰāĻŋāϞāĻŋāĻā§āϰ āĻāĻŋāĻ āĻāĻŽāĻŋāĻ āĻā§āĻ āĻāϰāĻžāĨ¤ āύāϤā§āύ āĻā§āύ⧠āĻā§āϝāĻŧāĻžāϰāĻŋ,
JOIN, āĻŦāĻž ORM āĻāĻĒāĻĄā§āĻ āĻāϏā§āĻā§ āĻāĻŋ āύāĻž, āϝāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏāĻā§ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻĒā§āϰā§āĻļāĻžāϰ āĻĻāĻŋāĻā§āĻā§āĨ¤ - Quick Rollback:
đĄ Important Note: āϝāĻĻāĻŋ āϏāĻžāϰā§āĻāĻŋāϏ āĻĒā§āϰā§āĻĒā§āϰāĻŋ āĻĄāĻžāĻāύ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ āĻ āĻŦāĻ āĻāĻžāϰāĻŖ āĻŦā§āϰ āĻāϰāϤ⧠āĻĻā§āϰāĻŋ āĻšāϝāĻŧ, āϤāĻŦā§ āϰāĻŋāϏā§āĻ āύāĻž āύāĻŋāϝāĻŧā§ āϏāϰā§āĻŦāĻļā§āώ āϏā§āĻā§āϝāĻžāĻŦāϞ āĻŦāĻž āĻāĻā§āϰ āĻāĻžāϰā§āϏāύ⧠āĻā§āĻĄāĻāĻŋ Rollback āĻāϰ⧠āĻĢā§āϞāĻž āϏāĻŦāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āĻĄāĻŋāϏāĻŋāĻļāύ āĻšāĻāϝāĻŧāĻž āĻāĻāĻŋāϤāĨ¤
đ§Š How do you identify if it's a query or infrastructure issue?â
- Infrastructure Issue: āϝāĻĻāĻŋ āĻĻā§āĻā§āύ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āĻā§āϝāĻžāĻļ āϏāĻžāϰā§āĻāĻžāϰ, āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏāĻžāϰā§āĻāĻžāϰâāϏāĻŦāĻā§āϞā§āϰāĻ āϞā§āĻĄ āĻŦā§āĻļāĻŋ, āϤāĻŦā§ āĻāĻāĻŋ āĻāύāĻĢā§āϰāĻžāϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻŦāĻž āύā§āĻāĻāϝāĻŧāĻžāϰā§āĻ āĻāϏā§āϝ⧠(āĻŦāĻž āĻšāĻ āĻžā§ āĻā§āϰāĻžāĻĢāĻŋāĻ āϏā§āĻĒāĻžāĻāĻ/DDoS āĻ ā§āϝāĻžāĻāĻžāĻ) āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ Disk I/O āĻŦāĻž I/O Wait time āĻ āύā§āĻ āĻŦā§āĻļāĻŋ āĻĨāĻžāĻāĻž āĻŽāĻžāύ⧠āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ āϏāĻŽāϏā§āϝāĻž āĻšāĻā§āĻā§āĨ¤
- Query Issue: āϝāĻĻāĻŋ āĻāύāĻĢā§āϰāĻžāϏā§āĻā§āϰāĻžāĻāĻāĻžāϰā§āϰ āĻŽā§āĻā§āϰāĻŋāĻā§āϏ (CPU/RAM) āύāϰāĻŽāĻžāϞ āĻĨāĻžāĻā§ āĻāĻŋāύā§āϤ⧠āϏā§āĻĒā§āϏāĻŋāĻĢāĻŋāĻ āĻĒā§āĻ āϞā§āĻĄ āĻšāϤ⧠āĻĻā§āϰāĻŋ āĻšāϝāĻŧ, āĻāĻŦāĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāĻŋāĻā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ āϞāĻā§āĻ (Deadlocks āĻŦāĻž Long waiting transactions) āĻĻā§āĻāĻž āϝāĻžāϝāĻŧ, āϤāĻŦā§ āĻāĻāĻŋ āύāĻŋāĻļ ā§āĻāĻŋāϤāĻāĻžāĻŦā§ āĻŦā§āϝāĻžāĻĄ āĻā§āϝāĻŧāĻžāϰāĻŋ āĻŦāĻž āĻā§āĻĄāĻŋāĻ āĻāϏā§āϝā§āĨ¤
đ ī¸ What tools would you use for diagnosis?â
- APM Tools: Datadog, New Relic, āĻŦāĻž AppDynamics (āϝāĻž āĻĨā§āĻā§ āĻāύā§āĻĄ-āĻā§-āĻāύā§āĻĄ āϰāĻŋāĻā§āϝāĻŧā§āϏā§āĻ āĻā§āϰā§āϏāĻŋāĻ āĻāϰāĻž āϝāĻžāϝāĻŧ)āĨ¤
- DB Metrics: Prometheus + Grafana āĻĄā§āϝāĻžāĻļāĻŦā§āϰā§āĻĄāĨ¤
- Native DB Commands: MySQL āĻāϰ
EXPLAIN, PostgreSQL āĻāϰpg_stat_statementsāĻāĻā§āϏāĻā§āύāĻļāύāĨ¤
đĸ 152. How do you identify and fix a slow query?â
āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏā§āϞ⧠āĻā§āϝāĻŧāĻžāϰāĻŋ (Slow Query) āĻāĻāĻāĻŋ āύāĻŋāϰāĻŦ āĻāĻžāϤāĻ, āϝāĻž āĻĒā§āϰ⧠āϏāĻŋāϏā§āĻā§āĻŽāĻā§ āĻ āĻāϞ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻĒāĻžāϰā§āĨ¤
āĻļāύāĻžāĻā§āϤāĻāϰāĻŖ āĻāĻŦāĻ āϏāĻŽāĻžāϧāĻžāύ:
āϏā§āϞ⧠āĻā§āϝāĻŧā§āϰāĻŋ āĻļāύāĻžāĻā§āϤ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ slow_query_log āĻŦāĻž āĻā§āϞāĻžāĻāĻĄā§āϰ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ āĻŽā§āĻā§āϰāĻŋāĻā§āϏ āĻā§āĻ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻļāύāĻžāĻā§āϤ āĻāϰāĻžāϰ āĻĒāϰ EXPLAIN āĻŦāĻž EXPLAIN ANALYZE āĻāĻŽāĻžāύā§āĻĄ āĻāĻž āϞāĻŋāϝāĻŧā§ āĻāϰ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ āĻĒā§āϞā§āϝāĻžāύ (Execution Plan) āĻĻā§āĻāϤ⧠āĻšāϝāĻŧ āĻāĻŦāĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻāύāĻĄā§āĻā§āϏ āϝā§āĻ āĻāϰāĻž, N+1 āĻāϏā§āϝ⧠āϏāĻŽāĻžāϧāĻžāύ, āĻ
āĻĨāĻŦāĻž āĻā§āϝāĻŧā§āϰāĻŋ āϰāĻŋāϰāĻžāĻāĻ āĻāϰāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻāĻŋ āĻĢāĻŋāĻā§āϏ āĻāϰāĻž āĻšāϝāĻŧāĨ¤
Technical summary: Identifying a slow query involves monitoring the database's slow query logs. Fixing it requires running the EXPLAIN command to analyze the query execution path and applying optimizations such as creating missing indexes, refactoring the query, or resolving ORM N+1 issues.
âąī¸ What is query profiling?â
āĻā§āϝāĻŧāĻžāϰāĻŋ āĻĒā§āϰā§āĻĢāĻžāĻāϞāĻŋāĻ āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻĒā§āϰāϏā§āϏ āϝāĻž āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻā§āĻāĻŋāύāĻā§ āύāĻŋāϰā§āĻĻā§āĻļ āĻĻā§āϝāĻŧ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻā§āϝāĻŧāĻžāϰāĻŋ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻšāϤ⧠āĻāϤ āĻŽāĻŋāϞāĻŋ-āϏā§āĻā§āύā§āĻĄ āϏāĻŽāϝāĻŧ āϞāĻžāĻāĻā§ āϤāĻžāϰ āĻāĻāĻāĻŋ āϞāĻŋāϏā§āĻ āϤā§āϰāĻŋ āĻāϰāϤā§āĨ¤
đ Note: āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏāĻžāϧāĻžāϰāĻŖāϤ
slow_query_logāĻāύāĻĢāĻŋāĻ āĻāϰāĻž āĻĨāĻžāĻā§ (āϝā§āĻŽāύ: ā§§ āϏā§āĻā§āύā§āĻĄā§āϰ āĻŦā§āĻļāĻŋ āϞāĻžāĻāϞ⧠āϏā§āĻāĻŋ āϞāĻā§ āĻāύā§āĻā§āϰāĻŋ āĻšāĻŦā§)āĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻ ā§āϝāĻžāĻĄāĻŽāĻŋāύāϰāĻžpt-query-digestāĻŦāĻž AWS Performance Insights āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϏāĻŦāĻā§āϝāĻŧā§ āĻŦā§āĻļāĻŋ āϏāĻŽāϝāĻŧ āύā§āϝāĻŧāĻž āĻāĻĒ āĻā§āϝāĻŧāĻžāϰāĻŋāĻā§āϞ⧠āĻŦā§āϰ āĻāϰā§āύāĨ¤
đŦ How do you use EXPLAIN plan?â
āϝāĻāύ āĻāĻĒāύāĻŋ āϏā§āϞ⧠āĻā§āϝāĻŧāĻžāϰāĻŋāĻāĻŋ āĻāĻāĻĄā§āύā§āĻāĻŋāĻĢāĻžāĻ āĻāϰ⧠āĻĢā§āϞāĻŦā§āύ, āϤāĻāύ āϤāĻžāϰ āϏāĻžāĻŽāύ⧠EXPLAIN āĻŦāĻž EXPLAIN ANALYZE āϞāĻŋāĻā§ āϰāĻžāύ āĻāϰāĻŦā§āύāĨ¤
EXPLAIN ANALYZE SELECT * FROM users WHERE status='active';
- EXPLAIN āĻā§ āĻāϰā§? āĻāĻāĻŋ āĻā§āϝāĻŧāĻžāϰāĻŋāĻāĻŋ āϰāĻžāύ āύāĻž āĻāϰ⧠āĻļā§āϧ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻā§āĻāĻŋāύāĻā§ āĻāĻŋāĻā§āĻā§āϏ āĻāϰā§â"āϤā§āĻŽāĻŋ āĻā§āύ āĻĒā§āϰāĻā§āϰāĻŋāϝāĻŧāĻžāϝāĻŧ āĻĄā§āĻāĻžāĻāĻŋ āĻā§āĻāĻāĻŦā§?"
- āĻāĻāĻŋ āϝ⧠āĻāĻāĻāĻĒā§āĻ āĻĻā§āϝāĻŧ āϤāĻžāϤ⧠āĻŦā§āĻāĻž āϝāĻžāϝāĻŧ āĻāĻā§āĻāĻŋāύ āĻāĻŋ Index Scan (āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāύāĻĄā§āĻā§āϏ āϧāϰ⧠āĻĄā§āĻāĻž āĻā§āĻāĻāĻā§) āύāĻžāĻāĻŋ Seq Scan / Full Table Scan (āĻāύāĻĄā§āĻā§āϏ āύāĻž āĻĒā§āϝāĻŧā§ āĻā§āĻŦāĻŋāϞā§āϰ āϞāĻžāĻ āϞāĻžāĻ āϰ⧠āĻāĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāϰ⧠āĻā§āĻ āĻāϰāĻā§) āĻāϰāĻā§āĨ¤
â ī¸ Common causes of slow queries?â
- Missing Indexes (Most Common):
WHEREāĻŦāĻžJOINāĻā§āϞāĻā§ āĻŦā§āϝāĻŦāĻšā§āϤ āĻāϞāĻžāĻŽāĻā§āϞā§āϤ⧠āĻāύāĻĄā§āĻā§āϏ āύāĻž āĻĨāĻžāĻāĻžāĨ¤ - N+1 Problem in ORM: āĻā§āĻĄā§āϰ āĻā§āϞā§āϰ āĻāĻžāϰāĻŖā§ ā§§āĻāĻŋ āĻŦāĻĄāĻŧ āĻā§āϝāĻŧāĻžāϰāĻŋāϰ āĻŦāĻĻāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠⧧ā§Ļā§ĻāĻāĻŋ āĻā§āĻ āĻā§āϝ āĻŧāĻžāϰāĻŋ āĻĒāĻžāĻ āĻžāύ⧠(āĻŦāĻŋāĻļā§āώ āĻāϰ⧠Laravel/Django-āϤā§)āĨ¤
- Full Table Scans: āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŦāĻžāϧā§āϝ āĻšā§ā§ āĻāύāĻĄā§āĻā§āϏ āĻāĻāύā§āϰ āĻāϰāĻž (āϝā§āĻŽāύ
LIKE '%name%'āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž)āĨ¤ - Data Volume Limit: āĻāĻ āĻā§āϝāĻŧāĻžāϰāĻŋāϤ⧠āϞāĻžāĻ āϞāĻžāĻ āĻĄā§āĻāĻž āĻāύāĻž (Pagination āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰāĻž)āĨ¤
đž 153. Database is running out of disk space. What do you do?â
āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏā§āĻĒā§āϏ ā§§ā§Ļā§Ļ% āĻĢā§āϞ āĻšāϝāĻŧā§ āĻā§āϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĒā§āϰā§āĻĒā§āϰāĻŋ āĻĢā§āϰāĻŋāĻ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧ, āĻā§āύ⧠Insert āĻŦāĻž Update āĻāĻžāĻ āĻāϰ⧠āύāĻžāĨ¤
āĻā§āĻāĻžāĻŦā§ āϏā§āĻĒā§āϏ āϰāĻŋāĻāĻāĻžāϰ āĻāϰāĻŦā§āύ? āϤāĻžā§āĻā§āώāĻŖāĻŋāĻ āϏāĻŽāĻžāϧāĻžāύ āĻšāĻŋāϏā§āĻŦā§ āĻā§āϞāĻžāĻāĻĄā§āϰ āϏā§āĻā§āϰā§āĻ āϏā§āĻā§āϞ-āĻāĻĒ āĻāϰāϤ⧠āĻšāϝāĻŧ āĻŦāĻž āĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻā§āĻŽā§āĻĒā§āϰāĻžāϰāĻŋ āϞāĻ āĻĄāĻŋāϞāĻŋāĻ āĻāϰāϤ⧠āĻšāϝāĻŧāĨ¤ āĻĻā§āϰā§āĻāĻŽā§āϝāĻŧāĻžāĻĻā§ āϏāĻŽāĻžāϧāĻžāύā§āϰ āĻāύā§āϝ āĻĒā§āϰāĻžāύ⧠āĻ āĻĄāĻŋāĻ āĻŦāĻž āĻšāĻŋāϏā§āĻā§āϰāĻŋāĻā§āϝāĻžāϞ āĻĄā§āĻāĻžāĻā§ āϏāϏā§āϤāĻž āĻ āĻŦāĻā§āĻā§āĻ āϏā§āĻā§āϰā§āĻā§ (āϝā§āĻŽāύ: S3) āĻāϰā§āĻāĻžāĻāĻ āĻāϰāϤ⧠āĻšāϝāĻŧ āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āĻŦāĻŋāϞ āĻĒāĻžāϰā§āĻāĻŋāĻļāύāĻŋāĻ āĻ āύāĻŋāϝāĻŧāĻŽāĻŋāϤ VACUUM/OPTIMIZE āĻāĻžāϞāĻŋāϝāĻŧā§ āϏā§āĻā§āϰā§āĻ āĻā§āϞāĻŋāύ āϰāĻžāĻāϤ⧠āĻšāϝāĻŧāĨ¤
Technical summary: Handling low database disk space involves immediate mitigation by scaling up the volume storage or deleting safe temporary logs. Long-term strategies include data archiving to cheaper storage, setting up table partitioning, and performing routine database maintenance like VACUUM to reclaim space from dead rows.
âŗ Short-term vs long-term solutions?â
Short-Term (āϤāĻžāϤā§āĻā§āώāĻŖāĻŋāĻ āϏāĻŽāĻžāϧāĻžāύ):
- āĻā§āϞāĻžāĻāĻĄ āĻĒāϰāĻŋāĻŦā§āĻļā§ (AWS/GCP) āϤāĻžā§āĻā§āώāĻŖāĻŋāĻāĻāĻžāĻŦā§ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§āϰ (EBS Volume) āϏā§āĻā§āϰā§āĻ āĻŦāĻžāĻĄāĻŧāĻŋāϝāĻŧā§ (Scale up storage) āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻāϞ āĻāϰāĻžāĨ¤
- āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻĒā§āϰā§āύ⧠āĻāύāĻāĻāĻāĻĄ āϞāĻ āĻĢāĻžāĻāϞ (
WAL logsāĻŦāĻžError logs), Temporary Tables āĻŦāĻž āĻĢā§āĻāϞ āĻšāĻāϝāĻŧāĻž āĻā§āϰāĻžāύāĻā§āĻāĻļāύā§āϰ āĻā§āĻŽā§āĻĒā§āϰāĻžāϰāĻŋ āĻĄā§āĻāĻž (VACUUM āĻāϰā§) āĻĄāĻŋāϞāĻŋāĻ āĻāϰ⧠āĻāĻŽāĻžāϰā§āĻā§āύā§āϏāĻŋ āϏā§āĻĒā§āϏ āĻŦā§āϰ āĻāϰāĻžāĨ¤
Long-Term (āĻĻā§āϰā§āĻāĻŽā§āϝāĻŧāĻžāĻĻā§ āϏāĻŽāĻžāϧāĻžāύ):
- Data Archiving: ā§Ģ āĻŦāĻž ā§Š āĻŦāĻāϰā§āϰ āĻĒā§āϰā§āύ⧠āϞā§āύāĻĻā§āύ (Historical Data / Audit Logs) āĻŽā§āĻāύ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āϏāϰāĻŋāϝāĻŧā§ āϏāϏā§āϤāĻž āϏā§āĻā§āϰā§āĻ (āϝā§āĻŽāύ: Amazon S3 āĻŦāĻž Glacier) āĻ āĻāϰā§āĻāĻžāĻāĻ āĻāϰāĻžāĨ¤
- Table Partitioning: āĻŦāĻŋāĻļāĻžāϞ āĻā§āĻŦāĻŋāϞāĻā§āϞā§āĻā§ āĻŽāĻžāϏ āĻŦāĻž āĻŦāĻāϰ āĻ āύā§āϝāĻžāϝāĻŧā§ āĻĒāĻžāϰā§āĻāĻŋāĻļāύ āĻāϰāĻž, āϝāĻžāϤ⧠āĻĒā§āϰā§āύ⧠āĻĄā§āĻāĻž āĻŽā§āĻā§ āĻĢā§āϞāĻž āĻŦāĻž āĻāϰā§āĻāĻžāĻāĻ āĻāϰāĻž āϏāĻšāĻ āĻšāϝāĻŧāĨ¤
đ How do you identify what's consuming space?â
āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āύāĻŋāĻāϏā§āĻŦ āĻŽā§āĻāĻžāĻĄā§āĻāĻž āĻā§āĻŦāĻŋāϞāĻā§āϞā§āϤ⧠āĻā§āϝāĻŧāĻžāϰāĻŋ āĻāĻžāϞāĻŋāϝāĻŧā§ āĻŦā§āϰ āĻāϰāϤ⧠āĻšāϝāĻŧāĨ¤
-- PostgreSQL Example
SELECT pg_total_relation_size('table_name');
đĄ Tip: āĻāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻā§āĻŦāĻŋāϞā§āϰ āĻāϏāϞ āϏāĻžāĻāĻ, āĻāύāĻĄā§āĻā§āϏā§āϰ āϏāĻžāĻāĻ, āĻāĻŦāĻ "Bloat" (āĻŽā§āϤ āĻĄā§āĻāĻžāϰ āϏāĻžāĻāĻ) āĻĻā§āĻāĻž āĻšāϝāĻŧāĨ¤ āĻ āύā§āĻ āϏāĻŽāϝāĻŧ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻ āĻĒā§āϰāϝāĻŧā§āĻāύā§āϝāĻŧ āĻĒā§āϰāĻā§āϰ āĻāύāĻĄā§āĻā§āϏ āĻĨāĻžāĻā§, āϝāĻž āĻāϏāϞ āĻĄā§āĻāĻžāϰ āĻā§āϝāĻŧā§āĻ āĻŦā§āĻļāĻŋ āϏā§āĻĒā§āϏ āĻāĻžāϝāĻŧāĨ¤
đ§š Database maintenance tasks to free up space?â
- VACUUM / OPTIMIZE TABLE: āϰāĻŋāϞā§āĻļāύāĻžāϞ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āĻā§āύ⧠Row āĻĄāĻŋāϞāĻŋāĻ āĻāϰāϞ⧠āϤāĻž āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻ āĻĨā§āĻā§ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ āĻŽā§āĻā§ āϝāĻžāϝāĻŧ āϏāĻžāϏāĻĒā§āύā§āĻĄ āĻšāϝāĻŧ āύāĻž (Soft dead rows)āĨ¤
VACUUM(Postgres) āĻŦāĻžOPTIMIZE TABLE(MySQL) āĻāĻŽāĻžāĻŖā§āĻĄ āĻāĻžāϞāĻžāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽā§āĻŽāϰāĻŋ āϰāĻŋ-āĻ āϰā§āĻāĻžāύāĻžāĻāĻ āĻāϰ⧠āĻĄāĻŋāϏā§āĻ āϏā§āĻĒā§āϏ āĻĢā§āϰāĻŋ āĻāϰā§āĨ¤
đ 154. Too many database connections error. How to resolve?â
â ī¸ Error:
FATAL: sorry, too many clients alreadyāĻāĻ āĻāϰāϰāĻāĻŋāϰ āĻŽāĻžāύ⧠āĻšāϞ⧠āĻāĻĒāύāĻžāϰ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϞāĻŋāĻŽāĻŋāĻ āĻĒāĻžāϰ āĻāϰ⧠āĻāϤ āĻŦā§āĻļāĻŋ āĻāĻžāύā§āĻāĻļāύ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻā§āϞā§āĻā§ āϝ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āύāϤā§āύ āϰāĻŋāĻā§āϝāĻŧā§āϏā§āĻ āϰāĻŋāĻā§āĻā§āĻ āĻāϰ⧠āĻĻāĻŋāĻā§āĻā§āĨ¤
āĻā§āĻāĻžāĻŦā§ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻŦā§āύ? āĻāĻ āĻāϰāϰ āĻĨā§āĻā§ āĻŦāĻžāĻāĻāĻžāϰ āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻžāϰā§āϝāĻāϰ⧠āĻāĻĒāĻžāϝāĻŧ āĻšāϞ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŽāĻžāĻā§ Connection Pool (āϝā§āĻŽāύ: PgBouncer āĻŦāĻž HikariCP) āϝā§āĻā§āϤ āĻāϰāĻžāĨ¤ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻāĻā§āϝāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻžāύā§āĻāĻļāύ āϰāĻŋ-āĻāĻāĻ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŽā§āϝāĻžāĻā§āϏāĻŋāĻŽāĻžāĻŽ āĻāĻžāύā§āĻāĻļāύ āϞāĻŋāĻŽāĻŋāĻ (max_connections) āĻšā§āĻ āĻāϰ⧠āĻŦāĻžāĻĄāĻŧāĻŋāϝāĻŧā§ āĻĻāĻŋāϞ⧠RAM āĻĢā§āϞ āĻšāϝāĻŧā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰā§āϝāĻžāĻļ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
Technical summary: Resolving the "too many connections" error requires implementing connection pooling at the application or middleware layer to reuse a limited number of active connections. Blindly increasing the database max_connections parameter is discouraged as it often leads to Out of Memory (OOM) crashes.
đĩī¸ How do you identify connection leaks?â
Connection Leak āĻšāϝāĻŧ āϝāĻāύ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻāĻāĻāĻŋ āϏā§āĻļāύ āĻā§āϞ⧠āĻāĻŋāύā§āϤ⧠āĻĄā§āĻāĻž āϰāĻŋāĻĄ āĻāϰāĻžāϰ āĻĒāϰ āĻā§āĻĄā§ āϏā§āĻ āĻāĻžāύā§āĻāĻļāύāĻāĻŋ close() āĻāϰāϤ⧠āĻā§āϞ⧠āϝāĻžāϝāĻŧ āĻŦāĻž āĻāϰāϰ āĻšāϝāĻŧā§ āĻāĻāĻā§ āĻĨāĻžāĻā§āĨ¤
- āϏāύāĻžāĻā§āϤ āĻāϰāϤ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻ
ā§āϝāĻžāĻā§āĻāĻŋāĻ āϏā§āĻļāύāĻā§āϞā§āϤ⧠(āϝā§āĻŽāύ
pg_stat_activity) āĻāĻāĻĄāϞ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ (Idle transactions) āĻā§āĻāĻāϤ⧠āĻšāϝāĻŧ āϝāĻž āĻ āύā§āĻ āϏāĻŽāϝāĻŧ āϧāϰ⧠āĻļā§āϧ⧠āĻāĻĒā§āύ āĻšāϝāĻŧā§ āĻŦāϏ⧠āĻāĻā§ āĻāĻŋāύā§āϤ⧠āĻā§āύ⧠āĻā§āϝāĻŧāĻžāϰāĻŋ āϰāĻžāύ āĻāϰāĻā§ āύāĻžāĨ¤
đââī¸ What is connection pooling and how does it help?â
āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻžāĻĨā§ āĻāĻžāύā§āĻāĻļāύ āĻāĻĒā§āύ āĻāϰāĻž (TCP Handshake, Authentication) āĻ āϤā§āϝāύā§āϤ āϏāĻŽāϝāĻŧāϏāĻžāĻĒā§āĻā§āώ āĻāĻŦāĻ āĻāϰā§āĻā§āĨ¤
- Connection Pooling: (āϝā§āĻŽāύ: PgBouncer, HikariCP) āĻšāϞ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŽāĻžāĻāĻāĻžāύ⧠āĻĨāĻžāĻāĻž āĻāĻāĻāĻŋ āϞā§āϝ āĻŧāĻžāϰāĨ¤ āĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻžāĻĨā§ āĻ āϞā§āĻĒ āĻāĻŋāĻā§ (āϧāϰāĻŋ ā§Ģā§ĻāĻāĻŋ) āĻĒāĻžāϰā§āĻŽāĻžāύā§āύā§āĻ āĻāĻžāύā§āĻāĻļāύ āĻā§āϞ⧠āϰāĻžāĻā§ (Pool)āĨ¤
- āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĨā§āĻā§ ā§Ģ āĻšāĻžāĻāĻžāϰ āĻāĻāĻāĻžāϰ āϰāĻŋāĻā§āϝāĻŧā§āϏā§āĻ āĻāϏāϞā§āĻ, āĻĒā§āϞāĻŋāĻ āĻāĻ ā§Ģā§ĻāĻāĻŋ āĻāĻžāύā§āĻāĻļāύā§āϰ āĻŽāϧā§āϝā§āĻ āϏāĻŦāĻžāĻāĻā§ āϰāĻžāĻāύā§āĻĄ-āϰāĻŦāĻŋāύ āĻāϰ⧠āϏāĻžāϰā§āĻ āĻāϰā§āĨ¤ āĻā§āĻ āĻāĻžāĻ āĻļā§āώ āĻāϰāϞ⧠āĻāĻ āϰā§āĻĄāĻŋāĻŽā§āĻĄ āĻāĻžāύā§āĻāĻļāύāĻāĻŋ āĻ
āύā§āϝ āĻāĻāĻāύāĻā§ āϧāϰāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧāĨ¤ āĻāϤā§
Too many connectionsāĻāϰāϰ āĻāĻāύā§āĻ āĻāϏ⧠āύāĻžāĨ¤
âī¸ How do you tune max_connections parameter?â
āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ max_connections āĻā§āϝāĻžāϞā§āĻāĻŋ āĻšā§āĻ āĻāϰ⧠āĻ
āύā§āĻ āĻŦāĻžāĻĄāĻŧāĻŋāϝāĻŧā§ āĻĻā§āϝāĻŧāĻž āĻāĻāĻāĻŋ āĻŽāĻžāϰāĻžāϤā§āĻŽāĻ āĻā§āϞāĨ¤
đ¨ Warning: āĻĒā§āϰāϤāĻŋ āĻāĻžāύā§āĻāĻļāύ āϏāĻžāϧāĻžāϰāĻŖāϤ ⧍-ā§§ā§Ļ āĻŽā§āĻāĻžāĻŦāĻžāĻāĻ āĻŽā§āĻŽāϰāĻŋ āĻāĻžāϝāĻŧāĨ¤ āĻāĻžāύā§āĻāĻļāύ āϞāĻŋāĻŽāĻŋāĻ āĻŦā§āĻļāĻŋ āĻŦāĻžāĻĄāĻŧāĻžāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ RAM āĻĢā§āϞ (Out of Memory - OOM) āĻšāϝāĻŧā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰā§āϝāĻžāĻļ āĻāϰāĻŦā§āĨ¤
- Calculation Formula:
Number of CPU Cores à 2 + Effective Spindle Count(Disk I/O āĻā§āώāĻŽāϤāĻž)āĨ¤ - āϤāĻžāĻ āϞāĻŋāĻŽāĻŋāĻ āĻŦāĻžāĻĄāĻŧāĻžāύā§āϰ āĻŦāĻĻāϞ⧠āϏāĻŦāϏāĻŽāϝāĻŧ Connection Pool āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤
âąī¸ 155. Replication lag is very high. What would you do?â
Replication Lag āĻŦāĻž āϰā§āĻĒā§āϞāĻŋāĻā§āĻļāύ āĻĄāĻŋāϞ⧠āϤāĻāύ āĻšāϝāĻŧ, āϝāĻāύ Primary (Master) āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āĻĄā§āĻāĻž Secondary (Slave) āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāϏāϤ⧠āĻāĻŦāĻ āĻāĻĒāĻĄā§āĻ āĻšāϤ⧠āĻ āύā§āĻ āĻŦā§āĻļāĻŋ āϏāĻŽāϝāĻŧ āύāĻŋāĻā§āĻā§āĨ¤ āĻĢāϞ⧠āĻāĻāĻāĻžāϰ Secondary āĻĨā§āĻā§ āĻĄā§āĻāĻž āĻĒāĻĄāĻŧāϞ⧠āĻĒā§āϰā§āύ⧠āĻā§āϞ āĻĄā§āĻāĻž āĻĻā§āĻāϤ⧠āĻĒāĻžāϝāĻŧāĨ¤
āĻā§āĻāĻžāĻŦā§ āϰāĻŋāĻāĻāĻžāϰ āĻāϰāĻŦā§āύ? āϰā§āĻĒā§āϞāĻŋāĻā§āĻļāύ āϞā§āϝāĻžāĻ āĻāĻŽāĻžāύā§āϰ āĻāύā§āϝ Slave āύā§āĻĄā§ āĻŽāĻžāϞā§āĻāĻŋ-āĻĨā§āϰā§āĻĄā§āĻĄ (Parallel) āϰā§āĻĒā§āϞāĻŋāĻā§āĻļāύ āĻāĻžāϞ⧠āĻāϰāĻž āĻšāϝāĻŧ, āϝā§āύ āĻāĻāĻŋ āĻŽāĻžāϏā§āĻāĻžāϰā§āϰ āĻŽāϤāĻ āĻĻā§āϰā§āϤ āϏā§āĻĒāĻŋāĻĄā§ āĻĄā§āĻāĻž āϰāĻžāĻāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ āϝāĻĻāĻŋ āĻŽāĻžāϏā§āĻāĻžāϰ⧠āĻŦāĻŋāĻļāĻžāϞ āĻā§āύ⧠āĻŦā§āϝāĻžāĻ āĻĄā§āĻāĻž āĻāĻĒāĻĄā§āĻ (Bulk Update) āĻāϞā§, āϤāĻŦā§ āϤāĻž āĻā§āĻ āĻā§āĻ āĻŦā§āϝāĻžāĻā§ āĻāĻžāĻ āĻāϰ⧠āϰāĻžāύ āĻāϰāϞ⧠āϞā§āϝāĻžāĻ āϤā§āϰāĻŋ āĻšāϝāĻŧ āύāĻžāĨ¤
Technical summary: High replication lag is fixed by enabling multi-threaded parallel replication on the secondary nodes, upgrading the read-replica's I/O throughput to match the primary, and avoiding massive bulk writes on the primary database by breaking them down into smaller periodic batches.
đ How do you measure replication lag?â
- MySQL:
SHOW SLAVE STATUS\G;
-- Check the 'Seconds_Behind_Master' field. (0 = no lag).
- PostgreSQL:
pg_stat_replicationāĻāĻŋāĻ āĻĨā§āĻā§ āϞā§āϝāĻžāĻ āĻŽāĻžāĻĒāĻž āϝāĻžāϝāĻŧāĨ¤
đ§ Common causes of high replication lag?â
- Network Latency: āĻŽāĻžāϏā§āĻāĻžāϰ āĻāĻŦāĻ āϏā§āϞā§āĻā§āϰ āĻŽāϧā§āϝ⧠āĻāύā§āĻāĻžāϰāύā§āĻ āϏā§āĻĒāĻŋāĻĄ āĻŦāĻž āĻŦā§āϝāĻžāύā§āĻĄāĻāĻāĻĨ āϏā§āϞ⧠āĻšāĻāϝāĻŧāĻžāĨ¤
- Heavy DDL Operations: āĻĒā§āϰāĻžāĻāĻŽāĻžāϰāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻŦāĻĄāĻŧ āĻā§āĻŦāĻŋāϞā§āϰ āĻāύāĻĄā§āĻā§āϏ āϤā§āϰāĻŋ (
CREATE INDEX) āĻāϰāĻž āĻŦāĻž āϏā§āĻāĻŋāĻŽāĻž āĻā§āĻā§āĻ (ALTER TABLE) āĻāϰāĻžāĨ¤ āĻāĻāĻŋ āϏā§āϞā§āĻ āύā§āĻĄā§ āĻāĻŋāϝāĻŧā§ āĻĒā§āϰā§āĻĒā§āϰāĻŋ āĻāĻĒāĻĄā§āĻ āύāĻž āĻšāĻāϝāĻŧāĻž āĻĒāϰā§āϝāύā§āϤ āϰā§āĻĒā§āϞāĻŋāĻā§āĻļāύ āĻŦā§āϞāĻ āĻāϰ⧠āϰāĻžāĻā§āĨ¤ - Massive Batch Writes: āĻāĻāϏāĻžāĻĨā§ āĻŽāĻžāϏā§āĻāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠⧧ā§Ļ āϞāĻžāĻ āĻĄā§āĻāĻž āĻāĻĒāĻĄā§āĻ āĻāϰāϞ⧠āϤāĻž āϰā§āĻĒā§āϞāĻŋāĻā§āĻļāύ āϞāĻā§ āĻāĻāĻžāϰāϞā§āĻĄ āϤā§āϰāĻŋ āĻāϰā§āĨ¤
- Single-threaded Slave: āĻŽāĻžāϏā§āĻāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻŽāĻžāϞā§āĻāĻŋ-āĻā§āϰ āϏāĻŋāĻĒāĻŋāĻāĻ āĻĻāĻŋāϝāĻŧā§ āĻĒā§āϝāĻžāϰāĻžāϞāĻžāϞ āϰāĻžāĻāĻ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻĒā§āϰā§āύ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻā§āĻāĻŋāύ⧠Slave āĻĄāĻžāĻāĻžāĻŦā§āϏ āϏāĻŋāĻā§āĻāϞ-āĻĨā§āϰā§āĻĄā§ āĻāĻāĻāĻŋ āĻā§āϝāĻŧāĻžāϰāĻŋāϰ āĻĒāϰ āĻ āĻĒāϰāĻāĻŋ āĻĒā§āϰāϏā§āϏ āĻāϰā§āĨ¤
⥠How do you reduce it?â
- Parallel Replication: āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ⧠(MySQL 5.7+ āĻŦāĻž Postgres)
Multi-threaded replicationāĻāĻžāϞ⧠āĻāϰāĻž, āϝāĻžāϤ⧠āϏā§āϞā§āĻ āύā§āĻĄāĻā§āϞā§āĻ āĻāĻāĻžāϧāĻŋāĻ āĻā§āϝāĻŧāĻžāϰāĻŋ āĻāĻāϏāĻžāĻĨā§ āϰāĻžāύ āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤ - Batch Splitting: āĻāĻāĻŦāĻžāϰ⧠⧧ā§Ļ āϞāĻžāĻ āĻĄā§āĻāĻž āĻāĻĒāĻĄā§āĻ āύāĻž āĻāϰā§, āĻā§āϰāύ āĻāĻŦā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ ā§Ģ āĻšāĻžāĻāĻžāϰ āĻāϰ⧠āĻŦā§āϝāĻžāĻ āĻšāĻŋāϏā§āĻŦā§ āĻāĻĒāĻĄā§āĻ āĻāϰāĻžāĨ¤
- Hardware Upgrade: āϰāĻŋāĻĄ āϰā§āĻĒā§āϞāĻŋāĻāĻžāϰ āĻĄāĻŋāϏā§āĻā§āϰ āϏā§āĻĒāĻŋāĻĄ (IOPS) āĻāĻŦāĻ āĻāĻā§āĻāĻŋāύ āĻā§āϝāĻžāĻĒāĻžāϏāĻŋāĻāĻŋ āĻŽāĻžāϏā§āĻāĻžāϰā§āϰ āϏāĻŽāĻžāύ āĻŦāĻž āϤāĻžāϰ āĻā§āϝāĻŧā§ āĻāĻžāϞ⧠āϰāĻžāĻāĻžāĨ¤
đĨ 156. Database crashed and won't start. Troubleshooting steps?â
āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰā§āϝāĻžāĻļ āĻāϰ⧠āϏā§āĻāĻžāϰā§āĻ āύāĻž āĻšāĻāϝāĻŧāĻž āϏāĻžāϰā§āĻāĻžāϰ āĻāĻĄāĻŽāĻŋāύāĻĻā§āϰ āĻāύā§āϝ āϏāĻŦāĻā§āϝāĻŧā§ āĻā§āϤāĻŋāĻāϰ āύāĻžāĻāĻāĻŽā§āϝāĻŧāĻžāϰāĨ¤
āĻā§āĻāĻžāĻŦā§ āĻā§āϰāĻžāĻŦāϞāĻļā§āĻ āĻāϰāĻŦā§āύ? āϏāĻŦāĻā§āϝāĻŧā§ āĻāĻā§ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻāϰāϰ āϞāĻ (Error log) āĻā§āĻ āĻāϰ⧠āĻā§āϰā§āϝāĻžāĻļā§āϰ āĻŽā§āϞ āĻāĻžāϰāĻŖ (āϝā§āĻŽāύ: OOM Killer, Disk I/O Failure, āĻŦāĻž Corrupted Data) āĻŦā§āϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤ āϝāĻĻāĻŋ āĻāϰāϰ āϏāĻžāϧāĻžāϰāĻŖ āĻāĻŋāĻā§ āĻšāϝāĻŧ āϤāĻŦā§ āϏā§āĻāĻŋ āĻĢāĻŋāĻā§āϏ āĻāϰ⧠āϰāĻŋāϏā§āĻāĻžāϰā§āϏ āĻĻāĻŋāϞā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻ āĻā§āĻŽā§āĻāĻŋāĻ āϰāĻŋāĻāĻāĻžāϰāĻŋ āĻŽā§āĻāĻžāύāĻŋāĻāĻŽ (WAL/Redo log) āĻĄā§āĻāĻž āϏā§āĻĢ āĻāϰ⧠āĻĒā§āύāϰāĻžāϝāĻŧ āĻāĻžāϞ⧠āĻšāĻŦā§āĨ¤ āĻŽāĻžāϰāĻžāϤā§āĻŽāĻ āĻāϰāĻžāĻĒāĻļāύ āĻšāϞ⧠āĻŦā§āϝāĻžāĻāĻāĻĒ āĻĨā§āĻā§ Point-In-Time Recovery (PITR) āĻāϰ⧠āĻĄā§āĻāĻž āϰāĻŋāϏā§āĻā§āϰ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
Technical summary: Troubleshooting a crashed database starts with analyzing the system and database error logs to identify the root cause (OOM, hardware failure, data corruption). Depending on the severity, the database might auto-recover using Write-Ahead Logs (WAL) upon restart, or it may require point-in-time recovery from the latest backup.
đ How do you check database logs?â
āϏāĻŦāĻā§āϝāĻŧā§ āĻĒā§āϰāĻĨāĻŽ āĻāĻžāĻ āĻšāϞ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āύ āĻŽāĻžāϰāĻž āĻā§āϞ āϤāĻž āĻāĻžāύāĻžāĨ¤
# Check MySQL error log
tail -n 100 /var/log/mysql/error.log
# Or use journalctl for PostgreSQL
journalctl -u postgresql
đĄ Tip: āϞāĻ āĻĨā§āĻā§āĻ āĻāĻžāύāĻž āϝāĻžāĻŦā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻŋ OOM (Out Of Memory) Killer āĻāϰ āĻšāĻžāϤ⧠āĻŽāĻžāϰāĻž āĻā§āĻā§ (āĻāĻžāϰāĻŖ RAM āĻļā§āώ), āύāĻžāĻāĻŋ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻ āύāώā§āĻ (Disk I/O Error), āύāĻžāĻāĻŋ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ⧠āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻā§āϞ āĻšāϝāĻŧā§āĻā§āĨ¤
đ What is database recovery process?â
āĻŦā§āĻļāĻŋāϰāĻāĻžāĻ āĻŽāĻĄāĻžāϰā§āύ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠(MySQL InnoDB āĻŦāĻž Postgres) āĻ āĻā§āĻŽā§āĻāĻŋāĻ āĻā§āϰā§āϝāĻžāĻļ āϰāĻŋāĻāĻāĻžāϰāĻŋ āĻŽā§āĻāĻžāύāĻŋāĻāĻŽ āĻĨāĻžāĻā§āĨ¤
- āĻĄāĻžāĻāĻžāĻŦā§āϏ āϰāĻŋāϏā§āĻāĻžāϰā§āĻ āύā§āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āϏ⧠āĻĒā§āϰāĻĨāĻŽā§āĻ WAL (Write-Ahead Log) āĻŦāĻž Redo Logs āĻĒāĻĄāĻŧā§āĨ¤
- āĻā§āϰā§āϝāĻžāĻļ āĻāϰāĻžāϰ āĻ āĻŋāĻ āĻŽāĻŋāϞāĻŋ-āϏā§āĻā§āύā§āĻĄ āĻāĻ āĻĒāϰā§āϝāύā§āϤ āϝā§āϏāĻŦ āĻā§āϰāĻžāύāĻā§āĻāĻļāύā§āϰ āĻāĻŽāĻŋāĻ āϏāĻžāĻāύ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ āϞāĻŋāĻāϤ⧠āĻĒāĻžāϰā§āύāĻŋ, āĻĄāĻžāĻāĻžāĻŦā§āϏ āϞāĻ āĻĨā§āĻā§ āϏā§āĻā§āϞ⧠āĻĒā§āύāϰāĻžāϝāĻŧ (Replay) āϰāĻžāύ āĻāϰ⧠āĻĄā§āĻāĻž āϰāĻŋāĻāĻāĻžāϰ āĻāϰ⧠āĻāĻŦāĻ āĻāϰāĻžāĻĒā§āĻ āĻšāĻāϝāĻŧāĻž āĻĄā§āĻāĻž āϰā§āϞāĻŦā§āϝāĻžāĻ āĻāϰ⧠āϏāĻžāϰā§āĻāĻŋāϏ āϞāĻžāĻāĻ āĻāϰā§āĨ¤
đ ī¸ When would you restore from backup vs repair?â
- Repairing Database: āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻāϰāϰ āϞāĻā§ āϝāĻĻāĻŋ āĻĻā§āĻāĻž āϝāĻžāϝāĻŧ āϝ⧠āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ āĻāύāĻĄā§āĻā§āϏ āĻĢāĻžāĻāϞ āĻŦāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻā§āĻŦāĻŋāϞ āĻĒā§āĻ āĻāϰāĻžāĻĒā§āĻ (Data corruption) āĻšāϝāĻŧā§āĻā§, āϤāĻāύ āĻāύāĻĄā§āĻā§āϏ āϰāĻŋāĻŦāĻŋāϞā§āĻĄ āĻŦāĻž āĻāĻā§āĻāĻŋāύ āϰāĻŋāĻĒā§āϝāĻŧāĻžāϰ āĻā§āϞāϏ āĻĻāĻŋāϝāĻŧā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻ āĻŋāĻ āĻāϰāĻž āϝāĻžāϝāĻŧāĨ¤
- Restore from Backup: āϝāĻĻāĻŋ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻ āĻĢāĻŋāĻāĻŋāĻā§āϝāĻžāϞāĻŋ āĻĒā§āĻĄāĻŧā§ āϝāĻžāϝāĻŧ, Ransomware āĻ
ā§āϝāĻžāĻāĻžāĻ āĻšāϝāĻŧ āĻŦāĻž āĻā§āϞ⧠āĻā§āĻ āĻĒā§āϰ⧠āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻā§āĻŦāĻŋāϞ
DROPāĻāϰ⧠āĻĻā§āϝāĻŧâāϤāĻāύ āϰāĻŋāĻĒā§āϝāĻŧāĻžāϰā§āϰ āĻĒā§āϰāĻļā§āύāĻ āĻ āϏā§āϞāĻā§āύ āύāĻžāĨ¤ āϤāĻāύ āϏā§āĻā§āϰā§āĻ āĻĒāϰāĻŋāώā§āĻāĻžāϰ āĻāϰ⧠āϏāϰā§āĻŦāĻļā§āώ āĻŦā§āϝāĻžāĻāĻāĻĒ āĻĢāĻžāĻāϞ (Full Dump + WAL logs) āĻĨā§āĻā§ Point-In-Time Recovery (PITR) āĻāϰ⧠āĻĄāĻžāĻāĻžāĻŦā§āϏāĻā§ āĻā§āĻŦāĻŋāϤ āĻāϰāϤ⧠āĻšāϝāĻŧāĨ¤
đ 157. Deadlocks are occurring frequently. How do you resolve?â
āĻĄā§āĻĄāϞāĻ (Deadlock) āĻšāϞ⧠āĻāĻŽāύ āĻāĻāĻāĻŋ āĻ āĻŦāϏā§āĻĨāĻž āϝā§āĻāĻžāύ⧠āĻĻā§āĻāĻŋ āĻāϞāĻžāĻĻāĻž āĻā§āϰāĻžāύāĻā§āĻāĻļāύ āύāĻŋāĻā§āĻĻā§āϰ āϞāĻā§āϰ (Lock) āĻāĻžāĻ āĻļā§āώ āĻāϰāĻžāϰ āĻāύā§āϝ āĻ āύāύā§āϤāĻāĻžāϞ āĻāĻā§ āĻ āĻĒāϰā§āϰ āĻāύā§āϝ āĻ āĻĒā§āĻā§āώāĻž āĻāϰāϤ⧠āĻĨāĻžāĻā§āĨ¤
đ Example: āĻā§āϰāĻžāύāĻā§āĻāĻļāύ A āĻā§āĻŦāĻŋāϞ-ā§§ āϞāĻ āĻāϰā§āĻā§ āĻāĻŦāĻ āĻā§āĻŦāĻŋāϞ-⧍ āĻā§āĻāĻāĻā§āĨ¤ āĻāĻĻāĻŋāĻā§ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ B āĻā§āĻŦāĻŋāϞ-⧍ āϞāĻ āĻāϰā§āĻā§ āĻāĻŦāĻ āĻā§āĻŦāĻŋāϞ-ā§§ āĻā§āĻāĻāĻā§āĨ¤ āĻā§āĻāĻ āϞāĻ āĻāĻžāĻĄāĻŧāĻŦā§ āύāĻž, āϤāĻžāĻ āϏā§āώā§āĻāĻŋ āĻšāϝāĻŧ āĻĄā§āĻĄāϞāĻāĨ¤ āĻļā§āώāĻŽā§āĻļ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻā§āĻāĻŋāύ āĻāĻ āĻā§āϰāĻžāύāĻā§āĻāĻļāύāĻā§ āĻĢā§āĻāϞ (Kill) āĻāϰ⧠āĻĻāĻŋāϝāĻŧā§ āĻĄā§āĻĄāϞāĻ āĻāĻžāĻāϤ⧠āĻŦāĻžāϧā§āϝ āĻšāϝāĻŧāĨ¤
āĻā§āĻāĻžāĻŦā§ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻŦā§āύ? āĻĄā§āĻĄāϞāĻ āĻāĻŽāĻžāύā§āϰ āĻĒā§āϰāϧāĻžāύ āĻāĻĒāĻžāϝāĻŧ āĻšāϞ⧠āĻŦā§āϝāĻžāĻāĻāύā§āĻĄ āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύā§āϰ āĻā§ āĻĄ āϰāĻŋāĻĢā§āϝāĻžāĻā§āĻāϰ āĻāϰāĻžāĨ¤ āĻā§āĻĄā§ āĻ āĻŦāĻļā§āϝāĻ āĻā§āϝāĻŧāĻžāϞ āϰāĻžāĻāϤ⧠āĻšāĻŦā§ āϝ⧠āĻāĻŋāύā§āύ āĻā§āϰāĻžāύāĻā§āĻāĻļāύāĻā§āϞ⧠āϝā§āύ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻāĻ āϏāĻŋāĻā§ā§ā§āύā§āϏ⧠(Sequentially) āĻā§āĻŦāĻŋāϞāĻā§āϞ⧠āĻāĻā§āϏā§āϏ āĻāϰ⧠āĻāĻŦāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻā§āϰāĻžāύāĻā§āĻāĻļāύāĻā§āϞ⧠āϝāϤāĻāĻž āϏāĻŽā§āĻāĻŦ āĻā§āĻ āĻ āĻĻā§āϰā§āϤ āĻšāϝāĻŧāĨ¤
Technical summary: Resolving frequent deadlocks primarily requires an application-level refactoring to ensure that all concurrent transactions access database tables or rows in exactly the same deterministic order. Additionally, minimizing transaction duration and employing optimistic locking can significantly reduce deadlock occurrences.
đ How do you identify which queries are causing deadlocks?â
āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϞāĻā§ āĻĄā§āĻĄāϞāĻ āĻĄāĻŋāĻā§āĻā§āĻ āĻšāϞ⧠āϤāĻž āĻĒā§āϰāĻŋāύā§āĻ āĻšāϝāĻŧāĨ¤
-- For MySQL
SHOW ENGINE INNODB STATUS;
āĻāĻāĻāĻĒā§āĻ āĻĨā§āĻā§ āϏāϰā§āĻŦāĻļā§āώ āĻĄā§āĻĄāϞāĻ āĻāĻāĻž āĻā§āϝāĻŧāĻžāϰāĻŋ āĻāĻŦāĻ āĻā§āϰāĻžāύāĻā§āĻāĻļāύāĻā§āϞā§āϰ āĻŦāĻŋāϏā§āϤāĻžāϰāĻŋāϤ āĻĻā§āĻāĻž āϝāĻžāϝāĻŧāĨ¤
âī¸ Application-level vs database-level solutions?â
- Database-level: āĻĄāĻžāĻāĻžāĻŦā§āϏ āϞā§āĻā§āϞ⧠āĻāĻŋāĻā§āĻ āĻāϰāĻžāϰ āύā§āĻ; āĻĄāĻžāĻāĻžāĻŦā§āϏ āύāĻŋāĻā§ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻļāĻŋāĻāĻžāϰ (Victim) āĻŦā§āĻā§ āύāĻŋāϝāĻŧā§ āϤāĻžāĻā§ āϰā§āϞāĻŦā§āϝāĻžāĻ āĻŦāĻž āĻāĻŋāϞ āĻāϰ⧠āĻĄā§āĻĄāϞāĻ āĻ āĻžāĻā§āĨ¤
- Application-level: āĻāϏāϞ āϏāĻŽāĻžāϧāĻžāύ āĻāĻāĻžāύā§āĻāĨ¤ āĻĄā§āĻā§āϞāĻĒāĻžāϰāĻĻā§āϰ āĻā§āĻĄ āϰāĻŋāĻĢā§āϝāĻžāĻā§āĻāϰ āĻāϰ⧠āĻā§āĻŦāĻŋāϞ āĻāĻĒāĻĄā§āĻā§āϰ āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏ (Sequence) āĻ āĻŋāĻ āĻāϰāϤ⧠āĻšāϝāĻŧ, āϝāĻžāϤ⧠āĻĻā§āĻāĻŋ āĻāĻŋāύā§āύ āĻĒā§āϰāϏā§āϏ āϏāĻŦāϏāĻŽāϝāĻŧ āĻāĻāĻ āϏāĻŋāϰāĻŋāϝāĻŧāĻžāϞ⧠āĻā§āĻŦāĻŋāϞāĻā§āϞ⧠āĻāĻā§āϏā§āϏ āĻāϰā§āĨ¤
đĄī¸ How do you prevent deadlocks in code?â
- āĻ āϰā§āĻĄāĻžāϰ āĻ āĻŋāĻ āĻāϰāĻž (Sorting): āϝāĻĻāĻŋ āĻāĻāĻžāϧāĻŋāĻ āϰ⧠āĻŦāĻž āĻā§āĻŦāĻŋāϞ āĻāĻĒāĻĄā§āĻ āĻāϰāĻžāϰ āĻĨāĻžāĻā§, āϤāĻŦā§ āĻā§āĻĄā§ āϏāĻŦ āϏāĻŽāϝāĻŧ āĻĒā§āϰāĻžāĻāĻŽāĻžāϰāĻŋ-āĻāĻŋ (Primary Key) āĻŦāĻž āύāĻžāĻŽ āĻ āύā§āϏāĻžāϰ⧠āϏāϰā§āĻ (Sort) āĻāϰ⧠āĻāĻĒāĻĄā§āĻ āϞā§āĻĒ āĻāĻžāϞāĻžāύ⧠āĻāĻāĻŋāϤāĨ¤
- āĻā§āĻ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ: āĻā§āϰāĻžāύāĻā§āĻāĻļāύ āĻŦā§āϞāĻ āϝāϤ āĻŦāĻĄāĻŧ āĻšāĻŦā§, āĻĄā§āĻĄāϞāĻ āĻšāĻāϝāĻŧāĻžāϰ āϏāĻŽā§āĻāĻžāĻŦāύāĻž āϤāϤ āĻŦāĻžāĻĄāĻŧāĻŦā§āĨ¤ āϤāĻžāĻ āĻā§āϰāĻžāύāĻā§āĻāĻļāύ āϝāϤāĻāĻž āϏāĻŽā§āĻāĻŦ āĻā§āĻ āϰāĻžāĻāĻžāĨ¤
- Optimistic Locking: āĻā§āĻŦāĻŋāϞ āĻŦāĻž āϰā§-āĻā§ āĻļāĻā§āϤāĻāĻžāĻŦā§ āϞāĻ (
FOR UPDATE) āύāĻž āĻāϰā§, āĻĄā§āĻāĻžāϰ āϏāĻžāĻĨā§ āĻāĻāĻāĻŋversion_numberāϰāĻžāĻāĻž, āϝāĻžāϤ⧠āϞāĻ āĻāĻžāĻĄāĻŧāĻžāĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻžāϰā§āϏāύ āĻŽāĻŋāϞāϞā§āĻ āĻāĻĒāĻĄā§āĻ āĻšāϝāĻŧāĨ¤
đĻ 158. Database backup is taking too long. How to optimize?â
āĻā§āϰāĻžāĻŦāĻžāĻāĻ āϏā§āĻā§āϞā§āϰ āĻĄā§āĻāĻžāĻŦā§āϏ āĻŦā§āϝāĻžāĻāĻāĻĒ āύāĻŋāϤ⧠āĻāϝāĻŧā§āĻ āĻāĻŖā§āĻāĻž āĻĨā§āĻā§ āĻĻāĻŋāύ āĻĒāϰā§āϝāύā§āϤ āϏāĻŽāϝāĻŧ āϞāĻžāĻāϤ⧠āĻĒāĻžāϰā§, āϝāĻž āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻŽāĻžāϰāĻžāϤā§āĻŽāĻ āĻĄā§āϰāĻĒ āĻŦāĻž āϏā§āϞā§-āύā§āϏā§āϰ āϏā§āώā§āĻāĻŋ āĻāϰā§āĨ¤
āĻā§āĻāĻžāĻŦā§ āĻ āĻĒāĻāĻŋāĻŽāĻžāĻāĻ āĻāϰāĻŦā§āύ? āĻŦā§āϝāĻžāĻāĻāĻĒ āĻĒā§āϰāϏā§āϏāĻā§ āĻĢāĻžāϏā§āĻ āĻāϰāĻžāϰ āĻāύā§āϝ āĻĒā§āϝāĻžāϰāĻžāϞāĻžāϞ āĻŦāĻž āĻŽāĻžāϞā§āĻāĻŋ-āĻĨā§āϰā§āĻĄā§āĻĄ āĻŦā§āϝāĻžāĻāĻāĻĒ (Parallel Backups) āĻā§āϞāϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤ āĻāĻāĻžāĻĄāĻŧāĻž āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύā§āϰ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ⧠āĻĒā§āϰāĻāĻžāĻŦ āύāĻž āĻĢā§āϞāϤ⧠āĻĒā§āϰāĻžāĻāĻŽāĻžāϰāĻŋ āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻŦāĻĻāϞ⧠āϰāĻŋāĻĄ-āϰā§āĻĒā§āϞāĻŋāĻāĻž āĻŦāĻž āϏā§āϞā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āĻŦā§āϝāĻžāĻāĻāĻĒ āϰāĻžāύ āĻāϰāĻž āĻšāϝāĻŧ āĻāĻŦāĻ āĻĢāĻŋāĻāĻŋāĻā§āϝāĻžāϞ āϏā§āύā§āϝāĻžāĻĒāĻļāĻ (EBS Snapshot) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āϏāĻŽā§āĻĒā§āϰā§āĻŖ āĻĄā§āĻāĻž āĻŦā§āϝāĻžāĻāĻāĻĒ āύāĻž āύāĻŋāϝāĻŧā§, āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻāĻžāϞ āĻŦāĻž āĻĄā§āϞā§āĻāĻž āĻŦā§āϝāĻžāĻāĻāĻĒ āύā§āϝāĻŧāĻž āĻāĻāĻāĻŋ āĻŦā§āϏā§āĻ āĻĒā§āϰā§āϝāĻžāĻāĻāĻŋāϏāĨ¤
Technical summary: Optimizing slow database backups involves switching to parallel or multi-threaded backup tools and running the process on a read-replica node to offload the primary database. Using incremental backups instead of daily full backups, or utilizing fast physical storage snapshots (like AWS EBS snapshots), can significantly reduce backup duration.
đ Parallel backup strategies?â
- āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āύā§āĻāĻŋāĻ āĻĄāĻžāĻŽā§āĻĒ āĻā§āϞ (āϝā§āĻŽāύ MySQL āĻāϰ
mysqldumpāĻŦāĻž Postgres āĻāϰpg_dump) āϏāĻžāϧāĻžāϰāĻŖāϤ āϏāĻŋāĻā§āĻāϞ-āĻĨā§āϰā§āĻĄā§ āϏāĻŋāĻā§āϝāĻŧā§āύā§āϏāĻŋāϝāĻŧāĻžāϞāĻŋ āĻĄā§āĻāĻž āϰāĻŋāĻĄ āĻāϰā§, āϤāĻžāĻ āĻ āύā§āĻ āϏā§āϞā§āĨ¤ - āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠Parallel Backups āĻŦāĻž āĻŽāĻžāϞā§āĻāĻŋ-āĻĨā§āϰā§āĻĄāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ (āϝā§āĻŽāύ:
pg_dump -j 4āĻŦāĻž Percona XtraBackup)āĨ¤ āĻāϤ⧠āĻŦā§āϝāĻžāĻāĻāĻĒ āĻĒā§āϰāϏā§āϏ āĻāĻ āϏāĻžāĻĨā§ āĻāĻāĻžāϧāĻŋāĻ āĻā§āĻŦāĻŋāϞ āĻĄāĻžāĻŽā§āĻĒ āĻāϰāϤ⧠āĻĒāĻžāϰ⧠āĻāĻŦāĻ āĻŦā§āϝāĻžāĻāĻāĻĒā§āϰ āϏāĻŽāϝāĻŧ āĻāϝāĻŧā§āĻ āĻā§āĻŖ āĻāĻŽā§ āĻāϏā§āĨ¤
âī¸ Incremental vs full backup trade-offs?â
- Full Backup: āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āϏāĻŽāϏā§āϤ āĻĄā§āĻāĻžāϰ āĻāϏā§āϤ āĻāĻĒāĻŋ āĻāϰāĻž āĻšāϝāĻŧāĨ¤ āĻāĻāĻŋ āĻ āύā§āĻ āϏā§āĻā§āϰā§āĻ āĻāĻžāϝāĻŧ āĻāĻŦāĻ āĻ āύā§āĻ āϏā§āϞā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻā§āϰāĻžāĻāϏāĻŋāϏā§āϰ āϏāĻŽāϝāĻŧ āϰāĻŋāϏā§āĻ ā§āϰ āĻāϰāϤ⧠āĻāĻāĻŋ āϏāĻŦāĻā§āϝāĻŧā§ āĻĢāĻžāϏā§āĻāĨ¤
- Incremental Backup: āĻĒā§āϰāϤāĻŋāĻĻāĻŋāύ āĻĢā§āϞ āĻŦā§āϝāĻžāĻāĻāĻĒ āύāĻž āύāĻŋāϝāĻŧā§, āĻāϤ āĻĒāϰāĻļā§ āĻĨā§āĻā§ āĻāĻ āĻĒāϰā§āϝāύā§āϤ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻļā§āϧ⧠āϝā§āĻā§āĻā§ āĻĄā§āĻāĻž āĻā§āĻā§āĻ āĻšāϝāĻŧā§āĻā§ (Write-Ahead Logs/BinLogs), āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āϏā§āĻ āϞāĻāĻā§āϞ⧠āĻāĻĒāĻŋ āĻāϰāĻžāĨ¤ āĻāĻāĻŋ āϏāĻžāĻāĻā§ āĻā§āĻ āĻāĻŦāĻ āĻāϝāĻŧā§āĻ āĻŽāĻŋāύāĻŋāĻā§āĻ āĻŦā§āϝāĻžāĻāĻāĻĒ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ āϤāĻŦā§ āϰāĻŋāϏā§āĻā§āϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻĢā§āϞ āĻŦā§āϝāĻžāĻāĻāĻĒā§āϰ āϏāĻžāĻĨā§ āϏāĻŦ āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻāĻžāϞ āĻĢāĻžāĻāϞ āĻā§āĻĄāĻŧāĻž āϞāĻžāĻāĻŋāϝāĻŧā§ āϰāĻžāύ āĻāϰāϤ⧠āĻšāϝāĻŧ, āϝāĻž āϰāĻŋāϏā§āĻā§āϰā§āĻļāύāĻā§ āϏā§āϞ⧠āĻāϰā§āĨ¤
đĄ Best Practice: āϏāĻĒā§āϤāĻžāĻšā§ āĻāĻāĻĻāĻŋāύ āĻĢā§āϞ āĻŦā§āϝāĻžāĻāĻāĻĒ āĻāĻŦāĻ āĻŦāĻžāĻāĻŋ ā§Ŧ āĻĻāĻŋāύ āĻāύāĻā§āϰāĻŋāĻŽā§āύā§āĻāĻžāϞ āĻŦā§āϝāĻžāĻāĻāĻĒ āύā§āϝāĻŧāĻžāĨ¤
đĄī¸ How to backup without affecting production?â
āĻŦā§āϝāĻžāĻāĻāĻĒ āύā§āϝāĻŧāĻžāϰ āϏāĻŽāϝāĻŧ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻāĻā§āĻāĻŋāύ āĻĄāĻŋāϏā§āĻ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ⧠(I/O) āĻĒā§āϰā§āĻļāĻžāϰ āĻĻā§āϝāĻŧ āĻāĻŦāĻ āĻā§āĻŦāĻŋāϞāĻ āϞāĻ (Table Locking) āĻāϰāϤ⧠āĻĒāĻžāϰā§āĨ¤
- Solution 1 (Physical Snapshot): AWS (EBS Snapshot) āĻŦāĻž LVM (Logical Volume Manager) āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻšāĻžāϰā§āĻĄāĻĄāĻŋāϏā§āĻā§ āϰ āϏā§āύā§āϝāĻžāĻĒāĻļāĻ āύā§āĻāϝāĻŧāĻž, āϝāĻž āĻĢā§āϰā§āϝāĻžāĻāĻļāύ āĻ āĻĢ āϏā§āĻā§āύā§āĻĄā§ āĻšāϝāĻŧā§ āϝāĻžāϝāĻŧāĨ¤ āϏāĻŋāϏā§āĻā§āĻŽ āĻā§āύ⧠āĻāĻĢā§āĻā§āĻāĻ āĻ āύā§āĻāĻŦ āĻāϰ⧠āύāĻžāĨ¤
- Solution 2 (Slave Backup): āĻāĻāύā§āĻ āĻŽāĻžāϏā§āĻāĻžāϰ (Primary) āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āĻŦā§āϝāĻžāĻāĻāĻĒ āύāĻž āύā§āĻāϝāĻŧāĻžāĨ¤ āĻāĻāĻāĻŋ āϰāĻŋāĻĄ-āϰā§āĻĒā§āϞāĻŋāĻāĻž āĻŦāĻž āϏā§āϞā§āĻ (Secondary) āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āĻŦā§āϝāĻžāĻāĻāĻĒ āϰāĻžāύ āĻāϰāĻž, āϝāĻžāϤ⧠āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύā§āϰ āϰāĻžāĻāĻĄ/āϰāĻŋāĻĄ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāύā§āϏ⧠āĻŦāĻŋāύā§āĻĻā§āĻŽāĻžāϤā§āϰ āĻā§āύ⧠āĻāĻŽāĻĒā§āϝāĻžāĻā§āĻ āύāĻž āĻĒāĻĄāĻŧā§āĨ¤ īŋŊīŋŊāĻŧ Connection Pool āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤