【问题标题】:High CPU usage (300%) when inserting data with knex使用 knex 插入数据时 CPU 使用率高 (300%)
【发布时间】:2019-12-09 21:01:22
【问题描述】:

我想通过 knex 向 SQL Server 插入大量数据。我已经降低了一次插入的数量和插入的并发性,但最终还是会导致 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);
  }
}

【问题讨论】:

  • 我对 knex 一无所知,但您是否尝试过调用存储过程而不是直接数据库插入?
  • 不,我没有尝试过。我会调查一下谢谢

标签: node.js sql-server knex.js


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我想这就是正在发生的事情
  • 您好@ConnorRobertson,请标记答案以结束您的问题:这将整理 StackOverflow 并在您提出下一个问题时为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-09
  • 2014-07-16
相关资源
最近更新 更多