记录一次报错 Can’t create more than max_prepared_stmt_count statements
prepare sql Statement is failed:Can’t create more than max_prepared_stmt_count statements (current value: 16382)
io.vertx.mysqlclient.MySQLException: Can’t create more than max_prepared_stmt_count statements
背景:
使用vertx-mysql-client 版本 3.9.1
定位思路
1. mysql 上查看数据库 prepare 的情况
SHOW GLOBAL STATUS LIKE 'com_stmt%';
如果Com_stmt_close与Com_stmt_prepare之间的差过大就会报错。
2. mysql 上查看statement统计, 看下哪些statement 量很大
SELECT
count(1) AS 重复数,
GROUP_CONCAT(STATEMENT_ID SEPARATOR ',') as STATEMENT_IDS,
t.SQL_TEXT
FROM
PERFORMANCE_SCHEMA .prepared_statements_instances t
GROUP BY
SQL_TEXT;
3. mysql 上查看 max_prepared_stmt_count
show variables like '%stmt_count%';
紧急情况先将max_prepared_stmt_count设置到最大值
然后再定位代码中的问题
猜想:
可能是应用端那边没有关闭prepared的语句
解决:
使用vertx-mysql-client 3.9.3, 可自动close statement
参考:
https://www.cnblogs.com/Zereker/p/11396597.html
https://my.oschina.net/yimingblog/blog/3009232