我正在使用Joomla 2.5.8,并安装了一个自定义组件,用于从数据库中提取数据并使用TCPDF生成自定义PDF文件。
根据用户的请求,模型从DB加载一堆数据,没有超时,请求需要几秒钟,之后不再向数据库发送查询。 根据收到的数据,进行处理以生成PDF文件,生成的PDF文件列表将返回到视图中以便在布局中显示。
一切似乎工作正常并且处理正确完成但是,可能由于在模型中完成的长处理,菜单模块未加载并返回以下错误:
MySQL服务器已经消失
SQL:
SELECT m.id, m.title, m.module, m.position, m.content,
m.showtitle, m.params, mm.menuid
FROM jos2_modules AS m LEFT JOIN
jos2_modules_menu AS mm ON mm.moduleid = m.id LEFT JOIN
jos2_extensions AS e ON e.element = m.module AND e.client_id = m.client_id
WHERE m.published = 1 AND e.enabled = 1 AND
(m.publish_up = '0000-00-00 00:00:00' OR m.publish_up <= '2013-10-31 15:42:00') AND
(m.publish_down = '0000-00-00 00:00:00' OR m.publish_down >= '2013-10-31 15:42:00') AND
m.access IN (1,1,2,3,4) AND m.client_id = 0 AND
(mm.menuid = 101 OR mm.menuid <= 0)
ORDER BY m.position, m.ordering
请注意,如果我删除PDF文件处理,则没有错误。 我无法控制在这个过程中花费的时间,但也许我没有在正确的地方做这件事。
我也从之前的帖子中了解到MySQL配置中的参数可以在MySQL ini文件中进行调整,但这不是我可以做的事情,因为SQL服务器由我的提供商托管。而且,当发生错误时,我无法访问数据库。
有没有人遇到过那种问题?
答案 0 :(得分:0)
这可能是超时问题。
您是否正在运行用于创建许多pdf文件的单个查询?如果是这样,可以超时,或者pdf文件创建可能正在关闭查询(更有可能)。
您应该尝试为要创建的每个文档重新运行查询,开销很小,如果查询相同则会缓存它们。
您发布的查询看起来非常快,因为所有查询都要确保存在索引以保持快速。 (不是解决方案,但可以解决您的问题)。最后,如果查询处于实际超时状态,您可以一次创建一个文档并使用ajax调用显示结果,因此您的服务器一次只生成一个文档,并且可能不会超时。这也将使网站对用户更快。
你也可以尝试增加php脚本set_time_limit(200);
,但我不确定这是否有效,如果他们需要等待三分钟才能看到页面,这将是一个糟糕的用户体验,他们只会在超时前重新加载。