# Gotchas See [README.md](./README.md), [configuration.md](./configuration.md), [api.md](./api.md), [patterns.md](./patterns.md). ## Common Errors ### "Too many open connections" / "Connection limit exceeded" **Cause:** Workers have a hard limit of **6 concurrent connections per invocation** **Solution:** Set `max: 5` in driver config, reuse connections, ensure proper cleanup with `client.end()` or `ctx.waitUntil(conn.end())` ### "Failed to acquire a connection (Pool exhausted)" **Cause:** All connections in pool are in use, often due to long-running transactions **Solution:** Reduce transaction duration, avoid queries >60s, don't hold connections during external calls, or upgrade to paid plan for more connections ### "connection_refused" **Cause:** Database refusing connections due to firewall, connection limits, or service down **Solution:** Check firewall allows Cloudflare IPs, verify DB listening on port, confirm service running, and validate credentials ### "Query timeout (deadline exceeded)" **Cause:** Query execution exceeding 60s timeout limit **Solution:** Optimize with indexes, reduce dataset with LIMIT, break into smaller queries, or use async processing ### "password authentication failed" **Cause:** Invalid credentials in Hyperdrive configuration **Solution:** Check username and password in Hyperdrive config match database credentials ### "SSL/TLS connection error" **Cause:** SSL/TLS configuration mismatch between Hyperdrive and database **Solution:** Add `sslmode=require` (Postgres) or `sslMode=REQUIRED` (MySQL), upload CA cert if self-signed, verify DB has SSL enabled, and check cert expiry ### "Queries not being cached" **Cause:** Query is mutating (INSERT/UPDATE/DELETE), contains volatile functions (NOW(), RANDOM()), or caching disabled **Solution:** Verify query is non-mutating SELECT, avoid volatile functions, confirm caching enabled, use `wrangler dev --remote` to test, and set `prepare=true` for postgres.js ### "Slow multi-query Workers despite Hyperdrive" **Cause:** Worker executing at edge, each query round-trips to DB region **Solution:** Enable Smart Placement (`"placement": {"mode": "smart"}` in wrangler.jsonc) to execute Worker near DB. See [patterns.md](./patterns.md) Multi-Query pattern. ### "Local database connection failed" **Cause:** `localConnectionString` incorrect or database not running **Solution:** Verify `localConnectionString` correct, check DB running, confirm env var name matches binding, and test with psql/mysql client ### "Environment variable not working" **Cause:** Environment variable format incorrect or not exported **Solution:** Use format `CLOUDFLARE_HYPERDRIVE_LOCAL_CONNECTION_STRING_`, ensure binding matches wrangler.jsonc, export variable in shell, and restart wrangler dev ## Limits | Limit | Free | Paid | Notes | |-------|------|------|-------| | Max configs | 10 | 25 | Hyperdrive configurations per account | | Worker connections | 6 | 6 | Max concurrent connections per Worker invocation | | Username/DB name | 63 bytes | 63 bytes | Maximum length | | Connection timeout | 15s | 15s | Time to establish connection | | Idle timeout | 10 min | 10 min | Connection idle timeout | | Max origin connections | ~20 | ~100 | Connections to origin database | | Query duration max | 60s | 60s | Queries >60s terminated | | Cached response max | 50 MB | 50 MB | Responses >50MB returned but not cached | ## Resources - [Docs](https://developers.cloudflare.com/hyperdrive/) - [Getting Started](https://developers.cloudflare.com/hyperdrive/get-started/) - [Wrangler Reference](https://developers.cloudflare.com/hyperdrive/reference/wrangler-commands/) - [Supported DBs](https://developers.cloudflare.com/hyperdrive/reference/supported-databases-and-features/) - [Discord #hyperdrive](https://discord.cloudflare.com) - [Limit Increase Form](https://forms.gle/ukpeZVLWLnKeixDu7)