[英]How do I search for a substring in a JSON field in MySQL (Knex/Bookshelf)?
[英]How to properly use Knex / Bookshelf with MySQL on RDS
我有一個Node.js
應用程序,在帶有Bookshelf
和Knex
庫的AWS RDS
上使用MySQL
。 RDS 實例的max_connections
值為90
。 我使用以下作為連接 object。
knex: {
client: 'mysql',
connection: {
host: 'xxxxxxx.rds.amazonaws.com',
user: 'xxx',
password: 'xxxxx',
database: 'xxxx',
charset: 'utf8'
},
debug: true,
pool: {
min: 2,
max: 20
},
acquireConnectionTimeout: 10000
},
const config = require('./environment');
const knex = require('knex')(config.knex);
module.exports = require('bookshelf')(knex).plugin('registry');
'use strict';
const bookshelf = require('../config/bookshelf');
const config = require('../config/environment');
module.exports = bookshelf.model(`TableA`, {
tableName: 'TableA'
}, {});
我有很多請求伴隨着應用程序,有時會因以下錯誤而崩潰。
未處理的拒絕 TimeoutError:Knex:獲取連接超時。 游泳池可能已經滿了。 你錯過了 a.transacting(trx) 電話嗎?
和
錯誤:ER_CON_COUNT_ERROR:連接太多
此外,我在服務器PROCESSLIST
中看到許多連接(平均 40 到 50 個),其中Command
為sleep
。
我懷疑這些錯誤發生在服務器上的所有90
連接完全使用/knex 嘗試從他的池中獲取新連接時。 什么可能是解決此問題的永久解決方案,以及處理此類應用程序的最佳實踐。
我不認為是導致問題的 RDS max_connections
,假設您在任何時候都只有一個上述應用程序代碼的實例。
您的應用程序使用數據庫連接池,最多可容納 20 個連接。 如果所有這些連接都在使用中,那么在您的情況下,應用程序最多等待acquireConnectionTimeout
毫秒,即連接超時之前的10000
毫秒。
所以我懷疑您的應用程序要么由於負載而需要處理大量數據庫查詢,要么有一些慢速查詢占用連接。 這會導致等待最終超時的連接的查詢積壓。 調查可能是這種情況並更新我們。
您可以在此期間嘗試的事情。
acquireConnectionTimeout
。如果是由慢查詢引起的,請在嘗試上述操作之前對其進行優化。
記錄慢速查詢的可能方法:
當客戶端完成 MySQL 后,將其斷開。
另外,檢查wait_timeout
的值。 降低它會強制斷開連接,而不是“睡眠”,直到你回來。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.