Size: a a a

QA — Load & Performance

2021 June 25

ВС

Вячеслав Смирнов... in QA — Load & Performance
Я жду, что в pg_stat_statements появится две строки, у которых будет одинаковая queryid, но разный текст запроса. А так не происходит. Значение queryid никогда не повторяется. Пока повторить не удалось
источник

KY

Kirill Yurkov in QA — Load & Performance
оно же вроде только для селекта работает
источник

ВС

Вячеслав Смирнов... in QA — Load & Performance
Пробовал на разных запросах вида
select * from table where feild > 1000
select * from table where feild > 2000
select * from table where feild > 1000 and (true)
select * from table where feild > 1000 and (1=1)
...
В статистику попадает

select * from table where feild > ? and (?)
select * from table where feild > ?
у запросов разные queryid, но в общем то схожая семантика

Я жду, что запросы
select * from table where feild > 1000 and (true)
select * from table where feild > 1000 and (1=1)
попадут в статистику как
select * from table where feild > ? and (?)
select * from table where feild > ? and (?=?)
с одинаковым queryid
а получается, что попадает только один, который объединяет под собой оба.
источник

KY

Kirill Yurkov in QA — Load & Performance
https://www.compose.com/articles/mastering-postgresql-tools-full-text-search-and-phrase-search/
на строчке "(meaning) of the text originally vectorized" - это не то?
источник

KY

Kirill Yurkov in QA — Load & Performance
семантику ты как определяешь?
источник

KY

Kirill Yurkov in QA — Load & Performance
просто по выводу?
источник

KY

Kirill Yurkov in QA — Load & Performance
а нет это не то похоже
источник

VG

Viktor Ganeles in QA — Load & Performance
Я знаю, что mssql делает один план запроса для разных запросов, если в запросе задано точное значение уникального поля:

У разных запросов
Select * from table where id=42
И
Select * from table where id=43
Будет одинаковый план (потому, что mssql автоматом подменит 42 и 43 на переменную)

Может тут что-то похожее?
источник
2021 June 26

ВС

Вячеслав Смирнов... in QA — Load & Performance
По вопросу алгоритма вычисления queryId в PostgreSQL. Сделал поиск по исходникам средствами github - поиск по master. Нашел, что алгоритм с версии PostgreSQL 14 такой:

QueryID вычисляется, как инкрементальный хеш от всего, что есть в запросе
https://github.com/postgres/postgres/blob/REL_14_BETA2/src/backend/utils/misc/queryjumble.c

А до версии 14 алгоритм был другим, возможно. И ещё есть алгоритм нормализации текста запроса, чтобы параметры заменились на символ "?"
источник

ВС

Вячеслав Смирнов... in QA — Load & Performance
Стал смотреть на этот вопрос, чтобы понять, как лучше группировать статистику в PostgreSQL из pg_stat_statements. Просто по QueryID, которая для одинаковых запросов делает разные ИД иногда, или по md5 от текста запроса или ещё как-то
источник

GG

Gugo Groci in QA — Load & Performance
Не совсем так. До 14-й версии quieryid вычислялся только в contrib/pg_stat_statements/pg_stat_statements.c. Фактически для вычисления кэша используется немного адаптированный алгоритм lookup3 by Bob Jenkins, код лежит в src/common/hashfn.c. Начиная с 14-й версии постгреса вычисление quieryid вынесли в ядро, src/backend/utils/misc/queryjumble.c. Есть регулируемый параметр compute_query_id, который включает или выключает quieryid в ядре. Также есть возможность использовать pg_stat_statements вместо того, что в ядре, в один момент может использоваться или ядро, или pg_stat_statements. В конфиге это src/backend/utils/misc/postgresql.conf.sample:#compute_query_id = auto.
источник

GG

Gugo Groci in QA — Load & Performance
Я прогнал по английскому словарю и по набору паролей (38 и 128 тыс строк) этим алгоритмом, ни одной коллизии не получилось 🤷‍♂️
Видимо, там нужно хорошенько присесть, чтобы сделать коллизию. Мне лично неохота этим заниматься :)
источник

ВС

Вячеслав Смирнов... in QA — Load & Performance
Спасибо! Вижу, что Вы глубоко погрузились. Надеюсь, не отняло много времени
источник

ВС

Вячеслав Смирнов... in QA — Load & Performance
https://github.com/postgres/postgres/blob/REL_10_16/contrib/pg_stat_statements/pg_stat_statements.c#L815
Получается вот место вычисления Query ID в PostgreSQL 10.16.

Тут можно заметить, что хеш берется не от query, а от узлов синтаксического дерева, так это можно назвать.

И если у двух запросов будет одинаковое дерево, то получится одинаковое id
источник
2021 June 28

L

Lipa in QA — Load & Performance
Коллеги кто ни-будь знает спринг бут? Пишу заглушку, мне нужно чтобы она принимала post, из запроса забирала хедеры и с ними отдавала тудаже ответ, вот делаю так, @RequestMapping(value = "/test", method = RequestMethod.POST , headers="Accept=application/json")
   @ResponseBody
   public String postFoos() {
       return "Post";
   }
источник

L

Lipa in QA — Load & Performance
но тут явно их указываю, а мне из полученного запроса надо
источник

L

Lipa in QA — Load & Performance
могу скинуть проект
источник

AC

Alexey Cheryomukhin in QA — Load & Performance
Думаю, вам нужно что-то вроде этого использовать https://github.com/browserup/browserup-proxy
источник

ВС

Вячеслав Смирнов... in QA — Load & Performance
https://www.baeldung.com/spring-rest-http-headers
How to Read HTTP Headers in Spring REST Controllers
Тут нужный заголовок передается в метод как параметр. Если заголовок не задан, то он будет пустым параметром
источник

L

Lipa in QA — Load & Performance
Спасибо, сейчас все посмотрю
источник