【问题标题】:Grails DB performance H2 vs MySQLGrails DB 性能 H2 与 MySQL
【发布时间】:2012-11-23 21:21:42
【问题描述】:

我目前正在使用开箱即用的 H2 文件存储数据库来测试我的 Grails (2.1.0) 应用程序。我有 4 个域类,总共大约 20 个字段。这是一个小应用程序。

最近我注意到,一旦我通过了 14000 条记录(H2 文件 DB),Grails 应用程序开始运行缓慢 - CPU 利用率相当高,记录插入似乎变得迟缓。注意:我有多达 250 个线程插入数据。以上情况让我提出以下问题:

  1. MySQL 的性能是否优于 H2?

  2. 如何测试 Grails 应用程序并清楚地显示/证明缓慢来自 H2 交互?我不想简单地转述我自己的观察。

  3. 谁能详细说明 H2 在 Grails 项目中的使用?我想知道使用 H2 的“截止”点在哪里,是时候转移到 MySQL 了吗? --也许我在用这么多记录滥用H2。

谢谢。

【问题讨论】:

  • 你有 250 个线程同时插入记录吗?
  • 是的,同时进行。此外,我在每次插入之前执行 FindBy 操作,搜索是在字符串字段上完成的 - 非索引。
  • 也许 14000 条记录是 H2 无法将表保存在内存中并从磁盘而不是仅在内存中进行全表扫描分页的点...尝试向该字符串字段添加索引。

标签: mysql performance grails h2


【解决方案1】:

性能问题可能有很多原因。确实,对于大型数据库(千兆字节的数据)和并发(许多并发连接),MySQL 具有更高级的机制。

但是对于这么小的数据库(14000 条记录?),我认为问题出在其他地方,很可能与应用程序有关,而不是与数据库有关。我会做的是analyze what the problem。它可能是缺少索引或类似的。

【讨论】:

  • 代码运行完美,直到我开始达到 > 14K 记录。我需要在域类中指定索引吗?我认为它是自动完成的。
  • 查看代码后,我有一个附带问题:速度慢可能是因为我在数据库中搜索字符串字段吗?我做了很多。
  • 是的,这是可能的。 H2 没有非常智能的模式匹配器,对于非常大的字符串来说它很慢。我想你可以使用分析器来找出 H2 大部分时间都花在哪里。
  • 我相信我找到了问题所在。你是对的,它与数据库无关。我测试了写/读速度,它非常快。我的问题在其他地方。谢谢。
【解决方案2】:

您可能会在“Profiler for a Grails Application”上找到一些答案,这对于在进行任何更改之前获取有关应用程序性能的一些数据很有用。

【讨论】:

    猜你喜欢
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多