max\u prepared\u stmt\u count错误,如何回收prepared语句?

jobtbby3  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(454)

我从mysql得到以下错误: Can\'t create more than max_prepared_stmt_count statements (current value: 16382) 我现在已经把这个值增加到最大值(一百万)。
我正在使用 node-mysql2 但我在想,不管我准备的报表数量最终会达到100万。
所以我的问题是,我该如何正确地循环使用这些语句,使它们不会每隔几周就不断地达到100万条?
同时,如果我达到这个1米标记,如何清除这个缓存?
我的node/mysql2代码如下:

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

然后,我用准备好的声明到处游泳池一个la:

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

我猜持有100个连接并重用它们会导致准备好的语句最终达到最大值 maxPreparedStatements 我可以添加到配置中。这会阻止将来的问题吗?或者我仍然需要时不时地在mysql中“清除准备好的语句”(如果是这种情况,清除它的命令是什么)?
注意我有3个连接到mysql的复制服务器

nnt7mjpx

nnt7mjpx1#

希望你已经找到了答案。
我在prepared语句中看不到这一点,尽管我在使用每次单个参数更改时都不同的请求时看到了这一点(在js中构建sql请求字符串…)。
你确定你用的是事先准备好的陈述吗?
您的请求应该如下所示:

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

我在测试https://www.npmjs.com/package/mysql2 版本2.2.5。
以这种方式提出所有要求。也许可以激活开发服务器上的mysql日志来检查所发出的请求。
在mysql cli中执行的mysql调试请求:

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

重要值是prepared\u stmt\u count status和max\u prepared\u stmt\u count config。

相关问题