首页 > 解决方案 > 为什么mssql会占用这么多内存,耗时这么久?

问题描述

我一直在使用 nodejs 使用 mssql npm 包,并注意到性能比在 SSMS 中运行相同的查询要慢得多。

这方面的一个例子是一个简单的查询select * from contacts。在给定的表中,大约有 38000 行和 14 列。运行此查询会导致节点进程内存使用量猛增至 2GB 左右,并需要 30 多秒,最终因堆错误而崩溃。SSMS 中的相同查询需要两秒钟,并且内存使用率保持在较低水平。

我试图了解两者之间的区别。我知道 SSMS 是一个完整的软件产品,但是,我希望两者之间的性能相似。

任何人都可能拥有的任何见解将不胜感激,下面是我为测试查询时间而创建的示例代码。

我尝试过使用流方法,结果与他们的 npm 包页面上列出的用于从数据库中检索结果的其他一些方法相同。

var express         = require('express');
const mssql         = require('mssql');

var app             = express();

const config = {
    user: 'XXX',
    password: 'XXX',
    server: 'XXX',
    database: 'XXX',
    pool: {
      max: 10,
      min: 5,
      idleTimeoutMillis: 30000
    }
}

var query = 'SELECT * FROM contacts'

app.get('/query', async function () {
  var connection = await mssql.connect(config);
      var result = await mssql.query(query)
      await mssql.close()
      console.log(result)
});

app.listen(process.env.PORT || 6000);

预期结果:低内存使用和快速查询返回时间

实际结果:高内存使用和长查询时间

标签: javascriptnode.jssql-server

解决方案


推荐阅读