Использование Sequelize с RDS для получения TimeoutError: истекло время ожидания ResourceRequest - PullRequest
0 голосов
/ 25 октября 2019

У меня есть ETL-система node.js, которая загружает данные в экземпляр Amazon RDS PostgreSQL, используя sequelize . Внезапно я начал видеть случайные ошибки тайм-аута при вставке записей в базу данных:

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), и это не было проблемой, так как эта вещь началасьработали более года назад.

Исходя из этого последующего обсуждения , кажется, что это обычно происходит из-за того, что в пуле последовательных потоков исчерпаны потоки из-за длительных параллельных запросов. Я не думаю, что это имеет место здесь, потому что я вставляю строки последовательно, а не параллельно.

Обычно совет заключается в том, чтобы увеличить параметр секвелизации acquire, который определяет, сколько миллисекунд она будет ждать, чтобы увидеть,другой поток в пуле открывается для обслуживания запроса. Мой в настоящее время установлен на 30 000, что кажется очень большим значением. Намного дольше, чем требуется для RDS, чтобы вставить 1 строку в таблицу.

Вот мой конфиг:

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

Это просто проблема с сетевым подключением между ec2 и RDS? Похоже, это было бы другой ошибкой.

...