-
Notifications
You must be signed in to change notification settings - Fork 24.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add indexing pressure documentation (#59456)
This commit adds documentation about the new indexing pressure memory limit setting and exposure of this metrics in node stats.
- Loading branch information
1 parent
0a73225
commit ceb54ed
Showing
4 changed files
with
172 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
[[index-modules-indexing-pressure]] | ||
== Indexing pressure | ||
|
||
Indexing documents into {es} introduces system load in the form of memory and | ||
CPU load. Each indexing operation includes coordinating, primary, and replica | ||
stages. These stages can be performed across multiple nodes in a cluster. | ||
|
||
Indexing pressure can build up through external operations, such as indexing | ||
requests, or internal mechanisms, such as recoveries and {ccr}. If too much | ||
indexing work is introduced into the system, the cluster can become saturated. | ||
This can adversely impact other operations, such as search, cluster | ||
coordination, and background processing. | ||
|
||
To prevent these issues, {es} internally monitors indexing load. When the load | ||
exceeds certain limits, new indexing work is rejected | ||
|
||
[discrete] | ||
[[indexing-stages]] | ||
=== Indexing stages | ||
|
||
External indexing operations go through three stages: coordinating, primary, and | ||
replica. See <<basic-write-model>>. | ||
|
||
[discrete] | ||
[[memory-limits]] | ||
=== Memory limits | ||
|
||
The `indexing_pressure.memory.limit` node setting restricts the number of bytes | ||
available for outstanding indexing requests. This setting defaults to 10% of | ||
the heap. | ||
|
||
At the beginning of each indexing stage, {es} accounts for the | ||
bytes consumed by an indexing request. This accounting is only released at the | ||
end of the indexing stage. This means that upstream stages will account for the | ||
request overheard until all downstream stages are complete. For example, the | ||
coordinating request will remain accounted for until primary and replica | ||
stages are complete. The primary request will remain accounted for until each | ||
in-sync replica has responded to enable replica retries if necessary. | ||
|
||
A node will start rejecting new indexing work at the coordinating or primary | ||
stage when the number of outstanding coordinating, primary, and replica indexing | ||
bytes exceeds the configured limit. | ||
|
||
A node will start rejecting new indexing work at the replica stage when the | ||
number of outstanding replica indexing bytes exceeds 1.5x the configured limit. | ||
This design means that as indexing pressure builds on nodes, they will naturally | ||
stop accepting coordinating and primary work in favor of outstanding replica | ||
work. | ||
|
||
The `indexing_pressure.memory.limit` setting's 10% default limit is generously | ||
sized. You should only change it after careful consideration. Only indexing | ||
requests contribute to this limit. This means there is additional indexing | ||
overhead (buffers, listeners, etc) which also require heap space. Other | ||
components of {es} also require memory. Setting this limit too high can deny | ||
operating memory to other operations and components. | ||
|
||
[discrete] | ||
[[indexing-pressure-monitoring]] | ||
=== Monitoring | ||
|
||
You can use the | ||
<<cluster-nodes-stats-api-response-body-indexing-pressure,node stats API>> to | ||
retrieve indexing pressure metrics. | ||
|
||
[discrete] | ||
[[indexing-pressure-settings]] | ||
=== Indexing pressure settings | ||
|
||
`indexing_pressure`:: | ||
Number of outstanding bytes that may be consumed by indexing requests. When | ||
this limit is reached or exceeded, the node will reject new coordinating and | ||
primary operations. When replica operations consume 1.5x this limit, the node | ||
will reject new replica operations. Defaults to 10% of the heap. |