This page consolidates all operational limits, quotas, and safety boundaries across DB9. Most limits are fixed. Where a limit is configurable by the platform operator (not the end user), it is marked accordingly.
| Limit | Anonymous | Claimed |
|---|
| Max databases (including branches) | 5 | Unlimited |
| Bearer token TTL | 90 days (auto-refresh) | 90 days (re-login to renew) |
| API token TTL | 365 days (default) | 365 days (default) |
| Feature access | Full | Full |
See Anonymous and Claimed Databases for the upgrade path.
| Limit | Value | Notes |
|---|
| Max server connections | 1,000 | Configurable by operator |
| Statement timeout | 60 seconds | Configurable by operator; per-session override via SET statement_timeout |
| Idle-in-transaction timeout | 60 seconds | Configurable by operator |
| Idle tenant cache eviction | 5 minutes | Inactive tenants are unloaded from memory |
| Max advisory locks per connection | 4,096 | Configurable by operator |
| Limit | Value |
|---|
| Max identifier length | 63 bytes |
| Max recursive CTE iterations | 1,000 |
| Max view expansion depth | 64 |
| Max generate_series rows | 1,000,000 |
| Max NUMERIC precision | 1,000 |
| Max NUMERIC display scale | 28 |
| Max string output | ~1 GB |
| Sort memory (work_mem) | 256 MB default (configurable via GUC) |
| DML table scan max rows | 10,000 default (configurable via GUC) |
| DPCCP join reorder max relations | 8 |
| Max COPY FROM STDIN line | 32 MB |
| Limit | Value |
|---|
| Max vector dimensions | 16,384 |
| Default embedding dimensions | 1,024 |
| Embedding model | text-embedding-v4 (configurable by operator) |
| Embedding request timeout | 30 seconds |
| Embedding connect timeout | 5 seconds |
| Embedding concurrency per tenant | 5 |
| HNSW default M | 16 |
| HNSW default ef_construction | 64 |
| HNSW default ef_search | 40 |
| Limit | Value |
|---|
| Max requests per SQL statement | 100 |
| Concurrent requests per tenant | 20 (5 reserved for interactive queries) |
| Request timeout | 5 seconds (1 second connect timeout) |
| Max response body | 1 MB |
| Max request body | 256 KB |
| Max redirects | 3 |
| HTTPS only | Yes (SSRF protection blocks private IPs) |
See HTTP from SQL for details.
| Limit | Value |
|---|
| Max file size | 100 MB |
| Max total bytes per glob query | 100 MB |
| Max files per glob | 10,000 |
| Max directory entries (recursive) | 100,000 |
| Max recursive depth | 10 |
| WebSocket connections per tenant | 50 |
| WebSocket auth timeout | 10 seconds |
| WebSocket idle timeout | 5 minutes |
| WebSocket max JSON frame | 2 MB |
See Analyze Agent Logs with fs9 for usage patterns.
| Limit | Value |
|---|
| Global memory budget | 512 MB |
| Concurrent imports per tenant | 4 |
| Max file size (via fs9) | 100 MB |
| HTTP fetch timeout | 60 seconds |
| HTTP max redirects | 5 |
| Limit | Value |
|---|
| Max jobs per database | 50 |
| Max concurrent executions (global) | 32 |
| Poll interval | 60 seconds (minimum scheduling granularity) |
| Default job timeout | 5 minutes (orphan timeout) |
| Max job timeout (cron-specific) | 30 minutes |
| Run history retention | 7 days |
See Scheduled Jobs with pg_cron for details.
| Limit | Value |
|---|
| Max concurrent branch creations | 2 |
| Branch clone timeout | 5 minutes |
| Branch clone max runtime | 10 minutes |
| Branches count toward database quota | Yes |
See Branching Workflows for details.
| Limit | Value |
|---|
| TTL range | 5–15 minutes (default 10 minutes) |
| Signing | RS256 (public keys at JWKS endpoint) |
| Scope | db:connect (single database + role) |
See Security and Auth for the full auth model.
| Limit | Value |
|---|
| Max suspended portals per connection | 32 |
| Max suspended portal buffer rows | 10,000 |
| Max suspended portal buffer bytes | 16 MB |
These apply to PostgreSQL Extended Query protocol cursors and named portals.
| Limit | Value |
|---|
| Slow query threshold | 200 ms (configurable by operator) |
| Max sample events | 20,000 (configurable by operator) |
| Max sample groups | 50 (configurable by operator) |
| Max SQL length in traces | 512 bytes (configurable by operator) |
| Audit log retention | 90 days |
These resources do not have explicit limits in the current release:
- Database size — no per-database storage cap (bounded by TiKV cluster capacity)
- Table count — no limit on tables per database
- Column count — no per-table column limit beyond PostgreSQL conventions
- Row size — no explicit row size limit
- Transaction size — no limit on transaction data volume
- Query parameter count — no explicit limit on bind parameters
These may change in future releases. For production capacity planning, monitor TiKV cluster metrics.
Platform operators can adjust these via environment variables on the db9-server:
| Variable | Default | Description |
|---|
DB9_MAX_CONNECTIONS | 1,000 | Max concurrent pgwire connections |
DB9_STATEMENT_TIMEOUT_MS | 60,000 | Default statement timeout |
DB9_IDLE_IN_TRANSACTION_SESSION_TIMEOUT_MS | 60,000 | Idle-in-transaction timeout |
DB9_TENANT_MEMORY_QUOTA_BYTES | 0 (unlimited) | Per-tenant memory quota |
DB9_TENANT_QPS_LIMIT | 0 (disabled) | Per-tenant queries per second |
DB9_MAX_ADVISORY_LOCKS_PER_CONNECTION | 4,096 | Advisory lock budget |
Extension and worker limits are fixed and cannot be changed without redeploying the server.