nodeJS 和 MySql 中的连接池问题

Connection pooling issue in nodeJS and MySql

我正在使用 NodeJs 和 Mysql。 我有一个查询要将 mysql table 中的一个字段更新为:

Update messaging SET count = count + 1 WHERE msgId = 10;

我正在使用连接池。配置为:

var pool = mysql.createPool({
connectionLimit : 100,
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database,
port: 3306,
debug: false,
multipleStatements: true});

API 在将消息传递给 500 万用户时使用此查询有效。 它使连接保持打开状态。这导致服务器处理速度非常慢。 是否有其他解决方案可以提高 服务器性能

矛盾的是​​,减少连接数通常会提高性能。池化连接是连续可重用的资源,并且有一个连接请求队列。因此,DBMS 不会尝试一次执行大量查询,而是一次处理较少数量的查询,并串行处理负载。

因此,对于像您这样应该 运行 短时间的查询,请创建一个连接限制较小的池。尝试 10。如果效果不错,请尝试 5。

如果您有其他需要更长时间的查询,您可能需要一个不同的连接池。

更不用说集群节点应用程序将为集群的每个成员打开该数量的连接。 400 个连接对于几乎所有 MySQL 部署来说太多了。 (如果您的部署要处理数百个连接,您的采购经理就会知道,因为这样的部署非常昂贵。)

您可能会遇到这个问题,但是:如果数百万用户正在更新完全相同的行 msgId = 10 您将在该行上发生 DBMS 争用。在这种情况下,您可能希望存储该行的命中次数,然后每隔几秒执行一次 UPDATE... SET count = count + n 而不是每次命中都执行一次。