Thread: PGBench on Windows - connections are subprocesses?
Dear Members!
Do you know something about the background of this utility?
We have to move to the next server which is different from the actual one, and I need to measure them to detect the possible problems.
To compare the result I must understand the operations.
I have a question about PGBench for Windows (9,6).
I want to understand the working method of this tool for use well in the test series.
This has more options, like connections (c).
As I tried the c controls how much concurrent connections must be used in the test. For example c 10 increases with ten. It's ok.
But the number of threads option (j I think) confused me. At first I thought the total connection number is simply the multiplication of c and j (subconnections).
As I saw this is untrue.
So I don't know how this utility works really in the background.
a.)
It makes C subprocesses with connections and every of them makes his work concurrently?
b.)
It makes N connections on one thread/process. Hut only one works at the same time. J controls how much works at the same time. The other connections are sleeping.
1. c started/has finished.
2. c started/has finished.
N. c started/has finished.
End.
(This is a little bit senseless)
c.)
It makes C subthreads and every thread has it's connection. They work concurrently (like in case a).
It could be ok, but why can I set threads with the "j" option - when subthreads must be equal with the number of connections.
It makes C subprocesses with connections and every of them makes his work concurrently?
b.)
It makes N connections on one thread/process. Hut only one works at the same time. J controls how much works at the same time. The other connections are sleeping.
1. c started/has finished.
2. c started/has finished.
N. c started/has finished.
End.
(This is a little bit senseless)
c.)
It makes C subthreads and every thread has it's connection. They work concurrently (like in case a).
It could be ok, but why can I set threads with the "j" option - when subthreads must be equal with the number of connections.
Do you know something about the background of this utility?
We have to move to the next server which is different from the actual one, and I need to measure them to detect the possible problems.
To compare the result I must understand the operations.
Very-very thank you for each answer you write!
Best regards
DD
Durumdara <durumdara@gmail.com> writes: > But the number of threads option (j I think) confused me. At first I > thought the total connection number is simply the multiplication of c and j > (subconnections). > As I saw this is untrue. > So I don't know how this utility works really in the background. There are -j threads in the pgbench process, and -c connections to the server (hence -c backend processes on the server side). Each of the pgbench threads is responsible for sending queries to a subset of the connections. Setting -j more than -c is useless (I forget if it's actually an error). If you set -j to, say, half of -c then each thread has exactly two connections to manage. If -j is too small compared to -c then pgbench itself tends to become the bottleneck. regards, tom lane
I extend the question to understand why I was confused about this.
In Delphi the connections are thread based. From a thread you can use more connections. But you can't use a connection from two or more threads concurrently! You can use subprocess farm, or subthread farm to make parallel performance tests.
Durumdara <durumdara@gmail.com> ezt írta (időpont: 2020. júl. 20., H, 15:20):
Dear Members!I have a question about PGBench for Windows (9,6).I want to understand the working method of this tool for use well in the test series.This has more options, like connections (c).As I tried the c controls how much concurrent connections must be used in the test. For example c 10 increases with ten. It's ok.But the number of threads option (j I think) confused me. At first I thought the total connection number is simply the multiplication of c and j (subconnections).As I saw this is untrue.So I don't know how this utility works really in the background.a.)
It makes C subprocesses with connections and every of them makes his work concurrently?
b.)
It makes N connections on one thread/process. Hut only one works at the same time. J controls how much works at the same time. The other connections are sleeping.
1. c started/has finished.
2. c started/has finished.
N. c started/has finished.
End.
(This is a little bit senseless)
c.)
It makes C subthreads and every thread has it's connection. They work concurrently (like in case a).
It could be ok, but why can I set threads with the "j" option - when subthreads must be equal with the number of connections.
Do you know something about the background of this utility?
We have to move to the next server which is different from the actual one, and I need to measure them to detect the possible problems.
To compare the result I must understand the operations.Very-very thank you for each answer you write!Best regardsDD
Dear Tom!
Tom Lane <tgl@sss.pgh.pa.us> ezt írta (időpont: 2020. júl. 20., H, 15:38):
There are -j threads in the pgbench process, and -c connections to
the server (hence -c backend processes on the server side). Each
of the pgbench threads is responsible for sending queries to a subset
of the connections. Setting -j more than -c is useless (I forget
if it's actually an error). If you set -j to, say, half of -c then
each thread has exactly two connections to manage. If -j is too
small compared to -c then pgbench itself tends to become the bottleneck.
Without -j, we have N connections, but one thread.
So this thread serves all of the connections one by one? The 1. and 2. and 3. connection while others do nothing (standing by)?
Or like Round Robin: a job from C1, next job from C2, .... job from CN - then job from C1.... and no more jobs?
And if J = C means realtime parallel test?
Because each thread has only one connection, and they work concurrently as real users do?
Then if I want to simulate 500 users heavy work, I need to set J=C=500?
So this thread serves all of the connections one by one? The 1. and 2. and 3. connection while others do nothing (standing by)?
Or like Round Robin: a job from C1, next job from C2, .... job from CN - then job from C1.... and no more jobs?
And if J = C means realtime parallel test?
Because each thread has only one connection, and they work concurrently as real users do?
Then if I want to simulate 500 users heavy work, I need to set J=C=500?
Thank you for the information!
BW
DD