Estoy usando Knex.js con MySQL y me gustaría utilizar un grupo de conexiones, ya que la prueba tiene una gran carga.
Aunque configuré pool.max en 10, nunca veo que se use más de 1 conexión. Aquí hay un ejemplo que ejecuta una consulta cada 100ms:
const db = require("knex")({ client: "mysql", connection: { user: "admin", password: "xx!", database: "xx", host: "xx", port: 3306, }, debug: false, pool: { min: 2, max: 10, }, }); (async () => { setInterval(async () => { await db("titles").select(1).limit(1); console.log("numUsed", db.client.pool.numUsed()); console.log("numFree", db.client.pool.numFree()); console.log("--"); }, 100); })();Cuando ejecuto esto, veo lo siguiente:
numUsed 2 numFree 0 -- numUsed 2 numFree 0 -- numUsed 3 numFree 0 -- numUsed 2 numFree 1 -- numUsed 1 numFree 2 -- numUsed 1 numFree 3 -- numUsed 0 numFree 5 -- numUsed 1 numFree 4 -- numUsed 0 numFree 5 -- numUsed 0 numFree 5 -- numUsed 0 numFree 5 -- numUsed 0 numFree 5Podemos ver aquí que el número utilizado SÍ aumenta a un máximo de 3 y luego se reduce a 0. No entiendo este comportamiento y no puedo encontrar nada documentado para explicarlo.
¿Hay algo que deba hacer manualmente para forzar el uso de un recurso de grupo?
Veo en los documentos tarn.js (el grupo usó mi knex) hay métodos para acquire() y release() . Mi expectativa (dado que no está documentado) es que Knex gestione esto por mí.
Agradezco cualquier orientación.