【问题标题】:Why are subsequent queries so much slower?为什么后续查询会这么慢?
【发布时间】:2013-06-28 21:39:46
【问题描述】:

我正在尝试解决一个非常奇怪的行为。

我正在合作:

  • JBoss AS 7.1.1
  • EJB 3.0
  • JPA
  • XA DataSource
  • Oracle 11g

在其中一个系统功能中,用户可以看到每个Store 的状态。对于每个Store,我都会发起一个查询,以总结所有已处理的文件。查询是这样的:

 SELECT 
    SUM(CASE file.type
            WHEN 'TYPE_1' THEN 1 
            ELSE 0 
        END) 
    , 
    SUM(CASE file.type
            WHEN 'TYPE_2' THEN 1 
            ELSE 0 
        END) 
    , 
    SUM(CASE file.type
            WHEN 'TYPE_3' THEN 1 
            ELSE 0 
        END) 
 FROM 
    File file
 WHERE 
    file.type IN ('TYPE_1', 'TYPE_2', 'TYPE_3') 
    AND file.status = 'RECEIVED' 
    AND file.store.id = :storeId

问题是,用户可以选择他想检查的商店,这就是事情变得奇怪的地方。

当我检查第一个商店时,结果非常快,但所有后续查询都需要更多时间。让我举例说明:

  1. 用户检查存储 15(极快的结果) - 大约 200 毫秒
  2. 用户检查存储 2(结果非常慢) - 大约 8000 毫秒

现在注意这部分,非常重要。

  1. 用户注销,然后重新登录。
  2. 用户检查存储 2(耗时 8000 毫秒的存储),现在结果非常快。

这很奇怪,之前需要一段时间的同一家商店,现在加载速度非常快。 每当我在SQLDeveloper 上尝试查询时,结果也很快。

我用@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) 注释了我的EJB,但在执行时间上我没有发现任何差异。

我创建了一个独立项目来使用JDBC 运行查询,结果又很快,这让我认为这可能是我的DataSourcepersistence.xml 或类似的配置。

有人知道为什么会发生这种情况吗?

【问题讨论】:

  • 您如何管理会话、事务?
  • 如何记录 JDBC 调用并查看是否执行了查询以外的其他内容?
  • @Olaf 它们都是由容器管理的,我注入了EntityManager的实例
  • @OldProgrammer ,我做到了,它只运行我提到的查询

标签: jpa oracle11g ejb datasource jboss7.x


【解决方案1】:

几件事:

  1. 当用户第二次检查 store2 时,oracle 优化器可能正在使用它的“缓存”,因此速度非常快。
  2. store2 有多少文件记录?尝试逐句执行分组,看看这个 File 表是否需要特殊统计,例如,如果 store2 的 File 记录比其他存储多得多,那么尝试执行此方法:

begin dbms_stats.gather_table_stats(user,'file' , estimate_percent=>100); end; 这将确保表格的统计信息准确无误。

  1. 你可以优化查询,你不必执行3次“求和”,你可以这样做:

    select f.type , count(*) from File f where f.store.id = :storeId and f.type IN ('TYPE_1', 'TYPE_2', 'TYPE_3') group by f.type

【讨论】:

  • 奇怪的是,最快的搜索实际上是第一个,而不是其他的。如果它是倒退的,我会立即想到缓存,但我从未见过它们按照这个顺序表现得像这样。不过,我会尝试一下您的建议。谢谢:)
【解决方案2】:

【讨论】:

  • 这是对同事后续慢查询结果的答案。
猜你喜欢
  • 1970-01-01
  • 2011-10-18
  • 2011-03-11
  • 2017-01-21
  • 2020-03-19
  • 2014-03-12
  • 2011-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多