Re: Performance under contention

Поиск
Список
Период
Сортировка
От Vitalii Tymchyshyn
Тема Re: Performance under contention
Дата
Msg-id 4CECD3A8.2050707@gmail.com
обсуждение исходный текст
Ответ на Re: Performance under contention  (Craig Ringer <craig@postnewspapers.com.au>)
Ответы Re: Performance under contention
Список pgsql-performance
24.11.10 02:11, Craig Ringer написав(ла):
> On 11/22/2010 11:38 PM, Ivan Voras wrote:
>> On 11/22/10 16:26, Kevin Grittner wrote:
>>> Ivan Voras<ivoras@freebsd.org> wrote:
>>>> On 11/22/10 02:47, Kevin Grittner wrote:
>>>>> Ivan Voras wrote:
>>>>>
>>>>>> After 16 clients (which is still good since there are only 12
>>>>>> "real" cores in the system), the performance drops sharply
>>>>>
>>>>> Yet another data point to confirm the importance of connection
>>>>> pooling. :-)
>>>>
>>>> I agree, connection pooling will get rid of the symptom. But not
>>>> the underlying problem. I'm not saying that having 1000s of
>>>> connections to the database is a particularly good design, only
>>>> that there shouldn't be a sharp decline in performance when it
>>>> does happen. Ideally, the performance should remain the same as it
>>>> was at its peek.
>>>
>>> Well, I suggested that we add an admission control[1] mechanism,
>>
>> It looks like a hack (and one which is already implemented by connection
>> pool software); the underlying problem should be addressed.
>
> My (poor) understanding is that addressing the underlying problem
> would require a massive restructure of postgresql to separate
> "connection and session state" from "executor and backend". Idle
> connections wouldn't require a backend to sit around unused but
> participating in all-backends synchronization and signalling. Active
> connections over a configured maximum concurrency limit would queue
> for access to a backend rather than fighting it out for resources at
> the OS level.
>
> The trouble is that this would be an *enormous* rewrite of the
> codebase, and would still only solve part of the problem. See the
> prior discussion on in-server connection pooling and admission control.
Hello.

IMHO the main problem is not a backend sitting and doing nothing, but
multiple backends trying to do their work. So, as for me, the simplest
option that will make most people happy would be to have a limit
(waitable semaphore) on backends actively executing the query. Such a
limit can even be automatically detected based on number of CPUs
(simple) and spindels (not sure if simple, but some default can be
used). Idle (or waiting for a lock) backend consumes little resources.
If one want to reduce resource usage for such a backends, he can
introduce external pooling, but such a simple limit would make me happy
(e.g. having max_active_connections=1000, max_active_queries=20).
The main Q here, is how much resources can take a backend that is
waiting for a lock. Is locking done at the query start? Or it may go
into wait while consumed much of work_mem. In the second case, the limit
won't be work_mem limit, but will still prevent much contention.

Best regards, Vitalii Tymchyshyn

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

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: postmaster consuming /lots/ of memory with hash aggregate. why?
Следующее
От: "Kevin Grittner"
Дата:
Сообщение: Re: Performance under contention