我正在尝试解决一个非常奇怪的行为。
我正在与:
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
问题是,用户可以选择他想要检查的商店,这就是事情变得奇怪的地方。
当我检查第一家商店时,结果非常快,但所有后续查询都需要更多时间。让我举例说明:
- 用户检查存储 15(极快的结果) - 大约 200 毫秒
- 用户检查存储 2(结果非常慢) - 大约 8000 毫秒
现在注意这部分,非常重要。
- 用户注销,然后重新登录。
- 用户检查存储 2(耗时 8000 毫秒的存储),现在结果非常快。
这很奇怪,之前花了一段时间的同一家商店,现在加载速度非常快。每当我尝试对结果进行查询时SQLDeveloper
,结果也很快。
我注释了我EJB
的,@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
但我在执行时间上没有任何区别。
我创建了一个独立的项目来运行查询JDBC
,结果又很快,这让我认为它可能是我的一些配置DataSource
,persistence.xml
或者类似的东西。
有谁知道为什么会发生这种情况?