Я столкнулся со странной проблемой, я использую node-oracledb v4.2, и когда я развертываю приложение в контейнере, я могу получить данные из БД, это простой запрос выбора.
Статистика пула в это время -
Pool statistics:
...total up time (milliseconds): 1026553
...total connection requests: 38
...total requests enqueued: 0
...total requests dequeued: 0
...total requests failed: 0
...total request timeouts: 0
...max queue length: 0
...sum of time in queue (milliseconds): 0
...min time in queue (milliseconds): 0
...max time in queue (milliseconds): 0
...avg time in queue (milliseconds): 0
...pool connections in use: 0
...pool connections open: 2
Related pool attributes:
...poolAlias: default
...queueTimeout (milliseconds): 60000
...poolMin: 0
...poolMax: 10
...poolIncrement: 2
...poolTimeout (seconds): 60
...poolPingInterval: 60
...sessionCallback: undefined
...stmtCacheSize: 30
Pool status:
...status: 6000
После 2 часов бездействия, когда я вызываю сервис, мы получаем ошибку, и кажется, что conn = await oracledb.getConnection (); не возвращает никакого соединения из пула, и он зависает
Статистика пула в это время
Pool statistics:
...total up time (milliseconds): 8298059
...total connection requests: 46
...total requests enqueued: 0
...total requests dequeued: 0
...total requests failed: 0
...total request timeouts: 0
...max queue length: 0
...sum of time in queue (milliseconds): 0
...min time in queue (milliseconds): 0
...max time in queue (milliseconds): 0
...avg time in queue (milliseconds): 0
Я застрял не уверен, что происходит, пожалуйста, предложите
Обновленный комментарий -
Я использую приведенную ниже docker конфигурацию
FROM oraclelinux:7-slim
RUN yum -y install oracle-release-el7 oracle-nodejs-release-el7 && \
yum-config-manager --disable ol7_developer_EPEL --enable ol7_oracle_instantclient && \
yum -y install nodejs oracle-instantclient19.5-basiclite && \
rm -rf /var/cache/yum
Обновлено 2
function simpleExecute(statement, binds = [], opts = {}) {
return new Promise(async (resolve, reject) => {
let conn;
opts.outFormat = oracledb.OBJECT;
opts.autoCommit = true;
try {
conn = await oracledb.getConnection();
logger.info("Got Connection"+(await oracledb.getConnection()).oracleServerVersion);
const result = await conn.execute(statement, binds, opts);
logger.info("Got Result");
resolve(result);
} catch (err) {
logger.info("Error"+err);
reject(err);
} finally {
if (conn) { // conn assignment worked, need to close
try {
await conn.release();
logger.info("Connection closed");
} catch (err) {
logger.info("Connection closed error"+err);
}
}
}
});
}