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;