On 3/26/19 1:54 AM, Kuroda, Hayato wrote:
Dear David,

I have a will and already read the patch, but I thought it's not my turn.
Sorry.



Hello,

Adrien,

  I did not find any test for log_min_duration that could help me. LCOV indicate
there is no tests on this part (look check_log_duration()):
https://coverage.postgresql.org/src/backend/tcop/postgres.c.gcov.html

I understand the unnecessarily of some test case. It's OK.

Finally, how do you think about the deviation of randomness?
If this parameter is set very low, nobody may be output because of the 
deviation.
we can avoid this phenomenon by counting up internal parameter for each 
transactions and output to log file if the parameter becomes  more than 1.

I don't understand what you want to do and I am afraid of the cost it could add.

There was a long discussion about random, maybe the thread could answer some of your questions?
https://www.postgresql.org/message-id/3859.1545849900%40sss.pgh.pa.us

Furthermore, I wonder if it is really necessary : the goal of this patch is to log a sample of transaction, not to perform precise stats computation. FIY we do not perform this kind of checks for log_statement_sample_rate.



After consideration for this case and rebasing, I think this patch is enough.
Do I have to measure the change of throughput?


I don't think it is necessary or maybe I am missing something. I already perform performance test for log_statement_sample_rate:
https://www.postgresql.org/message-id/8a608ccf-f78b-dfad-4c5f-8e6fd068c59c%40anayrat.info

It should be less expensive as we call random() for new transaction only. log_statement_sample_rate call it for each statement.

I don't know if there is cases where random() call could be slow?

There is still a point raised by Andres:


As far as I can tell xact_is_sampled is not properly reset in case of
errors?


I am not sure if I should disable logging in case of errors. Actually we have:

postgres=# set log_transaction_sample_rate to 1;
SET
postgres=# set client_min_messages to 'LOG';
LOG:  duration: 0.392 ms  statement: set client_min_messages to 'LOG';
SET
postgres=# begin;
LOG:  duration: 0.345 ms  statement: begin;
BEGIN
postgres=# select 1;
LOG:  duration: 0.479 ms  statement: select 1;
 ?column?
----------
        1
(1 row)

postgres=# select * from missingtable;
ERROR:  relation "missingtable" does not exist
LINE 1: select * from missingtable;
                      ^
postgres=# select 1;
ERROR:  current transaction is aborted, commands ignored until end of 
transaction block
postgres=# rollback;
LOG:  duration: 11390.295 ms  statement: rollback;
ROLLBACK

If I reset xact_is_sampled (after the first error inside AbortTransaction if I am right), 
"rollback" statement will not be logged. I wonder if this "statement" should be 
logged?

If the answer is no, I will reset xact_is_sampled in AbortTransaction.


Thanks!

Reply via email to