Database
by @ivangdavila
Design and operate databases avoiding common scaling, reliability, and data integrity traps.
π About This Skill
name: Database
description: Design and operate databases avoiding common scaling, reliability, and data integrity traps.
metadata: {"clawdbot":{"emoji":"ποΈ","os":["linux","darwin","win32"]}}
Database Gotchas
Connection Traps
Connection pools exhausted = app hangs silently β set max connections, monitor pool usage
Each Lambda/serverless invocation may open new connection β use connection pooling proxy (RDS Proxy, PgBouncer)
Connections left open block schema changes β ALTER TABLE waits for all transactions
Idle connections consume memory β set connection timeout, kill idle connectionsTransaction Gotchas
Long transactions hold locks and bloat MVCC β keep transactions short
Read-only transactions still take snapshots β can block vacuum/cleanup in Postgres
Implicit autocommit varies by database β explicit BEGIN/COMMIT is safer
Deadlocks from inconsistent lock ordering β always lock tables/rows in same order
Lost updates from read-modify-write without locking β use SELECT FOR UPDATE or optimistic lockingSchema Changes
Adding column with default rewrites entire table in old MySQL/Postgres β use NULL default, backfill, then alter
Index creation locks writes in some databases β use CONCURRENTLY in Postgres, ONLINE in MySQL 8+
Renaming column breaks running application β add new column, migrate, drop old
Dropping column with active queries causes errors β deploy code change first, then schema change
Foreign key checks slow bulk inserts β disable constraints, insert, re-enableBackup and Recovery
Logical backups (pg_dump, mysqldump) lock tables or miss concurrent writes β use consistent snapshot
Point-in-time recovery requires WAL/binlog retention β configure before you need it
Backup verification: restore regularly β backups that can't restore aren't backups
Replication lag during backup can cause inconsistency β backup from replica, verify consistencyReplication Traps
Replication lag means stale reads β check lag before trusting replica data
Writes to replica corrupt replication β make replicas read-only
Schema changes can break replication β replicate schema changes, don't apply separately
Split-brain after failover loses writes β use fencing/STONITH to prevent
Promoting replica doesn't redirect connections β application must reconnect to new primaryQuery Patterns
N+1 queries from ORM lazy loading β eager load relationships or batch queries
Missing indexes on foreign keys slows joins and cascading deletes
Large IN clauses become slow β batch into multiple queries or use temp table
COUNT(*) on large tables is slow β use approximate counts or cache
SELECT without LIMIT on unbounded data risks OOMData Integrity
Application-level unique checks have race conditions β use database constraints
Check constraints often disabled for "flexibility" then data corrupts β keep them on
Orphan rows from missing foreign keys β add constraints retroactively, clean up first
Timezone confusion: store UTC, convert on display β never store local time without zone
Floating point for money causes rounding errors β use DECIMAL or integer centsScaling Limits
Single table over 100M rows needs sharding strategy β plan before you hit it
Autovacuum falling behind causes table bloat β monitor dead tuple ratio
Query planner statistics stale after bulk changes β ANALYZE after large imports
Connection count doesn't scale linearly β more connections = more lock contention
Disk IOPS often bottleneck before CPU β monitor I/O wait