Вот пример, демонстрирующий действие параметров pool.max
и pool.idle
.
Окружающая среда:
"sequelize": "^5.21.3"
node
: v12.16.1
PostgreSQL
: 9.6
Код клиента:
db.ts
:
const sequelize = new Sequelize({
dialect: 'postgres',
host: envVars.POSTGRES_HOST,
username: envVars.POSTGRES_USER,
password: envVars.POSTGRES_PASSWORD,
database: envVars.POSTGRES_DB,
port: Number.parseInt(envVars.POSTGRES_PORT, 10),
define: {
freezeTableName: true,
timestamps: false,
},
pool: {
max: 5,
min: 0,
idle: 10 * 1000,
},
});
export { sequelize };
pool_test.ts
:
import { sequelize } from '../../db';
for (let i = 0; i < 100; i++) {
sequelize.query('select pg_sleep(1);');
}
Запустите сервер PostgreSQL с помощью док-контейнера:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3c9c0fd1bf53 postgres:9.6 "docker-entrypoint.s…" 5 months ago Up 27 hours 0.0.0.0:5430->5432/tcp node-sequelize-examples_pg_1
Запустите тестовый код:
DEBUG=sequelize* npx ts-node ./pool_test.ts
Отчет об ошибках:
sequelize:pool pool created with max/min: 5/0, no replication +0ms
sequelize:connection:pg connection acquired +0ms
sequelize:connection:pg connection acquired +38ms
sequelize:connection:pg connection acquired +3ms
sequelize:connection:pg connection acquired +0ms
sequelize:connection:pg connection acquired +1ms
sequelize:connection:pg connection acquired +1ms
sequelize:pool connection acquired +97ms
sequelize:sql:pg Executing (default): select pg_sleep(1); +0ms
Executing (default): select pg_sleep(1);
sequelize:pool connection acquired +2ms
sequelize:pool connection acquired +0ms
sequelize:pool connection acquired +0ms
sequelize:pool connection acquired +0ms
sequelize:sql:pg Executing (default): select pg_sleep(1); +2ms
Executing (default): select pg_sleep(1);
sequelize:sql:pg Executing (default): select pg_sleep(1); +2ms
Executing (default): select pg_sleep(1);
sequelize:sql:pg Executing (default): select pg_sleep(1); +0ms
Executing (default): select pg_sleep(1);
sequelize:sql:pg Executing (default): select pg_sleep(1); +0ms
Executing (default): select pg_sleep(1);
sequelize:sql:pg Executed (default): select pg_sleep(1); +1s
sequelize:pool connection released +1s
sequelize:pool connection acquired +1ms
sequelize:sql:pg Executed (default): select pg_sleep(1); +2ms
sequelize:sql:pg Executed (default): select pg_sleep(1); +0ms
sequelize:sql:pg Executed (default): select pg_sleep(1); +0ms
sequelize:sql:pg Executed (default): select pg_sleep(1); +0ms
sequelize:sql:pg Executing (default): select pg_sleep(1); +1ms
Executing (default): select pg_sleep(1);
sequelize:pool connection released +1ms
sequelize:pool connection released +0ms
sequelize:pool connection released +0ms
sequelize:pool connection released +0ms
sequelize:pool connection acquired +1ms
sequelize:pool connection acquired +0ms
sequelize:pool connection acquired +0ms
sequelize:pool connection acquired +0ms
Заходим в докер-контейнер, проверяем процесс подключения:
root@3c9c0fd1bf53:/# date '+%A %W %Y %X' && ps aux | grep "postgres: testuser"
Thursday 31 2020 09:51:34 AM
postgres 13615 0.0 0.7 289496 16064 ? Ss 08:29 0:00 postgres: testuser node-sequelize-examples [local] idle
postgres 14335 0.0 0.5 288384 11248 ? Ss 09:51 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45704) SELECT
postgres 14336 0.0 0.5 288384 11248 ? Ss 09:51 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45706) SELECT
postgres 14337 0.0 0.5 288384 11252 ? Ss 09:51 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45708) SELECT
postgres 14338 0.0 0.5 288384 11248 ? Ss 09:51 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45710) SELECT
postgres 14339 0.0 0.5 288384 11248 ? Ss 09:51 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45712) SELECT
postgres 86437 0.0 0.6 288804 13704 ? Ss 00:57 0:00 postgres: testuser node-sequelize-examples [local] idle
Как видите, процессов подключения 5(pool.max).
После обработки соединения IDLE 10(pool.idle) секунд. Процессы подключения будут уничтожены.
root@3c9c0fd1bf53:/# date '+%A %W %Y %X' && ps aux | grep "postgres: testuser"
Thursday 31 2020 09:53:48 AM
postgres 13615 0.0 0.7 289496 16064 ? Ss 08:29 0:00 postgres: testuser node-sequelize-examples [local] idle
postgres 14352 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45716) idle
postgres 14353 0.0 0.5 288384 11252 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45718) idle
postgres 14354 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45720) SELECT
postgres 14355 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45722) idle
postgres 14356 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45724) SELECT
root 14440 0.0 0.0 12784 972 pts/3 S+ 09:53 0:00 grep postgres: testuser
postgres 86437 0.0 0.6 288804 13704 ? Ss 00:57 0:00 postgres: testuser node-sequelize-examples [local] idle
root@3c9c0fd1bf53:/# date '+%A %W %Y %X' && ps aux | grep "postgres: testuser"
Thursday 31 2020 09:53:49 AM
postgres 13615 0.0 0.7 289496 16064 ? Ss 08:29 0:00 postgres: testuser node-sequelize-examples [local] idle
postgres 14352 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45716) idle
postgres 14353 0.0 0.5 288384 11252 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45718) idle
postgres 14354 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45720) idle
postgres 14355 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45722) idle
postgres 14356 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45724) idle
postgres 86437 0.0 0.6 288804 13704 ? Ss 00:57 0:00 postgres: testuser node-sequelize-examples [local] idle
root@3c9c0fd1bf53:/# date '+%A %W %Y %X' && ps aux | grep "postgres: testuser"
Thursday 31 2020 09:53:55 AM
postgres 13615 0.0 0.7 289496 16064 ? Ss 08:29 0:00 postgres: testuser node-sequelize-examples [local] idle
postgres 14352 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45716) idle
postgres 14353 0.0 0.5 288384 11252 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45718) idle
postgres 14354 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45720) idle
postgres 14355 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45722) idle
postgres 14356 0.0 0.5 288384 11248 ? Ss 09:53 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45724) idle
root 14446 0.0 0.0 12784 932 pts/3 S+ 09:53 0:00 grep postgres: testuser
postgres 86437 0.0 0.6 288804 13704 ? Ss 00:57 0:00 postgres: testuser node-sequelize-examples [local] idle
root@3c9c0fd1bf53:/# date '+%A %W %Y %X' && ps aux | grep "postgres: testuser"
Thursday 31 2020 09:53:58 AM
postgres 13615 0.0 0.7 289496 16064 ? Ss 08:29 0:00 postgres: testuser node-sequelize-examples [local] idle
root 14449 0.0 0.0 12784 940 pts/3 S+ 09:53 0:00 grep postgres: testuser
postgres 86437 0.0 0.6 288804 13704 ? Ss 00:57 0:00 postgres: testuser node-sequelize-examples [local] idle
журналы отладки клиента:
...
sequelize:pool connection released +25ms
sequelize:pool connection destroy +10s
sequelize:pool connection destroy +0ms
sequelize:pool connection destroy +0ms
sequelize:pool connection destroy +0ms
sequelize:pool connection destroy +1ms
Если вы измените pool.max
на 10
, проверьте количество процессов подключения:
root@3c9c0fd1bf53:/# date '+%A %W %Y %X' && ps aux | grep "postgres: testuser"
Thursday 31 2020 09:56:51 AM
postgres 13615 0.0 0.7 289496 16064 ? Ss 08:29 0:00 postgres: testuser node-sequelize-examples [local] idle
postgres 14457 0.0 0.5 288384 11248 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45728) SELECT
postgres 14458 0.0 0.5 288384 11252 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45730) SELECT
postgres 14459 0.0 0.5 288384 11252 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45732) SELECT
postgres 14460 0.0 0.5 288384 11248 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45734) SELECT
postgres 14461 0.0 0.5 288384 11248 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45736) SELECT
postgres 14462 0.0 0.5 288384 11248 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45738) SELECT
postgres 14463 0.0 0.5 288384 11244 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45740) SELECT
postgres 14464 0.0 0.5 288388 11244 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45742) SELECT
postgres 14465 0.0 0.5 288388 11244 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45744) SELECT
postgres 14466 0.0 0.5 288388 11248 ? Ss 09:56 0:00 postgres: testuser node-sequelize-examples 172.18.0.1(45746) SELECT
root 14472 0.0 0.0 12784 944 pts/3 S+ 09:56 0:00 grep postgres: testuser
postgres 86437 0.0 0.6 288804 13704 ? Ss 00:57 0:00 postgres: testuser node-sequelize-examples [local] idle
person
slideshowp2
schedule
06.08.2020