开发者社区 问答 正文

独享虚拟主机mysql 错误Prepared statement needs to be re-pr

求助: 我使用的是独享虚拟主机 php+mysql版本 本地测试没有问题,上传到虚拟主机后有的时候提示 SQLSTA SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared。

到网上查看说是table_cache之类的设置,但是虚拟主机的mysql是没有配置权限的,我怎么来操作呢

以下是我主机出现问题后的状态

mysql>show global status like 'open%tables%'; +-------------------------+-----------------+ | Variable_name | Value | +-------------------------+-----------------+ | Open_tables | 2000 | | Opened_tables | 1126846 |

| table_definition_cache | 1400
| table_open_cache | 2000
| table_open_cache_instances | 16
| thread_cache_size | 15

展开
收起
开时空裂缝 2019-09-18 15:50:04 670 分享 版权
阿里云 AI 助理回答

遇到您描述的问题,通常是因为MySQL的table_open_cache(或称为table_definition_cache)设置较小,导致在高并发或者查询频繁变动的情况下,MySQL需要频繁地打开和关闭表,从而引发错误。虽然您没有直接修改配置文件的权限,但您可以尝试以下几种方法来缓解这个问题:

  1. 优化查询:检查您的SQL语句,尽量减少对数据库的频繁操作,合并多次查询为一次,使用JOIN代替子查询等,以减少对表缓存的需求。

  2. 使用持久连接(Persistent Connections):如果您的应用支持,可以考虑使用持久连接到MySQL数据库。这样可以避免每次执行SQL时都建立和销毁连接,减少打开和关闭表的次数。在PHP中,可以使用mysqli扩展的持久连接功能。

  3. 联系主机提供商:虽然您可能无法直接修改配置,但可以向您的虚拟主机提供商咨询是否能帮助调整这些参数。说明您遇到的问题以及您已经尝试过的解决方法,有时候服务商会在安全和性能允许的范围内,根据用户需求进行适当的调整。

  4. 增加缓存层:在应用程序层面引入缓存机制,如Redis或Memcached,将一些不经常变化且查询频繁的数据存储在内存中,减少对数据库的直接访问。

  5. 分析并优化数据库结构:检查是否有大量未使用的表或索引,清理它们可以间接提高表缓存的有效使用率。

  6. 监控和调整应用逻辑:利用监控工具观察应用的行为,识别出可能导致大量表打开和关闭的操作,然后针对性地优化这部分逻辑。

请记得,在进行任何更改之前,最好先在测试环境中验证效果,确保不会引入新的问题。希望这些建议能帮助您解决问题!

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答