使用Tedious进行MSSQL查询时的内存问题

时间:2014-04-10 00:14:01

标签: node.js tedious

我正在尝试使用Tedious模块连接到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);       
}

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

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

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

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

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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

   var connection = new tds.Connection({
        userName: this.userId,
        password: this.password,
        server: this.server,
        options: {
            database: this.dbName,
            rowCollectionOnRequestCompletion: false
        }
    });