Don't count specific Plan nodes/fields during pattern_id calculation
Сейчас под функцией pattern_id
мы обходим всё дерево плана с помощью subtree_iter
, собираем вершины в массив, сериализуем в bincode и считаем хэш. Есть вероятность того, что с таким подходом мы можем получить для двух разных планов, которые превращаются в один локальный SQL, разные хэши, которые используем как ключи в нашем самодельном LRU кэше. (см. комментарий)
Это плохо, потому что произойдёт расхождение двух кэшей: самодельного в сброде и тарантульного, который вычисляет statement_id на основании локального SQL.
В рамках этой задачи нужно понять, какие вершины/поля нам нужно не учитывать в процессе подсчёта хэша на стороне сброда. Первые кандидаты:
- Output в целом или определенённые поля вроде distribution
- Типы под Reference (кажется, можно придумать пример нескольких колонок с разными типами, которые транслируются в один и тот же локальный SQL)
См. так же ишью в тарантуле