gpt4 book ai didi

mysql - max_prepared_stmt_count错误,如何回收prepared statements?

转载 作者:行者123 更新时间:2023-12-04 17:46:46 33 4
gpt4 key购买 nike

我从 mysql 得到以下错误:

不能创建超过 max_prepared_stmt_count 个语句(当前值:16382)

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

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

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

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

我的node/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 status 和 max_prepared_stmt_count config。

关于mysql - max_prepared_stmt_count错误,如何回收prepared statements?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48115829/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com