Hello,
I am running a cluster v7.4.8 with 2 data nodes, 2 SQL nodes, and 1 mgmt node.
The cluster is configured with ndb-cluster-connection-pool=1
A simple "select" query execution takes 0.08 sec:
select * from users where name = 'jdoe' and partition_key = 'part1';
The query returns 1 row (the column "name" is indexed).
The average execution time of the same query run concurrently by 10 clients (mysqlslap --concurrency=10 --iterations=100) is 0.8 sec, which is 10 times slower than a single client.
So far this seems coherent; since ndb-cluster-connection-pool=1, the 10 concurrent clients are competing for the single NDB API connection, and things are 10 times slower.
However, when ndb-cluster-connection-pool=4 (or 2), the test results remain unchanged; when 10 clients are running concurrently, the average "select" query execution time is still 0.8 sec.
So why are the "select" performance not improved when ndb-cluster-connection-pool is increased?
Is it because the contention point resides in fact in the data node? I would have expected at least a slight enhancement of the performance with a connection pool, but that's not the case.
I tried to use the multi-threaded "ndbmtd" instead of "ndbd", with MaxNoOfExecutionThreads=2, but to no avail; the performance are not improved.
Note 1: the cluster pool configuration is correct: "netstat" shows the additional TCP connections between mysqld and ndbd, and "ndb_mgm -e show" displays the additional SQL nodes as expected.
Note 2: if 50 concurrent clients are running, the query execution is 50 times slower; the execution time is strictly linear regarding the number of clients.
Thank you in advance for your suggestions,
Pierre Sion
I am running a cluster v7.4.8 with 2 data nodes, 2 SQL nodes, and 1 mgmt node.
The cluster is configured with ndb-cluster-connection-pool=1
A simple "select" query execution takes 0.08 sec:
select * from users where name = 'jdoe' and partition_key = 'part1';
The query returns 1 row (the column "name" is indexed).
The average execution time of the same query run concurrently by 10 clients (mysqlslap --concurrency=10 --iterations=100) is 0.8 sec, which is 10 times slower than a single client.
So far this seems coherent; since ndb-cluster-connection-pool=1, the 10 concurrent clients are competing for the single NDB API connection, and things are 10 times slower.
However, when ndb-cluster-connection-pool=4 (or 2), the test results remain unchanged; when 10 clients are running concurrently, the average "select" query execution time is still 0.8 sec.
So why are the "select" performance not improved when ndb-cluster-connection-pool is increased?
Is it because the contention point resides in fact in the data node? I would have expected at least a slight enhancement of the performance with a connection pool, but that's not the case.
I tried to use the multi-threaded "ndbmtd" instead of "ndbd", with MaxNoOfExecutionThreads=2, but to no avail; the performance are not improved.
Note 1: the cluster pool configuration is correct: "netstat" shows the additional TCP connections between mysqld and ndbd, and "ndb_mgm -e show" displays the additional SQL nodes as expected.
Note 2: if 50 concurrent clients are running, the query execution is 50 times slower; the execution time is strictly linear regarding the number of clients.
Thank you in advance for your suggestions,
Pierre Sion