Knex: mendapatkan "Knex: Timeout memperoleh koneksi. Pool mungkin penuh." kesalahan

Dibuat pada 2 Nov 2017  ·  18Komentar  ·  Sumber: knex/knex

Saya menghadapi "Penolakan yang tidak tertangani TimeoutError: Knex: Timeout memperoleh koneksi. Kumpulan mungkin penuh. Apakah Anda melewatkan panggilan .transacting(trx)?" masalah. Ada banyak kueri yang berjalan sehingga saya tidak dapat menemukan kueri yang menyebabkannya. Masalah ini tampaknya menjadi serius ketika ukuran postgres meningkat. Apakah ada solusi?

Komentar yang paling membantu

Saya memecahkan masalah dengan versi ini:

"knex": "^0.21.1",
"objection": "^2.1.3",
"pg": "^8.0.3"

Semua 18 komentar

Saya juga menghadapi masalah ini.

Saya memiliki masalah yang sama.

Solusinya adalah mengisolasi sumbernya dan memperbaikinya. Ini bukan kesalahan "permintaan", melainkan masalah arsitektur aplikasi. Kesalahan terjadi ketika knex tidak dapat memperoleh koneksi dalam (default) 60 detik, dan kemungkinan besar alasannya adalah kolam penuh.

Dengan kata lain ada banyak hal yang dapat menyebabkan kesalahan. Dua yang paling umum adalah:

  1. Anda lupa melakukan transaksi / lupa memanggil .transacing(trx) pada pembuat kueri saat sudah berada di kumpulan maksimal yang tidak hanya menyebabkan transaksi tidak aktif tetapi juga memunculkan kesalahan karena tidak ada koneksi yang dapat diperoleh.
  2. Pool terus-menerus disibukkan pada kapasitas maksimum setidaknya (default) 60 detik non-stop, misalnya karena lalu lintas yang padat atau prosedur yang berjalan lama.

Anda harus memeriksa status basis data Anda ketika kesalahan ini terjadi - apakah ada banyak koneksi yang tidak aktif? apakah ada terlalu banyak koneksi? dll.

Saya juga menghadapi kesalahan ini.

rejecter(new _bluebird2.default.TimeoutError('Knex: Timeout acquiring a connection. The pool is probably full. ' + 'Are you missing a .transacting(trx) call?')); ^ TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?

Saat kami bekerja untuk menggali koneksi arsitektur kami, adakah cara untuk mencegah kesalahan ini dari crash aplikasi? Atau setidaknya kesalahan bisa menunjukkan tumpukan?

@rsfernandes Selama Anda menggunakan penangan catch pada pembuat Anda, saya tidak melihat bagaimana kesalahan ini akan membuat crash seluruh aplikasi.

Adapun tumpukan, saya sarankan longStackTraces . Tidak ada yang dibangun ke dalam knex khusus untuk tumpukan kesalahan ini.

FWIW Saya mendapatkan kesalahan ini dengan layanan database AWS Aurora, dan itu disebabkan oleh fitur shutdown otomatis yang menghentikan database setelah tidak aktif (startup otomatis database membutuhkan waktu sekitar satu menit, dan itu menyebabkan knex kehabisan waktu)

https://github.com/tgriesser/knex/issues/3159 Ada daftar beberapa saran untuk mengatasi aurora.

@wubzz

  1. Pool terus-menerus disibukkan pada kapasitas maksimum setidaknya (default) 60 detik non-stop, misalnya karena lalu lintas yang padat atau prosedur yang berjalan lama.

Jika ini masalahnya, rekomendasi apa yang mungkin diambil jika tidak bisa begitu saja melakukan lebih sedikit pekerjaan? 😅.

Tambah batas waktu atau kapasitas maksimal?

Masalah saya bukan dengan knex melainkan dengan aturan masuk grup keamanan di aws RDS saya. Itu disetel ke alamat ip mesin lokal saya saja dan jadi saya tidak dapat menghubungkannya dari instance EC2. membuat frustrasi karena pesan kesalahan tidak membantu.
Jika Anda memiliki pesan kesalahan ini, ini mungkin terkait dengan fakta bahwa knex tidak dapat membuat koneksi. jadi periksa juga jaringan Anda!

Ya, saya kira itu bisa terjadi jika koneksi diblokir sepenuhnya ... mungkin mengatur batas waktu koneksi yang berbeda dan batas waktu yang diizinkan dapat membedakan antara kedua kasus ini.

Saya memecahkan masalah dengan versi ini:

"knex": "^0.21.1",
"objection": "^2.1.3",
"pg": "^8.0.3"

Anda mungkin harus beralih ke Node 12 BUKAN Node 14

Saya memiliki batas kumpulan basis data, saya dapat memperbaiki masalah dengan menyetel min dan maks

Saya memiliki masalah yang sama di mac saya. saya menjalankan knex dari terminal baris perintah dan tiba-tiba mulai melihat masalah Knex: Timeout... ini. Saya menemukan bahwa masalahnya pindah ke zsh Shell alih-alih bash. Saya telah menggunakan bash untuk waktu yang lama, dan baru-baru ini saya mencoba beralih ke zsh sesuai pedoman Apple. Segera setelah saya kembali ke bash itu diperbaiki.

Semoga itu membantu seseorang.

Anda mungkin harus beralih ke Node 12 BUKAN Node 14

Ini bekerja untuk saya di mac docker-compose node:12 alih-alih node (v14). Terima kasih.

Saya mencoba menegakkan menggunakan versi simpul server dengan menggunakan nvm exec 12 node ./src/index... dan mengalami kesalahan di atas.

Dengan meluncurkan node secara langsung, kesalahan hilang dan koneksi dibuat.

Jadi pastikan Anda menggunakan pengaturan biasa dan normal dan mungkin node 12.

@batadamnjanovic Anda menyelamatkan saya setelah dua hari penuh penelitian. TY !!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ErisDS picture ErisDS  ·  61Komentar

kobalicek picture kobalicek  ·  40Komentar

tybenz picture tybenz  ·  53Komentar

lfaz picture lfaz  ·  30Komentar

tgriesser picture tgriesser  ·  54Komentar