2

我正在尝试用于连接到 MSSQL 数据库的繁琐模块。

让我告诉你我的代码...

var connection = new Connection(config);
connection.on('connect', function(err) {
// If no error, then good to go...
    console.log("Connected");
    executeStatement();
});

connection.on('error', function(err) {
    console.log("Error");
});




function executeStatement() {   
    var stmt = new Request("Select id from customers", function (err,rowCount) {
        if (err) console.log(err);      
        console.log("RowCount: " + rowCount);       
        process.exit(1);
    });

    stmt.on( 'row', function (columns) {            
        console.log("\t\tRow");
        columns.forEach(function(column) {
            console.log(column.value);
        });
    });
    stmt.on('done', function(rowCount, more) {
        console.log(rowCount + ' rows returned');
    }); 
    connection.execSql(stmt);       
}

我的代码进行查询以获取客户表中的所有记录。我正在听“行”事件,然后打印列值。客户表有 1.2 亿条记录。我面临的问题是,当我运行我的代码时,节点应用程序的内存占用开始增加,一段时间后,节点应用程序退出并出现内存不足错误。

作为一种解决方法,我开始分块查询客户表。我按字段排序,然后读取与该字段中的值对应的所有记录。读取所有记录后,我断开连接并重新连接到数据库并读取所有记录以获取下一个值。

这样,我意识到我的代码的内存占用情况正在检查中,并且没有内存不足错误。

我只想知道是否有人遇到过类似的问题以及如何解决?我们是否有可能修复模块以处理它或其他一些解决方案。

感谢您的帮助

4

1 回答 1

2

答案在于设置。确保 rowCollectiononRequestCompletion 设置为 false,您将看到没有内存问题。它也记录在繁琐的网页上。

   var connection = new tds.Connection({
        userName: this.userId,
        password: this.password,
        server: this.server,
        options: {
            database: this.dbName,
            rowCollectionOnRequestCompletion: false
        }
    });
于 2014-07-30T17:04:51.123 回答