使用 knex 插入数据时使用率高 CPU (300%)

High CPU usage (300%) when inserting data with knex

我想通过 knex 向 SQL 服务器插入大量数据。我已经降低了一次插入的数量和插入的并发性,但我仍然以 CPU 高使用率告终。 knex 是否可以为每个插入启动一个连接?任何输入将不胜感激谢谢。 这是我用来连接数据库的代码。

client: "mssql",
    connection: {
      server: productionDbIp,
      user: productionDbUsername,
      password: productionDbPassword,
      database: productionDbName,
      options: {
        port: productionDbPort
      },
      pool: { min: 0, max: 7 }
    }

这是用于查询插入的代码

const insertQue = new PQueue({ concurrency: 1 });

// format inserts returns an array of objects that are ready to be inserted
const [inserts] = await formatInserts(distinctData);

    const insertPromises = [];

    while (inserts.length > 0) {
      const insert = inserts.splice(0,10);

      try {
        insertPromises.push(
          insertQue.add(() => insertToDb(insert, 'tableName'))
        );

      } catch (error) {
        console.log(error);
      }
    }
    try {
      await Promise.all(insertPromises);
    } catch (error) {
      console.log(error);
    }
  }

async function insertToDb(data, table, numTry = 0) {
  try {
    return await knex(table).insert(data);
  } catch (error) {
    if (numTry > 3) {
      console.log(error);
      throw { message: `Error inserting data`, data };
    }
    return insertToDb(data, numTry + 1);
  }
}

快速 Google 搜索显示此答案 https://apple.stackexchange.com/q/240204

所以拥有 300% 可能甚至不是问题。您的虚拟核心正准备完成他们的工作。由于您使用的是异步调用,因此多个 proc 可以一起工作。