解决MySQL报错:ERROR 1615 (HY000) : Prepared statement needs to be re-prepared

时间:2022-06-01 13:03:32

MySQL执行一个存储过程,报错如下:

ERROR 1615 (HY000) at line 406 in file: 'process.sql': Prepared statement needs to be re-prepared

这个问题解决设计到以下两个变量:

  • table_open_cache: 表高速缓存的大小
  • table_definition_cache:表定义信息缓存

一、问题定位

查看Opened_tables的值:

mysql>  show global status like 'open%tables%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables |  409 |
| Opened_tables | 6433516 |
+---------------+-------+
2 rows in set (0.01 sec)

Opened_tables数值非常大,说明cache太小,导致要频繁地open table。

二、问题解决

查看table_open_cache

mysql> show variables like '%table_open_cache%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| table_open_cache | 64|
+------------------+-------+

默认是64,有些文章建议,设置:

table_open_cache=max_connections* 查询同时用到的表数

修改如下:

mysql> set global table_open_cache=16384;
mysql> set global table_definition_cache=16384;