私は非常に奇妙な行動を整理しようとしています。
私は一緒に働いています:
JBoss AS 7.1.1
EJB 3.0
JPA
XA DataSource
Oracle 11g
システム機能の 1 つで、ユーザーはそれぞれのステータスを確認できます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 ミリ秒かかったストア 2) をチェックすると、結果は非常に高速です。
これは非常に奇妙です。以前は時間がかかった同じストアが、現在はかなり高速にロードされています。結果に対してクエリを実行するたびにSQLDeveloper
、結果もかなり速くなります。
EJB
withに注釈を付け@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
ましたが、実行時間に違いはありませんでした。
を使用してクエリを実行するためのスタンドアロン プロジェクトを作成しましたがJDBC
、結果は再び高速になりましDataSource
たpersistence.xml
。
なぜこれが起こるのか誰にも手がかりがありますか?