MySql在并发查询时速度慢

时间:2016-03-15 11:48:36

标签: java mysql hibernate c3p0

我正在针对click()数据库并行运行查询。每个查询需要不到一秒钟,另一半秒钟到一秒钟来获取。

这对我来说是可以接受的。但是,当我并行运行其中10个查询然后在另一个会话中尝试另一个查询时,一切都会变慢,单个查询可能需要20多秒。

我的ORM是MySql,我正在hibernate使用C3P0。我使用<property name="hibernate.c3p0.max_size">20</property>个线程并行发送查询。但我不认为这些是相关的,因为当我在Java中运行查询时也会发生减速。所以我假设我的MySql配置中缺少某些内容,或者机器速度不够快。

这是查询:

MySql Workbench

如果面对100个并发查询,我怎样才能让这个更快?

1 个答案:

答案 0 :(得分:1)

我猜这很慢,因为where子句正在对description和title列进行全文搜索;这将要求数据库浏览每条记录上的整个字段,而且这种情况永远不会扩展。

这10个并发查询中的每一个都必须读取100万行才能完成查询。如果你的系统中有任何瓶颈 - 磁盘i / o,内存,CPU - 你可能不会遇到单个查询的瓶颈,但你确实用10个并发查询命中它。您可以使用these tools之一找出您遇到的瓶颈。

大多数情况下,这些瓶颈(CPU,内存,磁盘)升级成本太高 - 特别是如果您需要扩展到100个并发查询。因此,优化查询/ ORM方法会更好。

我考虑在这里使用Hibernate的内置free text capability - 它需要一些额外的配置,但在文本字段中查找任意字符串时效果会更好。