-
Notifications
You must be signed in to change notification settings - Fork 24.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add indexing pressure documentation #59456
Changes from 10 commits
86971d4
54bc0ff
e6a6637
d0549eb
fdfa56f
eea17d4
73cf1a9
8dfba66
7dffca4
55d2d5e
0daf58f
692053a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,75 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
[[index-modules-indexing-pressure]] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
== Indexing pressure | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Indexing documents into Elasticsearch 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 the | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
cluster. If too much indexing work is introduced into the system, the cluster | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
can become saturated. This can adversely impact other components of the system | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
such as searches, cluster coordination, background processing, etc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Indexing pressure is primarily generated by external operations such as indexing | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
requests or internally by mechanisms such recoveries and cross-cluster | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
replication. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Elasticsearch internally monitors indexing load. When the load exceeds | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
certain limits, new indexing work will be rejected. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I re-ordered this to try to improve the flow.
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
[discrete] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
[[indexing-stages]] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
=== Indexing stages | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
External indexing operations go through three stages: coordinating, primary, and | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
replica. See <<basic-write-model,here>>. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. does this link need fixing? (<>) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd remove the
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
[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 default limit `indexing_pressure.memory.limit` (10%) is generously sized and | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
should only be modified after careful consideration. Only indexing requests | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
contribute to this limit meaning that there is additional indexing overhead | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
(buffers, listeners, etc) which also require heap space. Finally, other | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
components of Elasticsearch also require memory. Configuring this limit to be | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
too high can starve other system components of operating memory. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tim-Brooks marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
[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`:: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
A configurable limit for the number of outstanding bytes consumed by indexing | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
requests. New coordinating and primary operations will start being rejected | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
once this limit is hit. New replica operations will start being rejected when | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
replica operations consumed 1.5X this limit. Defaults to `10%` of the heap. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Tim-Brooks marked this conversation as resolved.
Show resolved
Hide resolved
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if the primary "stage" is executed locally