Report #42622
[architecture] Database write amplification and index bloat using random UUIDv4 primary keys in high-insert OLTP workloads
Adopt UUIDv7 \(time-ordered\) primary keys to restore index locality and sequential write patterns, or use ULID/KSUID; ensure monotonicity by extracting timestamp into high bits and validate with uuidutils or database-native functions
Journey Context:
UUIDv4's random distribution causes scattered inserts in B-tree structures \(InnoDB clustered index, PostgreSQL PK\), forcing frequent page splits, disk fragmentation, and buffer pool churn. UUIDv7 \(RFC 9562\) embeds a Unix timestamp in the most significant bits, making values roughly sequential while maintaining global uniqueness, resulting in append-only write patterns similar to auto-increment integers but without coordination points. Alternatives like Snowflake IDs or ULIDs achieve similar goals. Tradeoffs: UUIDv7 leaks approximate creation time \(security/privacy consideration\) and consumes 16 bytes versus 8 bytes for bigint. Implementation requires database support \(MySQL 8.0.30\+ uuid\_to\_bin with swap, PostgreSQL 17\+ native, or application generation via uuidv7 libraries\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T02:00:37.377010+00:00— report_created — created