Re: Fix around conn_duration in pgbench - Mailing list pgsql-hackers

From Fujii Masao
Subject Re: Fix around conn_duration in pgbench
Date
Msg-id bc2136a6-aed4-a6cc-6586-b17101d852f4@oss.nttdata.com
Whole thread Raw
In response to Re: Fix around conn_duration in pgbench  (Yugo NAGATA <nagata@sraoss.co.jp>)
Responses Re: Fix around conn_duration in pgbench  (Yugo NAGATA <nagata@sraoss.co.jp>)
List pgsql-hackers

On 2021/07/27 11:02, Yugo NAGATA wrote:
> Hello Fujii-san,
> 
> Thank you for looking at it.
> 
> On Tue, 27 Jul 2021 03:04:35 +0900
> Fujii Masao <masao.fujii@oss.nttdata.com> wrote:
> 
>>                case CSTATE_FINISHED:
>> +                /* per-thread last disconnection time is not measured */
>>
>> Could you tell me why we don't need to do this measurement?
> 
> We don't need to do it because it is already done in CSTATE_END_TX state when
> the transaction successfully finished. Also, we don't need it when the thread
> is aborted (that it, in CSTATE_ABORTED case) because we can't report complete
> results anyway in such cases.

Understood.


> I updated the comment.

Thanks!

+                 * Per-thread last disconnection time is not measured because it
+                 * is already done when the transaction successfully finished.
+                 * Also, we don't need it when the thread is aborted because we
+                 * can't report complete results anyway in such cases.

What about commenting a bit more explicitly like the following?

--------------------------------------------
In CSTATE_FINISHED state, this disconnect_all() is no-op under -C/--connect because all the connections that this
threadestablished should have already been closed at the end of transactions. So we don't need to measure the
disconnectiondelays here.
 

In CSTATE_ABORTED state, the measurement is no longer necessary because we cannot report complete results anyways in
thiscase.
 
--------------------------------------------


>   
>> -        /* no connection delay to record */
>> -        thread->conn_duration = 0;
>> +        /* connection delay is measured globally between the barriers */
>>
>> This comment is really correct? I was thinking that the measurement is not necessary here because this is the case
where-C option is not specified.
 
> 
> This comment means that, when -C is not specified, the connection delay is
> measured between the barrier point where the benchmark starts
> 
>       /* READY */
>       THREAD_BARRIER_WAIT(&barrier);
> 
> and the barrier point where all the thread finish making initial connections.
> 
>       /* GO */
>       THREAD_BARRIER_WAIT(&barrier);

Ok, so you're commenting about the initial connection delay that's
measured when -C is not specified. But I'm not sure if this comment
here is really helpful. Seem rather confusing??


> 
> 
>> done:
>>     start = pg_time_now();
>>     disconnect_all(state, nstate);
>>     thread->conn_duration += pg_time_now() - start;
>>
>> We should measure the disconnection time here only when -C option specified (i.e., is_connect variable is true)?
Though,I'm not sure how much this change is helpful to reduce the performance overhead....
 
> 
> You are right. We are measuring the disconnection time only when -C option is
> specified, but it is already done at the end of transaction (i.e., CSTATE_END_TX).
> We need disconnection here only when we get an error.
> Therefore, we don't need the measurement here.

Ok.

I found another disconnect_all().

    /* XXX should this be connection time? */
    disconnect_all(state, nclients);

The measurement is also not necessary here.
So the above comment should be removed or updated?

  
> I attached the updated patch.

Thanks!

Regards.

-- 
Fujii Masao
Advanced Computing Technology Center
Research and Development Headquarters
NTT DATA CORPORATION



pgsql-hackers by date:

Previous
From: Mark Dilger
Date:
Subject: Documentation disagrees with behavior of ALTER EVENT TRIGGER
Next
From: Robert Haas
Date:
Subject: Re: Delegating superuser tasks to new security roles (Was: Granting control of SUSET gucs to non-superusers)