nodejs mysql查询阻塞事件循环

时间:2015-06-17 08:27:54

标签: javascript mysql node.js event-loop

我遇到过这个问题导致在一个完整的应用程序中出现阻塞问题,我已设法将其减少到此代码:

"use strict";
var mysql = require('mysql');
var blocked = require('blocked');

blocked(function(ms) {
  console.warn('event loop blocked for', ms, 'ms');
});

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : '****',
  password : '****'
});

connection.connect(function(err) {
  console.time('query');
  connection.query('SELECT * FROM db.table', function(err, rows, fields) {
    console.log('rows:', rows.length);
    console.timeEnd('query');
    connection.end();
  });
});

我得到了这个输出:

event loop blocked for 445 ms
event loop blocked for 399 ms
event loop blocked for 496 ms
event loop blocked for 388 ms
event loop blocked for 356 ms
event loop blocked for 345 ms
event loop blocked for 354 ms
event loop blocked for 346 ms
event loop blocked for 333 ms
event loop blocked for 344 ms
rows: 115194
query: 4856ms

这当然对我的服务器有非常严重的影响,因为传入的请求必须等待这些时间,并且当每个传入连接运行导致更多阻塞的查询时,这意味着并发性会炸毁我的响应时间。除此之外,我真的不明白它的原因,因为我认为node.js中的IO应该是非阻塞的。顺便说一句,你也可以看到我的桌子不是那么大。

我真的很感激任何帮助,即使你没有解决方案,我也会感谢你的解释。

由于

0 个答案:

没有答案