Connection Pooling#
PoolConfig configures connection pool behavior for pooled drivers.
PoolConfig Fields#
const PoolConfig(
min: 2,
max: 10,
acquireTimeoutMillis: 60000,
idleTimeoutMillis: null,
reapIntervalMillis: 1000,
)
min: minimum open connections to keep.max: maximum open connections.acquireTimeoutMillis: max wait time to get a connection from the pool.idleTimeoutMillis: how long an idle connection can stay open before cleanup.reapIntervalMillis: how often idle-connection cleanup runs.
PostgreSQL Example#
import 'package:knex_dart/knex_dart.dart' show PoolConfig;
import 'package:knex_dart_postgres/knex_dart_postgres.dart';
final db = await KnexPostgres.connect(
host: 'localhost',
database: 'app',
username: 'postgres',
password: 'secret',
poolConfig: const PoolConfig(
min: 2,
max: 10,
acquireTimeoutMillis: 30000,
idleTimeoutMillis: 30000,
reapIntervalMillis: 1000,
),
);
MySQL Example#
import 'package:knex_dart/knex_dart.dart' show PoolConfig;
import 'package:knex_dart_mysql/knex_dart_mysql.dart';
final db = await KnexMySQL.connect(
host: 'localhost',
user: 'root',
password: 'secret',
database: 'app',
poolConfig: const PoolConfig(
min: 2,
max: 10,
acquireTimeoutMillis: 30000,
idleTimeoutMillis: 30000,
reapIntervalMillis: 1000,
),
);
Drivers Without Pooling#
These drivers currently run without a connection pool (single-connection or request-based transport):
knex_dart_sqliteknex_dart_duckdbknex_dart_mssqlknex_dart_bigqueryknex_dart_snowflakeknex_dart_tursoknex_dart_d1
Best Practices#
- Start with
min: 2to keep warm connections ready. - Set
maxbased on database limits and app concurrency. - Use
idleTimeoutMillisto clean up idle connections in bursty workloads. - Keep
reapIntervalMillissmall (default1000) for predictable idle cleanup.
Implementation note: PostgreSQL and MySQL both accept
PoolConfig; MySQL currently uses all five fields directly, while PostgreSQL primarily usesmaxandacquireTimeoutMillisin its underlying pool settings.