池不断增加连接,最终以ER_CON_COUNT_ERROR结束

时间:2014-03-27 18:22:33

标签: mysql node.js node-mysql

我有一个名为Connection的类,如下所示。这只执行select语句。我有非池连接用于插入或更新。

var _mysql = require('mysql');

function Connection()
{
    //private variables and dependencies includes

    //create mysql pool connection requires nodejs mysql this connection is used only for selects.
    var _connectionSelect = _mysql.createPool({
        host                : _config.mySQLDB.select.dbHost,
        user                : _config.mySQLDB.select.dbUser,
        password            : _config.mySQLDB.select.dbPass,
        database            : _config.mySQLDB.select.dbName,
        supportBigNumbers   : true,
        connectTimeout      : 7000,
        connectionLimit     : 5,
        queueLimit          : 5
    });
this.executeSelect = function(sql, callback, Message)
    {
        //connects to mysql.
        _connectionSelect.getConnection(function(connectionError, Connection){
            if(connectionError)
            {
                console.log(connectionError);
                //throws error if connection or sql gone wrong
                Message.add("error", 'serviceDown');
                Message.add("devError", 'unknownError');
                callback(false);
            }
            else
            {
                //executes the query passed
                Connection.query(sql, function(error, rows) {
                    Message.incerementQuery();
                    if(error)
                    {
                        Connection.release();
                        console.log(error+sql);
                        //throws error if connection or sql gone wrong
                        Message.add("error", 'unknownError');
                        Message.add("devError", "seriousError", "Database errors at resource server side");
                        callback(false);
                    }
                    else
                    {
                        Connection.release();
                        //executes the callback function
                        callback(rows);
                    }
                });
            }
        });
    };
}

exports.Connection = Connection;

每当我想执行查询时,我就创建了这个类的实例。

我知道MySQL中的默认并发连接是100,我想保留这个数字。

每当我尝试运行我的应用程序时,此连接池将逐步递增每个选择并很快达到100个连接。

正如您所看到的,我正在释放成功或错误状态的连接。我很确定我一定做错了什么,但很难搞清楚。

是因为我如何创建这个类的实例?我希望如果我提供

connectionLimit : 5

即使我创建了这个类的许多实例,它应该只使用5个连接?

注意:我的本地计算机中只有一个此应用程序的实例。

很抱歉非常业余,我是这个流媒体I / O业务的新手。我喜欢汇集的想法,但如果我无法解决这个问题,我可能需要为每个查询使用传统的开放和关闭连接。任何帮助将不胜感激。

非常感谢,

KARTHIK

1 个答案:

答案 0 :(得分:3)

得到了来自git hub https://github.com/dougwilson的Doug Wilson的答案。

我应该在函数之外实例化createPool。像魅力一样。

代码就像

    var _mysql = require('mysql');
//create mysql pool connection requires nodejs mysql this connection is used only for selects.
        var _connectionSelect = _mysql.createPool({
            host                : _config.mySQLDB.select.dbHost,
            user                : _config.mySQLDB.select.dbUser,
            password            : _config.mySQLDB.select.dbPass,
            database            : _config.mySQLDB.select.dbName,
            supportBigNumbers   : true,
            connectTimeout      : 7000,
            connectionLimit     : 5,
            queueLimit          : 5
        }


    function Connection()
    {
        //private variables and dependencies includes

       );
    this.executeSelect = function(sql, callback, Message)
        {
            //connects to mysql.
            _connectionSelect.getConnection(function(connectionError, Connection){
                if(connectionError)
                {
                    console.log(connectionError);
                    //throws error if connection or sql gone wrong
                    Message.add("error", 'serviceDown');
                    Message.add("devError", 'unknownError');
                    callback(false);
                }
                else
                {
                    //executes the query passed
                    Connection.query(sql, function(error, rows) {
                        Message.incerementQuery();
                        if(error)
                        {
                            Connection.release();
                            console.log(error+sql);
                            //throws error if connection or sql gone wrong
                            Message.add("error", 'unknownError');
                            Message.add("devError", "seriousError", "Database errors at resource server side");
                            callback(false);
                        }
                        else
                        {
                            Connection.release();
                            //executes the callback function
                            callback(rows);
                        }
                    });
                }
            });
        };
    }

    exports.Connection = Connection;

非常感谢。很抱歉这么傻。

KARTHIK