Re: [HACKERS] Cached plans and statement generalization

Поиск
Список
Период
Сортировка
От Konstantin Knizhnik
Тема Re: [HACKERS] Cached plans and statement generalization
Дата
Msg-id e228a05c-501d-8b66-67b5-bae212cb7b70@postgrespro.ru
обсуждение исходный текст
Ответ на Re: [HACKERS] Cached plans and statement generalization  (Konstantin Knizhnik <k.knizhnik@postgrespro.ru>)
Ответы Re: [HACKERS] Cached plans and statement generalization  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Список pgsql-hackers

On 01.08.2019 19:56, Konstantin Knizhnik wrote:
>
>
> On 31.07.2019 19:56, Heikki Linnakangas wrote:
>> On 09/07/2019 23:59, Konstantin Knizhnik wrote:
>>> Fixed patch version of the path is attached.
>>
>> Much of the patch and the discussion has been around the raw parsing, 
>> and guessing which literals are actually parameters that have been 
>> inlined into the SQL text. Do we really need to do that, though? The 
>> documentation mentions pgbouncer and other connection poolers, where 
>> you don't have session state, as a use case for this. But such 
>> connection poolers could and should still be using the extended query 
>> protocol, with Parse+Bind messages and query parameters, even if they 
>> don't use named prepared statements. I'd want to encourage 
>> applications and middleware to use out-of-band query parameters, to 
>> avoid SQL injection attacks, regardless of whether they use prepared 
>> statements or cache query plans. So how about dropping all the raw 
>> parse tree stuff, and doing the automatic caching of plans based on 
>> the SQL string, somewhere in the exec_parse_message? Check the 
>> autoprepare cache in exec_parse_message(), if it was an "unnamed" 
>> prepared statement, i.e. if the prepared statement name is an empty 
>> string.
>>
>> (I'm actually not sure if exec_parse/bind_message is the right place 
>> for this, but I saw that your current patch did it in 
>> exec_simple_query, and exec_parse/bind_message are the equivalent of 
>> that for the extended query protocol).
>>
>> - Heikki
>
> I decided to implement your proposal. Much simple version of 
> autoprepare patch is attached.
> At my computer I got the following results:
>
>  pgbench -M simple -S         22495 TPS
>  pgbench -M extended -S    47633 TPS
>  pgbench -M prepared -S    47683 TPS
>
>
> So autoprepare speedup execution of queries sent using extended 
> protocol more than twice and it is almost the same as with explicitly 
> prepared statements.
> I failed to create regression test for it because I do not know how to 
> force psql to use extended protocol. Any advice is welcome.
>

Slightly improved and rebased version of the patch.


-- 
Konstantin Knizhnik
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company


Вложения

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Andres Freund
Дата:
Сообщение: Re: [PATCH] Stop ALTER SYSTEM from making bad assumptions
Следующее
От: Robert Haas
Дата:
Сообщение: Re: [PATCH] Stop ALTER SYSTEM from making bad assumptions