您当前的位置: 首页 >  sql

qianbo_insist

暂无认证

  • 1浏览

    0关注

    399博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

mysql nodejs 并发

qianbo_insist 发布时间:2019-09-05 20:46:54 ,浏览量:1

并发

在一条sql执行的时间内,如果来了1000条访问请求,那么一次查询结果将返回给1000条请求,

var EventProxy = require('eventproxy');
var proxy = new EventProxy();
var status = "ready";
var select = function(callback){
  proxy.once("selected",callback);
  if(status == "ready"){
  	status = "pending";
  	db.select("SQL", function(results){
  		proxy.emit("selected",results);
  		status = "ready";
  	});
  }
}
function query(sql, sqlParams, callback) {
    pool.getConnection(function (err, conn) {
        if (err) {
            callback(err, null, null);
        } else {
            conn.query(sql, sqlParams, function (qerr, vals, fields) {
                callback(qerr, vals, fields);
            });
        }
        // conn.release(); // not work!!!
        pool.releaseConnection(conn);
    });
};

exports.init = function (config) {
    pool = mysql.createPool({
        host: config.HOST,
        user: config.USER,
        password: config.PSWD,
        database: config.DB,
        port: config.PORT,
    });
};

并发访问时,通过conn.release()释放连接不成功,导致一定访问达到连接数上限后,pool.getConnection直接卡死没有任何的回调! 需要改成pool.releaseConnection(conn)

//上面其实是错误的,应该是这样,放到query以后

let pool  = mysql.createPool(mysql_config);

module.exports={
    select : function(sql,params,callback){
        if(sql.toLowerCase().indexOf('select') == -1){
            console.log('非查询语句不可使用!');
            return false;
        }
        pool.getConnection(
            function(err,connection){
                if(err){
                    callback(err,null,null);
                    return false;
                }

                connection.query(sql,params,function(err,results,fields){
                    //释放连接
                    connection.release();
                    //事件驱动回调
                    callback(err,results,fields);
                });
            });
    }
};
mysql连接查看 1:查看当前连接

mysql> show status like ‘Threads%’; ±------------------±------+ | Variable_name | Value | ±------------------±------+ | Threads_cached | 58 | | Threads_connected | 57 | ###这个数值指的是打开的连接数 | Threads_created | 3676 | | Threads_running | 4 | ###这个数值指的是激活的连接数,这个数值一般远低于connected数值 ±------------------±------+

Threads_connected 跟show processlist结果相同,表示当前连接数。准确的来说,Threads_running是代表当前并发数

2:这是是查询数据库当前设置的最大连接数

mysql> show variables like ‘%max_connections%’; ±----------------±------+ | Variable_name | Value | ±----------------±------+ | max_connections | 1000 | ±----------------±------+

3:显示连接列表

mysql> show processlist;

4:显示连接状态

mysql> SHOW STATUS LIKE ‘%connect%’;

linux 配置

net.core.rmem_max = 33554432 net.core.wmem_max = 33554432 net.ipv4.tcp_rmem = 4096 16384 33554432 net.ipv4.tcp_wmem = 4096 16384 33554432 net.ipv4.tcp_mem = 786432 1048576 26777216 net.ipv4.tcp_max_tw_buckets = 360000 net.core.netdev_max_backlog = 2500 vm.min_free_kbytes = 65536 vm.swappiness = 0 net.ipv4.ip_local_port_range = 1024 65535

sysctl -w net.ipv4.tcp_tw_recycle=1 sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.ip_local_port_range=“2000 65535” 如果可以,增加远端服务的 IP 数量也是一个有效且非常推荐的方法。

关注
打赏
1663161521
查看更多评论
立即登录/注册

微信扫码登录

0.0380s