Hi Team, I am running load test on our test pinot ...
# troubleshooting
a
Hi Team, I am running load test on our test pinot cluster, experimenting with getting high qps on same hardware (3 servers * 4 cores, 16 GB ram) Data size is 100M rows, distributed over a year The filter column is from_user_id (string), with sorted index
Copy code
Query : select  sum(amount) as amt from transactions where from_user_id = "some id"
Initially created table with 13 monthly segments, achieved 3.37K qps p99 143ms Further partitioned data 4 partitions on column from_user_id (13 * 4 segments), achieved 3.50K qps p99 146 ms There is not much difference in throughput Is the data size that too small to realise benefit of partitioning? Any thoughts on further tuning?
r
does user_id need to be a string?
i.e. does it contain non numeric characters?
a
yes, its uuid
r
ok that's a shames, numbers allow much faster filtering
it would be good if you could provide a profile so we know where the bottleneck is, then we can suggest around that
Copy code
cmd <pid> JFR.start duration=60s settings=profile filename=user_lookup_load_test.jfr
an optimisation was made for sum recently which might be relevant to you
a
shall I run this during load test or running with just one query is sufficient using docker images so i'll run this inside the container
Copy code
jcmd 1 JFR.start duration=60s settings=profile filename=user_lookup_load_test.jfr
it seems 1 is the pid of primary pinot server process
m
Partitioning gains for throughput are a lot more when you have larger number of segments that can be pruned out (or even servers that won’t be queried).
a
i think a partitioned replica group config like this will increase throughput for current hardware setup, if I keep only 3 partitions one for each server
Copy code
"replicaGroupPartitionConfig": {
          "replicaGroupBased": true,
          "numInstances": 0,
          "numReplicaGroups": 1,
          "numInstancesPerReplicaGroup": 3,
          "numPartitions": 3,
          "numInstancesPerPartition": 1
        }
This will not work in latest docker image 1. numReplicaGroups : 1 fails to do segment assignment https://github.com/apache/pinot/issues/8090 2. numInstancesPerPartition: 1 distributes all segments (and partitions) to one server in a replica group. I'll create a detailed github issue shortly. (issue description from another thread https://apache-pinot.slack.com/archives/C011C9JHN7R/p1643393657447809?thread_ts=1642592309.048000&amp;cid=C011C9JHN7R