max_prepared_stmt_count错误,如何回收准备好的语句?



我从mysql收到以下错误:

Can't create more than max_prepared_stmt_count statements (current value: 16382)

我现在已将值增加到最大值(100 万)。

我正在使用node-mysql2但我认为无论我准备的语句计数如何最终都会达到 1M。

所以我的问题是我应该如何正确回收这些语句,以便它们不会每隔几周就不断达到 1M?

另外,如果我达到这个 1M 标记,如何同时清除此缓存?

我的节点/mysql2 代码如下:

import mysql from 'mysql2/promise'
const pool = mysql.createPool({ host, port, connectionLimit: 100 })
export default pool

然后,我到处使用池,并带有准备好的语句:

pool.execute('SELECT * FROM ... etc etc')

我猜持有 100 个连接并重用它们会导致准备好的语句最终达到最大值。我在 node/mysql2 中看到一个未记录的功能,它说我可以添加到配置中的maxPreparedStatements。这会防止将来出现问题吗?还是我仍然需要时不时地在 mysql 中"清除准备好的语句"(如果是这种情况,清除它的命令是什么)?

注意 我有 3 个连接到 mysql 的副本服务器

希望您已经找到了回复。

我在准备好的语句中看不到这一点,即使我在使用每次更改单个参数时都不同的请求时看到了它(在 JS 中构建 sql 请求字符串......

您确定使用的是预准备语句吗?

您的请求应如下所示:

pool.execute('SELECT * FROM ... where id = ? etc etc', [id, ...])

我正在测试 https://www.npmjs.com/package/mysql2 v2.2.5。

以这种方式提出您的所有要求。也许在开发服务器上激活mysql日志以检查正在发出的请求。

在 mysql cli 中执行的不错的 mysql 调试请求:

show variables where `variable_name` like  '%stmt%';
show status where `variable_name` like  '%stmt%';

重要的值是Prepared_stmt_count状态和max_prepared_stmt_count配置。

相关内容

  • 没有找到相关文章

最新更新