Skip to content

Don't count specific Plan nodes/fields during pattern_id calculation

Сейчас под функцией pattern_id мы обходим всё дерево плана с помощью subtree_iter, собираем вершины в массив, сериализуем в bincode и считаем хэш. Есть вероятность того, что с таким подходом мы можем получить для двух разных планов, которые превращаются в один локальный SQL, разные хэши, которые используем как ключи в нашем самодельном LRU кэше. (см. комментарий)

Это плохо, потому что произойдёт расхождение двух кэшей: самодельного в сброде и тарантульного, который вычисляет statement_id на основании локального SQL.

В рамках этой задачи нужно понять, какие вершины/поля нам нужно не учитывать в процессе подсчёта хэша на стороне сброда. Первые кандидаты:

  • Output в целом или определенённые поля вроде distribution
  • Типы под Reference:
    create table t(a int primary key)
    select a from t -- pattern_id_1 for type int
    drop table t
    create table t(a unsigned primary key)
    select a from t -- new pattern_id_2 for type unsigned -> statement already prepared error

См. так же ишью в тарантуле

Edited by Emir Vildanov
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information