Mysql max_prepared_stmt_计数错误,如何回收准备好的语句?

Mysql max_prepared_stmt_计数错误,如何回收准备好的语句?,mysql,node-mysql2,Mysql,Node Mysql2,我从mysql获得以下错误: 最多只能创建max\u prepared\u stmt\u count语句(当前值:16382) 目前,我已将该值增加到最大值(100万) 我使用的是node-mysql2,但我认为无论我准备的语句数是多少,最终都会达到1M 所以我的问题是,我应该如何正确地回收这些声明,以使它们不会每隔几周不断地达到100万条 同时,如果我达到这个1米标记,如何清除这个缓存 我的节点/mysql2代码如下: import mysql from 'mysql2/promise' co

我从mysql获得以下错误:

最多只能创建max\u prepared\u stmt\u count语句(当前值:16382)

目前,我已将该值增加到最大值(100万)

我使用的是
node-mysql2
,但我认为无论我准备的语句数是多少,最终都会达到1M

所以我的问题是,我应该如何正确地回收这些声明,以使它们不会每隔几周不断地达到100万条

同时,如果我达到这个1米标记,如何清除这个缓存

我的节点/mysql2代码如下:

import mysql from 'mysql2/promise'
const pool = mysql.createPool({ host, port, connectionLimit: 100 })
export default pool
然后,我在所有地方使用池,并准备好声明a la:

pool.execute('SELECT * FROM ... etc etc')
我猜持有100个连接并重用它们会导致准备好的语句最终达到最大值。我在node/mysql2中看到一个未记录的特性,它说
maxPreparedStatements
,我可以添加到配置中。这是否会防止将来出现这一问题?或者我仍然需要时不时地在mysql中“清除已准备好的语句”(如果是这种情况,清除它的命令是什么)


注意,我有3个连接到mysql的复制服务器,希望您已经找到响应

我在prepared语句中看不到这一点,尽管我在使用请求时看到了这一点,每次单个参数更改时请求都会不同(在JS中构建sql请求字符串…)

你确定你使用的是事先准备好的陈述吗

您的请求应该如下所示:

pool.execute('SELECT * FROM ... where id = ? etc etc', [id, ...])
我正在测试v2.2.5

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

在mysql cli中执行的漂亮mysql调试请求:

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

重要的值是准备就绪的计数状态和最大准备就绪的计数配置。

是否取消准备语句@翻转如果我使用promise库,如何关闭它?我的代码:
const[results]=wait pool.execute(query,values)
如果maxPreparedStatements默认为16000,为什么我需要关闭我的语句?我不确定库在池和准备方面是如何工作的,所以我恐怕无法回答。这里有一个链接,解释了有关准备语句的详细信息,它应该回答为什么使用准备语句,以及为什么不需要准备语句始终处于“活动”状态。我发现,当我在循环中多次将数据插入表中时,它们会提高性能。i、 我在使用mysql workbench并试图使用GUI添加新行而不是编写SQL语句时遇到了这个问题