Load balancing for distributed search queries
DSE Search uses algorithms to balance the load for distributed search queries by minimizing the number of shards that are queried and reducing the amount of data that is transferred from non-local nodes. Strategies are per search index (per core) and can be changed with dsetool set_core_property. Changes are recognized with RELOAD SEARCH INDEX and do not require restarting the node. Different search indexes can have different values.
Core properties
The core properties for load balancing distributed search queries are:
shard.set.cover.finder
The shard set cover finder calculates how to set cover for a query and specify how one node is selected over others for reading the search data.
The value can be one of:
-
STATIC
Use Results -
For new cores,
STATIC
is the default starting in DSE 6.7, and is recommended for most environments.In prior DSE releases,
DYNAMIC
was the default. If you are upgrading to DSE 6.8, refer to the Upgrade Guide. -
Faster
-
shard.set.cover.finder=STATIC
-
For a given index, a particular coordinator accesses the same token ranges from the respective shards.
-
Creates fewer token filters.
-
Load balancing on the client side is required to achieve uniform utilization of shards by the coordinator nodes.
-
-
DYNAMIC
Use Results -
DYNAMIC
was the default in prior DSE releases. -
Starting in DSE 6.7,
STATIC
is the default and is recommended for most environments. -
shard.set.cover.finder=DYNAMIC
-
With
DYNAMIC
, there is no fixed distribution of shard requests for a given coordinator. For two queries, there may be two different sets of shard requests. -
Using
DYNAMIC
creates a large number of unique token filters because different queries may yield shard requests accessing different sets of token ranges. This scenario is often times a problem especially with vnodes because there is a much greater number of possible combinations.
-
shard.shuffling.strategy
When shard.set.cover.finder=DYNAMIC
, you can change shard.shuffling.strategy
to one of these values:
-
HOST - Shards are selected based on the host that received the query.
-
QUERY - Shards are selected based on the query string.
-
HOST_QUERY - Shards are selected by host x query.
-
RANDOM - Different random set of shards are selected with each request (default).
-
SEED - Selects the same shard from one query to another.
shard.set.cover.finder.inertia
When shard.set.cover.finder=STATIC
(default starting in DSE 6.8), you can change the shard.cover.finder.inertia
value.
Increasing the inertia value from the default of 1 may improve performance for clusters with more than 1 vnode and more than 20 nodes.
The default is appropriate for most workloads.
Changing core properties
Changing core properties is an advanced operation that sets properties in the |
These example commands show how to change core properties for the healthcare
keyspace and the health_data
table.
-
To set the shard set cover finder:
dsetool set_core_property healthcare.health_data shard.set.cover.finder=STATIC
-
Only when
shard.set.cover.finder=DYNAMIC
, you can change the shard shuffling strategy:dsetool set_core_property healthcare.health_data shard.shuffling.strategy=query
-
To recognize the changes on the node, reload the search index:
RELOAD SEARCH INDEX ON healthcare.health_data
-
To view the state of the properties in the
dse-search.properties
resource:dsetool list_core_properties healthcare.health_data
Result:
shard.set.cover.finder=STATIC
Log files show the loaded DSE search properties.
The dsetool list_core_properties command shows only the state of the properties in the |