Re: [HACKERS] WIP aPatch: Pgbench Serialization and deadlock errors - Mailing list pgsql-hackers
From | Yugo NAGATA |
---|---|
Subject | Re: [HACKERS] WIP aPatch: Pgbench Serialization and deadlock errors |
Date | |
Msg-id | 20210707195323.02f64ddf51c77ce2ca41e465@sraoss.co.jp Whole thread Raw |
In response to | Re: [HACKERS] WIP aPatch: Pgbench Serialization and deadlock errors (Tatsuo Ishii <ishii@sraoss.co.jp>) |
Responses |
Re: [HACKERS] WIP aPatch: Pgbench Serialization and deadlock errors
|
List | pgsql-hackers |
On Wed, 07 Jul 2021 16:11:23 +0900 (JST) Tatsuo Ishii <ishii@sraoss.co.jp> wrote: > > Indeed, as Ishii-san pointed out, some users might not want to terminate > > retrying transactions due to -T. However, the actual negative effect is only > > printing the number of failed transactions. The other result that users want to > > know, such as tps, are almost not affected because they are measured for > > transactions processed successfully. Actually, the percentage of failed > > transaction is very little, only 0.347%. > > Well, "that's very little, let's ignore it" is not technically a right > direction IMO. Hmmm, It seems to me these failures are ignorable because with regard to failures due to -T they occur only the last transaction of each client and do not affect the result such as TPS and latency of successfully processed transactions. (although I am not sure for what sense you use the word "technically"...) However, maybe I am missing something. Could you please tell me what do you think the actual harm for users about failures due to -D is? > > In the existing behaviour, running transactions are never terminated due to > > the -T option. However, ISTM that this would be based on an assumption > > that a latency of each transaction is small and that a timing when we can > > finish the benchmark would come soon. On the other hand, when transactions can > > be retried unlimitedly, it may take a long time more than expected, and we can > > not guarantee that this would finish successfully in limited time.Therefore, > > terminating the benchmark by giving up to retry the transaction after time > > expiration seems reasonable under unlimited retries. > > That's necessarily true in practice. By the time when -T is about to > expire, transactions are all finished in finite time as you can see > the result I showed. So it's reasonable that the very last cycle of > the benchmark will finish in finite time as well. Your script may finish in finite time, but others may not. However, considering only serialization and deadlock errors, almost transactions would finish in finite time eventually. In the previous version of the patch, errors other than serialization or deadlock can be retried and it causes unlimited retrying easily. Now, only the two kind of errors can be retried, nevertheless, it is unclear for me that we can assume that retying will finish in finite time. If we can assume it, maybe, we can remove the restriction that --max-retries=0 must be used with --latency-limit or -T. > Of course if a benchmark cycle takes infinite time, this will be a > problem. However same thing can be said to non-retry > benchmarks. Theoretically it is possible that *one* benchmark cycle > takes forever. In this case the only solution will be just hitting ^C > to terminate pgbench. Why can't we have same assumption with > --max-tries=0 case? Indeed, it is possible an execution of a query takes a long or infinite time. However, its cause would a problematic query in the custom script or other problems occurs on the server side. These are not problem of pgbench and, pgbench itself can't control either. On the other hand, the unlimited number of tries is a behaviours specified by the pgbench option, so I think pgbench itself should internally avoid problems caused from its behaviours. That is, if max-tries=0 could cause infinite or much longer benchmark time more than user expected due to too many retries, I think pgbench should avoid it. > > In the sense that we don't > > terminate running transactions forcibly, this don't change the existing behaviour. > > This statement seems to be depending on your perosnal assumption. Ok. If we regard that a transaction is still running even when it is under retrying after an error, terminate of the retry may imply to terminate running the transaction forcibly. > I still don't understand why you think that --max-tries non 0 case > will *certainly* finish in finite time whereas --max-tries=0 case will > not. I just mean that --max-tries greater than zero will prevent pgbench from retrying a transaction forever. Regards, Yugo Nagata -- Yugo NAGATA <nagata@sraoss.co.jp>
pgsql-hackers by date: