我有一個nodeJs應用程序,它接收每分鐘0-3000個請求(不規則,無模式)的請求。大約80%-90%的請求導致mysql插入或更新操作。什麼可能的原因會導致nodejs中的mysql隊列限制問題
節點版本 - 4.2.2
MySQL版本 - 14.14 DISTRIB 44年5月5日,使用readline的Debian的Linux-GNU(x86_64的)6.2
使用的框架的NodeJS是的RESTify
我得到的連接從一個大小爲20的mysql連接池。
我時間到了(零星)看到「mysql queue limit reached」的問題。什麼都不可能(從以下原因分開)導致此問題?
- 連接沒有正確關閉
- 隊列大小是不夠的(我怎樣才能確定最佳隊列的大小?)
- 問題用的NodeJS或MySQL版本(可使用什麼版本來解決這個?)在MySQL查詢
- 問題(可能在此問題相關的查詢是有什麼可能的問題?)
- 萬阿英,蔣達清與使用的NodeJS框架(會使用expressJs解決這個?)
EDIT1 這裏是一個框架我是如何查詢的數據庫
connectionPool.getConnection(function (err, conn) {
if (err) {
return callback(err);
} else {
let args = [param1, param2];
let query = "SELECT...";
conn.query(query, args, function (err, rows) {
conn.release();
if (err) {
return callback(err);
} else {
return callback(null, rows);
}
});
}
});
EDIT2 這裏是mysql的配置我到現在爲止。我對這些價值觀沒有太多的想法。他們很好嗎?
{
"connectionLimit": 10,
"acquireTimeout": 60000,
"host": "*****",
"port": "3306",
"user": "*****",
"password": "****",
"database": "*****",
"charset": "UTF8_GENERAL_CI",
"debug": false,
"waitForConnections" : true,
"queueLimit" : 15000
}
您使用哪種框架連接到節點中的mysql?有太多的連接應該給你另一個錯誤,所以可能不是問題。隊列大小似乎是連接到mysql的nodejs框架的結構,如果我沒有錯,那麼問題可能在這裏。我高度懷疑node或mysql是這個問題的原因。 –
我正在使用mysql nodejs驅動程序來連接數據庫。它似乎是最穩定和最受歡迎的驅動程序 https://www.npmjs.com/package/mysql –
是的,隊列大小是驅動程序的構造函數,通過nodejs代碼完成 –