【发布时间】:2020-02-21 22:23:04
【问题描述】:
我有一个 node.js ETL 系统,它使用 sequelize 将数据加载到亚马逊 RDS PostgreSQL 实例中。突然间,我在将记录插入数据库时开始看到随机超时错误:
TimeoutError: ResourceRequest timed out
at ResourceRequest._fireTimeout (/home/ubuntu/myproject/etl/node_modules/generic-pool/lib/ResourceRequest.js:62:17)
at Timeout.bound (/home/ubuntu/myproject/etl/node_modules/generic-pool/lib/ResourceRequest.js:8:15)
at ontimeout (timers.js:482:11)
at tryOnTimeout (timers.js:317:5)
at Timer.listOnTimeout (timers.js:277:5)
RDS 盒子相当强大 (db.t2.large),自从一年多前它开始运行良好以来,这一直不是问题。
基于这个sequelize discussion,似乎这通常是由于长时间运行并行查询导致sequelize线程池耗尽线程。我认为这里不是这种情况,因为我是按顺序插入行,而不是并行插入。
一般建议是增加 sequelize 的 acquire 设置,该设置决定等待多少毫秒以查看池中的另一个线程是否打开以服务请求。 My 当前设置为 30,000,这似乎是一个非常大的值。比 RDS 向表中插入 1 行所需的时间要长得多。
这是我的配置:
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000,
}
这只是 ec2 和 RDS 之间的网络连接问题吗?似乎那将是一个不同的错误。
【问题讨论】:
标签: node.js sequelize.js amazon-rds