我在Apache / php / Mariadb上有一个相当通用的数据库设置,使用了一些非常大的表。在这些表上运行的报告可能需要几分钟时间。这些操作只是嵌套的SELECT而不是写入数据库。
我注意到如果我在一个浏览器窗口中运行报告。如果我尝试在第二个窗口中对数据库运行不同的报告,它会停止并且似乎要等到另一个报告完成。
我无法弄清楚我可能需要合并哪些配置设置或其他命令以允许这种性质的并发操作。任何帮助或协助将不胜感激。
我正在运行:Apache / 2.4.6(CentOS)OpenSSL / 1.0.1e-fips PHP / 5.4.16,5.5.52-MariaDB。表格类型为InnoDB
我假设可能会出现某种我可以禁用的事务/锁定?我只是在阅读桌子而不是更新任何东西。
答案 0 :(得分:0)
这似乎是这样做的,因为你给出的任务会超载你系统的cpu / ram。至少据我所知,你无能为力。我认为它真的归结为重载cpu。当然,简单的答案是获得更好的部分,以便您可以更好地执行查询。如果你的cpu有多个线程,那么它可能是一个ram问题。由于您使用的是CentOS,请尝试运行
top
在你的报告中,看问题是处理能力还是没有足够的ram。
希望这会有所帮助:)
答案 1 :(得分:0)
INDEX(provnum, trgt_qtr, res_cat)
会大大加快查询速度,从而可能避免问题。或者至少减轻它。
答案 2 :(得分:0)
实际上,问题似乎与数据库无关,而是与Web服务器Apache有关,限制了允许的并发连接数。
我在一个系统上运行了一个报告,然后拉起了手机上的网络界面,并能够同时运行另一个报告。
我认为实际问题与默认情况下在Apache中启用的限制有关,一次只允许一个打开的会话(每个浏览器/会话)。这通常不会引人注意,因为会话执行通常是即时的,但如果您正在运行需要花费大量时间的流程,那么很明显会在某处施加限制。可能有用的是要注意,这与数据库性能之间存在关联,这可能会诱使用户认为这是一个表锁定问题,当它确实是Web服务器连接限制问题时。
我的解决方案非常简单。我只是在长报告生成过程开始之前添加此命令:
session_write_close();
这允许另一个并发会话在现有会话运行时运行。