Oracle: after the tables grow and shrink, a labelled match with a property and an edge type finds nothing (wrong-results plan?)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 24/100
Línea de trabajo
Start by reproducing the issue with the Cypher spec followed by the heavy tests in the same Oracle session, then inspect the generated SQL and compare the executed plan using DISPLAY_CURSOR as a user with V$SESSION access. Try the issue's suggested checks: disable optimizer_adaptive_plans, gather statistics, and drop or rebuild the label index. Done means identifying a reproducible cause and confirming whether the proposed checks resolve the missing match; the issue also suggests checking drivine4j and drivine.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
What happens: on Oracle, after a test session has run the Cypher spec (v0.6.1) and then written a hub of 2,500 and 5,000 relationships in the same tables, a labelled match with a property and a typed edge finds nothing, though the data is there:
MATCH (:Person {name: 'Keanu'})-[:KNOWS]->(p) RETURN p.name -- []
When it fails, the store holds 9 nodes and 8 edges, Keanu KNOWS Carrie among them. These still find the row:
MATCH (a:Person)-[:KNOWS]->(p);MATCH (a {name: 'Keanu'})-[:KNOWS]->(p).
(a:Person {name: 'Keanu'})-[r]->(p) finds nothing.
It's on main: main's compiler with the v0.6.1 spec copy and the heavy tests reproduced it in 2 of 2 runs in one session. Without the heavy tests, or without the spec run before them, it passes.
The SQL is plain and identical on main and on the batch-2 branch: drivine_node n1 CROSS JOIN drivine_node n2 CROSS JOIN drivine_edge e3, with n1's label JSON_EXISTS, JSON_QUERY(n1.props, '$.name') = JSON('"Keanu"'), e3.src = n1.nid, e3.dst = n2.nid and e3.type = 'KNOWS'.
EXPLAIN PLAN shows an adaptive plan with dynamic sampling at level 2: nested loops, a full scan of DRIVINE_EDGE filtered on type, DRIVINE_NODE by unique nid for n1 filtered on labels and name, then n2 by nid. Table statistics are NULL. The executed plan may differ; DISPLAY_CURSOR needs V$SESSION, which the test user lacks.
So this looks like an Oracle wrong-results plan, possibly with the multivalue label index or the adaptive plan, once the tables have grown and shrunk without statistics.
Next steps:
- reproduce with
DISPLAY_CURSORas a user that can read V$SESSION; - try
optimizer_adaptive_plans = FALSE, gathering statistics, and dropping or rebuilding the label index; - if it's an Oracle bug, report it with the minimal SQL;
- check drivine4j and drivine (TypeScript) for the same, since they share the layout and the compiled SQL.
Found while porting Cypher batch 2 (drivine4j #206); that port works around it by writing its heavy tests' hub in a graph of its own.
- Lenguaje dominante
- Python
- Estrellas
- 1
- Forks
- 0
- Merge medio
- 1 h 16 min
- PR fusionados (30 d)
- 74
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de liberation-data/drivine-python
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
liberation-data/drivine-python#154 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
liberation-data/drivine-python#152 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
liberation-data/drivine-python#150 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
liberation-data/drivine-python#138 ·
Los mantenedores suelen responder en 1 día
-
Cypher on SQL stores: all(), any(), none() and single() are two-valued where the predicate is nullAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
liberation-data/drivine-python#159 ·
Los mantenedores suelen responder en 1 día
Todos los issues de liberation-data/drivine-python
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
NVIDIA/flare-local-inference#90 ·
Los mantenedores suelen responder en 1 día
-
area/streaming comp/gateway P2 platform/telegram type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
NousResearch/hermes-agent#144897 ·
Los mantenedores suelen responder en 1 día
-
request-theme
Dificultad 1/5 Menos de una hora Aptitud para principiantes 66/100
LizardByte/ThemerrDB#9575 ·
Los mantenedores suelen responder en 1 día
-
Author Page: noshin-nawalAbiertoauthor-page correction
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
acl-org/acl-anthology#10599 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
zilliztech/memsearch#818 ·
Los mantenedores suelen responder en 1 día