2015-06-17 116 views
0

我正在使用node.js mysql驅動程序。但是當服務器負載很重時,我猜想mysql正在爲查詢做排隊。我怎樣才能防止這一點?我想立即查詢。Node.js mysql查詢響應延遲

我該如何解決這個問題?我的查詢是滯後的。

我的代碼:

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'ip', 
    user  : 'db', 
    password : 'pass' 
}); 
connection.connect(function(err) { 
    if (err) { 
    console.error('error connecting: ' + err.stack); 
    return; 
    } 
    console.log('connected as id ' + connection.threadId); 
}); 
connection.query('USE db'); 
connection.query({ sql:"select token,COUNT(token) as sayim from tokens where username=? or anon=?", timeout: 10000},[data,data],function(err,info) { 
     if (info[0].sayim != 0) { 
      callback(info[0].token); 
     }else{ 
      callback("0"); 
     } 
    }); 

PS:服務器沒有此返回任何錯誤。但是當我做查詢時,服務器在大約10秒後響應。如果服務器不在高負載下,它會立即響應。

+0

你的mysql配置與這個問題有關?即允許多少個併發連接,它優先化哪種負載平衡等等? –

+0

我已經允許5000個併發連接。但我不認爲MySQL服務器與這個問題沒有關係。因爲我的CPU負載值是好的,我想在phpmyadmin中運行相同的查詢,並且服務器在0.350ms內響應。我想我有node.js mysql驅動程序的問題。 –

回答

1

您可以改爲使用PoolConnection

var connection = mysql.createPool({ 
    host  : 'ip', 
    user  : 'db', 
    password : 'pass', 
    database : 'db' 
}); 

想到的另一件事:在你的例子中,你一個接一個地使用異步函數,這也會給你帶來一些麻煩。

+0

連接限制應該是什麼? –

+0

它主要取決於您對併發連接的需求,通常默認限制(10)就足夠了。如果不是,請將其加倍直到找到準確的值。在編輯此限制之前,我會確保緩慢確實來自併發連接的數量,而不是來自我的代碼或我的查詢(可能沒有足夠優化並且可能花費太多時間) – Ervadac