Configuring connection validation queries for AWS RDS Proxy
AWS RDS Proxy relies on lightweight validation queries to detect and discard stale database connections before routing client traffic. Misconfigured validation parameters cause Connection is not valid errors, increased latency, and unexpected pool exhaustion. This guide provides exact remediation steps, CLI configurations, and validation commands to stabilize your connection lifecycle.
Key Objectives:
- Identify stale connection symptoms via RDS Proxy CloudWatch metrics
- Configure lightweight
SELECT 1orpg_is_in_recovery()validation queries - Align validation intervals with RDS Proxy idle timeout thresholds
- Verify configuration using AWS CLI and live connection tests
Understanding RDS Proxy Validation Mechanics
RDS Proxy intercepts client requests and validates backend database connections before routing traffic. Default behavior relies on TCP keepalives at the transport layer. TCP keepalives only verify network reachability, not logical database state.
Explicit SQL validation is mandatory when handling logical state changes, read replica promotions, or cluster failovers. Without it, the proxy routes traffic to logically invalid or read-only backends.
When designing pool behavior, understanding the underlying Pool Architecture & Algorithm Fundamentals helps align validation frequency with connection acquisition patterns. Proper alignment prevents thread starvation during high-concurrency spikes.
Diagnosing Stale Connection Errors
Stale connections manifest as abrupt query failures and connection pool exhaustion. Monitor CloudWatch metrics to isolate validation bottlenecks. Track DatabaseConnectionsCurrentlyBorrowed and ClientConnectionsCurrentlyBorrowed for divergence.
Application logs will surface explicit errors. Look for ERROR: connection is not valid or FATAL: terminating connection due to administrator command. Correlate these spikes with RDS failover events or transient network partitions.
| Metric / Log Pattern | Threshold / Indicator | Action Required |
|---|---|---|
DatabaseConnectionsCurrentlyBorrowed |
Sustained > 85% of MaxConnectionsPercent |
Increase pool size or reduce validation frequency |
ClientConnectionsCurrentlyBorrowed |
Rapid drop to 0 after failover | Verify validation query executes under 50ms |
App Log: connection is not valid |
> 5 errors/minute | Enable explicit SQL validation immediately |
High acquisition latency during validation cycles often requires tuning Connection Acquisition Timeout Strategies to prevent client-side timeouts.
Configuring Validation Queries via AWS CLI
Apply validation queries directly through the AWS CLI. Use modify-db-proxy with explicit engine family and TLS requirements. Inject the validation query into the connection pool configuration payload.
aws rds modify-db-proxy \
--db-proxy-name my-proxy \
--engine-family POSTGRESQL \
--require-tls \
--connection-pool-configuration '{"MaxConnectionsPercent": 80, "MaxIdleConnectionsPercent": 50, "ConnectionBorrowTimeout": 120, "SessionPinningFilters": ["EXCLUDE_VARIABLE_SETS"]}' \
--validation-query "SELECT 1"
This command sets a lightweight SELECT 1 validation query. It caps connection borrowing at 80% and enforces TLS for backend routing. Always pair this with IdleClientTimeout to recycle unused connections proactively.
Validating Configuration & Running Live Tests
Verify applied settings using describe-db-proxies. Confirm the ValidationQuery field matches your intended payload. Trigger a controlled backend failover to observe connection reuse behavior.
aws rds describe-db-proxies --db-proxy-name my-proxy --query "DBProxies[].ValidationQuery"
Execute live routing tests to confirm validation execution. Use IAM auth tokens to simulate production traffic patterns.
PGPASSWORD=$TOKEN psql -h my-proxy.proxy-abc123.us-east-1.rds.amazonaws.com -U admin -d appdb -c "SELECT 1 AS validation_check;"
Monitor query execution latency. Validation overhead must remain under 50ms. Higher latency indicates backend resource contention or network path degradation.
Tuning Validation Intervals & Timeout Alignment
Validation frequency directly impacts proxy overhead and backend CPU utilization. Set validation intervals between 30s and 120s based on workload volatility. Ensure IdleClientTimeout strictly exceeds the validation interval to prevent premature recycling.
| Parameter | Safe Range | Production Recommendation |
|---|---|---|
| Validation Query Interval | 30s – 120s | 60s for OLTP, 120s for read-heavy workloads |
IdleClientTimeout |
300s – 1800s | 900s (15m) for standard API services |
ConnectionBorrowTimeout |
30s – 300s | 120s to absorb transient validation spikes |
MaxIdleConnectionsPercent |
20% – 70% | 50% to balance memory footprint and reuse |
Disable aggressive validation during high-throughput batch jobs. Excessive checks during bulk inserts or data migrations consume unnecessary backend IOPS. Adjust pool parameters dynamically via CLI or infrastructure templates during maintenance windows.
Configuration Reference
Infrastructure-as-code ensures consistent validation and pool sizing across environments. The following Terraform block enforces MySQL-compatible validation with strict idle recycling.
resource "aws_db_proxy" "main" {
name = "app-proxy"
engine_family = "MYSQL"
idle_client_timeout = 1800
require_tls = true
connection_pool_config {
connection_borrow_timeout = 120
max_connections_percent = 90
max_idle_connections_percent = 50
session_pinning_filters = ["EXCLUDE_VARIABLE_SETS"]
}
}
Deploy this configuration alongside automated drift detection. Validate pool metrics post-deployment to confirm parameter inheritance.
Common Mistakes
- Using heavy
COUNT(*)orJOINqueries as validation: Resource-intensive validation queries block the proxy’s internal thread pool. This increases latency and triggers false-positive stale connection drops. - Setting validation interval shorter than idle timeout: Frequent validation on idle connections wastes RDS compute resources. This can exhaust the backend connection limit during low-traffic periods.
- Ignoring IAM auth token rotation during validation: RDS Proxy validation fails silently if the backend token expires mid-check. This causes cascading connection drops until the application refreshes credentials.
FAQ
Does RDS Proxy support custom validation queries?
SELECT 1 or SELECT pg_is_in_recovery() via the --validation-query flag or console configuration.How often does RDS Proxy run validation queries?
IdleClientTimeout and internal health check intervals.