使用Sequelize与RDS得到TimeoutError.ResourceRequest超时。资源请求已超时

问题描述 投票:1回答:1

我有一个node.js ETL系统,它可以通过使用 封号. 突然间,我开始看到随机超时错误,而插入记录到数据库。

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线程池耗尽线程所致。我认为这里的情况不是这样,因为我是以串联方式插入行,而不是并行方式。

一般来说,建议增加 sequelize 的 acquire 设置,它决定了它将等待多少毫秒,以查看池中的另一个线程是否打开来服务请求。我的目前设置为30000,这似乎是一个非常大的值。比RDS在表中插入1行所需的时间要长得多。

这是我的配置。

pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000,
}

这是否只是ec2和RDS之间的网络连接问题?好像是不同的错误。

node.js sequelize.js amazon-rds
1个回答
0
投票

1) 检查你现有的连接。

SELECT client_addr, count(*) FROM pg_stat_activity WHERE datname = 'YOUR_DB_NAME' GROUP BY client_addr;

2) 你可以增加最大池大小。

3) 有时你的查询速度很慢,需要1分钟以上,或者是错误的查询,比如事务开始了,但从未结束。 在这种情况下,1个连接总是繁忙的。

© www.soinside.com 2019 - 2024. All rights reserved.