0

我有一个包含以下部分的 Web 应用程序:

  1. 评论员通过基于浏览器的工具不断地进行比赛评论。使用休眠将注释插入数据库。

  2. 许多用户正在访问 URL 以阅读评论。Hibernate 正在从第 1 步中由评论员更新的表中读取数据。

  3. 还有一些存储过程设置为每 1 小时运行一次。他们中很少有人访问同一个表(在步骤#1 和#2 中使用)用于读取和写入/更新目的。

现在我的问题是,每当网站有 100 多个并发用户观看特定比赛评论时,我的 MySQL 就会出现故障。它显示了许多卡在进程列表中的查询。其中许多处于“复制到临时表”状态。这使得 JBOSS 频繁重启。

我在休眠中使用事务来读取和写入目的。请帮忙,因为我因为这些崩溃而失去了重要的比赛。

4

1 回答 1

1

你有一个性能问题。很难给出始终有效的解决方案。你可以考虑做的是:

1) 修改 HQL (Hibernate) 语句。为此,您可以<property name="show_sql">true</property>在配置文件中编写一个协议(如果您想查看实际参数,甚至可以使用 log4jdbc 之类的工具)并分析输出。在那里您可以看到您拥有最多的 SQL 请求。在许多情况下,读取和写入数据库数据的更好策略可以显着减少数据库流量。并检查您的表是否有良好的索引。

2)考虑使用二级缓存。(通常hibernate只使用一级缓存,这在你的情况下没有用,因为它绑定到一个会话。)那么至少读取实际评论的请求可以由缓存服务,不需要去数据库。(注意:缓存可能会干扰存储过程。看看你喜欢使用的缓存产品是否支持 MySQL 存储过程。最坏的情况你必须删除关键表的存储过程,让你的应用服务器做作业,因此它通过缓存。)

3)如果只有几个表被大量使用,您可以考虑由您的应用程序缓存它们。这是更多的工作,但也许您可以完全满足您的应用程序的需求,因此您可能比使用一般的二级缓存更快。

4)如果没有任何帮助并且流量真的太重,那么也许你必须投资更多的硬件。

祝你好运 ;-)

于 2012-06-05T09:12:44.697 回答