JUnitを使用して実行されたテストを通じて、3 つのエントリを持つテーブルでH2 データベースに対して次のクエリを実行しています。
WITH ancestors(ID, PARENT_ID) AS
(
SELECT ID, PARENT_ID FROM PEOPLE WHERE ID = <person_id>
UNION ALL
SELECT P1.ID, P1.PARENT_ID FROM PEOPLE P1, PEOPLE P2 WHERE P1.ID = P2.PARENT_ID
)
SELECT ID FROM ancestors;
クエリは、人を含む自己参照テーブルで実行されます。人のすべての先祖のIDを見つけます。
これは何らかの理由で、テストがハングし、RAM 使用量が急速に (>2GB) 急増することを確認できるため、無限ループであると私が推測するものを実行します。なぜこれが起こっているのですか、どうすれば修正できますか?
所見:
- これはOracleで正常に実行されます
- テーブルにPARENT_IDが指定されていない場合は正常に実行されますが、指定されている場合はハングし、RAM使用量が継続的に増加します。