>> Here conn_total_time is the sum of time to establish connection to >> PostgreSQL. Since establishing connections to PostgreSQL is done in >> serial rather than in parallel, conn_total_time should have been >> divided by nclients. > > After some more thinking and looking again at the connection code, I > revise slightly my diagnostic: > > - the amount of parallelism is "nclients", as discussed above, when > - reconnecting on each transaction (-C) because the connections are > - managed in parallel from doCustom, > > * BUT * > > - if there is no reconnections (not -C) the connections are performed in > - threadRun in a sequential way, all clients wait for the connections of > - other clients in the same thread before starting processing > - transactions, so "nthreads" is the right amount of parallelism in this > - case. > > So on second thought the formula should rather be: > > ... / (is_connect? nclients: nthreads)
I don't think this is quite correct. If is_connect is false, then following loop is executed in threadRun(): /* make connections to the database */ for (i = 0; i < nstate; i++) { if ((state[i].con = doConnect()) == NULL) goto done; } Here, nstate is nclients/nthreads. Suppose nclients = 16 and nthreads = 2, then 2 threads run in parallel, and each thread is connecting 8 times (nstate = 8) in *serial*. The total connection time for this thread is calculated by "the time ends the loop" - "the time starts the loop". So if the time to establish a connection is 1 second, the total connection time for a thread will be 8 seconds. Thus grand total of connection time will be 2 * 8 = 16 seconds. If is_connect is true, following loop is executed. /* send start up queries in async manner */ for (i = 0; i < nstate; i++) { CState *st = &state[i]; Command **commands = sql_files[st->use_file]; int prev_ecnt = st->ecnt; st->use_file = getrand(thread, 0, num_files - 1); if (!doCustom(thread, st, &thread->conn_time, logfile, &aggs)) In the loop, exactly same thing happens as is_connect = false case. If t = 1, total connection time will be same as is_connect = false case, i.e. 16 seconds. In summary, I see no reason to change the v1 patch. Best regards, -- Tatsuo Ishii SRA OSS, Inc. Japan English: http://www.sraoss.co.jp/index_en.php Japanese:http://www.sraoss.co.jp -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers