Php (太多)导致问题的观点

Php (太多)导致问题的观点,php,mysql,view,mariadb,Php,Mysql,View,Mariadb,我有一个使用PHP和MariaDB 10.3的大型数据库应用程序 我有大约100张桌子,然后是大约3000个视图 当超过大约1000个视图时,数据库模式会崩溃并停止访问。桌子还不错,但所有的景色都不尽如人意。当查询任何视图时,它会给出不同的错误消息,如“准备好的语句需要重新准备”或“断开连接” 主要问题不是关于表缓存,因为扩展表缓存并不能解决问题。它也不是关于如何模拟准备好的语句。我已经尝试过这些策略 有人知道这个问题以及如何解决它?检查max\u prepared\u stmt\u count

我有一个使用PHP和MariaDB 10.3的大型数据库应用程序

我有大约100张桌子,然后是大约3000个视图

当超过大约1000个视图时,数据库模式会崩溃并停止访问。桌子还不错,但所有的景色都不尽如人意。当查询任何视图时,它会给出不同的错误消息,如“准备好的语句需要重新准备”或“断开连接”

主要问题不是关于表缓存,因为扩展表缓存并不能解决问题。它也不是关于如何模拟准备好的语句。我已经尝试过这些策略


有人知道这个问题以及如何解决它?

检查
max\u prepared\u stmt\u count
的值,它默认为16K左右,所以我认为这不是问题所在

您是否在完成语句时取消分配准备好的语句

视图是否调用存储的例程

是否已打开查询缓存

表\u open\u缓存的值是多少


显示全局状态,如“子查询\缓存%”

可能的重复并不能解决此问题-即使其中一条错误消息是相同的。重复的消息表明原因可能是:1)错误、2)配置、3)实际需要重新准备查询、4)托管。我们无法完全解决这个问题,因为它的范围相当广泛。虽然我不能具体地为MariaDB说话,但我会注意到MySQL中的视图提供的好处非常有限,因为它们无法利用底层索引。此外,100个表相当多-可能大到足以表明设计不佳。100个表对于大型综合应用程序来说并不多。专业系统将很容易拥有数千个。InnoDB限制了40亿个表。但是,问题不在于表,而在于视图。如果您不“强制”MariaDB创建临时表,则MariaDB中的视图可以使用基础索引。这实际上就是视图数量众多的原因,因为视图上的视图很容易造成这种情况。许多好的建议:-)增加表开放缓存就是我所做的,并且解决了它:-)