blob: 34694cfa2ba090341086f8ecd59ff789dd652517 [file] [log] [blame]
= Performance Statistics Reference
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
This page explains some of the statistics that Solr exposes.
There are two approaches to retrieving metrics. First, you can use the <<metrics-reporting.adoc#metrics-api,Metrics API>>, or you can enable JMX and get metrics from the <<mbean-request-handler.adoc#,MBean Request Handler>> or via an external tool such as JConsole. The below descriptions focus on retrieving the metrics using the Metrics API, but the metric names are the same if using the MBean Request Handler or an external tool.
These statistics are per core. When you are running in SolrCloud mode these statistics would co-relate to the performance of an individual replica.
== Request Handler Statistics
=== Update Request Handler
The update request handler is an endpoint to send data to Solr. We can see how many update requests are being fired, how fast is it performing, and other valuable information regarding requests.
*Registry & Path:* `solr.<core>:UPDATE./update`
You can request update request handler statistics with an API request such as `\http://localhost:8983/solr/admin/metrics?group=core&prefix=UPDATE`.
=== Search Request Handler
Can be useful to measure and track number of search queries, response times, etc. If you are not using the select handler then the path needs to be changed appropriately. Similarly if you are using the sql handler or export handler, the realtime handler get”, or any other handler similar statistics can be found for that as well.
*Registry & Path*: `solr.<core>:QUERY./select`
You can request statistics for the `/select` request handler with an API request such as `\http://localhost:8983/solr/admin/metrics?group=core&prefix=QUERY./select`.
=== Commonly Used Stats for Request Handlers
All of the update and search request handlers will provide the following statistics.
*Request Times*
To get request times, specifically, you can send an API request such as:
* `\http://localhost:8983/solr/admin/metrics?group=core&prefix=UPDATE./update.requestTimes`
* `\http://localhost:8983/solr/admin/metrics?group=core&prefix=QUERY./select.requestTimes`
// TODO: Change column width to %autowidth.spread when https://github.com/asciidoctor/asciidoctor-pdf/issues/599 is fixed
[cols="25,75",options="header"]
|===
|Attribute |Description
|15minRate |Requests per second received over the past 15 minutes.
|5minRate |Requests per second received over the past 5 minutes.
|p75_ms |Request processing time for the request which belongs to the 75^th^ Percentile. E.g., if 100 requests are received, then the 75^th^ fastest request time will be reported by this statistic.
|p95_ms |Request processing time in milliseconds for the request which belongs to the 95^th^ Percentile. E.g., if 100 requests are received, then the 95^th^ fastest request time will be reported in this statistic.
|p999_ms |Request processing time in milliseconds for the request which belongs to the 99.9^th^ Percentile. E.g., if 1000 requests are received, then the 999^th^ fastest request time will be reported in this statistic.
|p99_ms |Request processing time in milliseconds for the request which belongs to the 99^th^ Percentile. E.g., if 100 requests are received, then the 99^th^ fastest request time will be reported in this statistic.
|count |Total number of requests made since the Solr core was first created.
|median_ms |Median of all the request processing time.
|meanRate |Average number of requests received per second since the Solr core was first created.
|===
*Errors and Other Times*
Other types of data such as errors and timeouts are also provided. These are available under different metric names. For example:
* `\http://localhost:8983/solr/admin/metrics?group=core&prefix=UPDATE./update.errors`
* `\http://localhost:8983/solr/admin/metrics?group=core&prefix=QUERY./select.errors`
The table below shows the metric names and attributes to request:
[cols="30,70",options="header"]
|===
|Metric name | Description
|`QUERY./select.errors`
`UPDATE./update.errors` |Number of errors encountered by handler. In addition to a count of errors, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`QUERY./select.clientErrors`
`UPDATE./update.clientErrors` |Number of syntax or parse errors made by a client while making requests. In addition to a count of errors, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`QUERY./select.requests`
`UPDATE./update.requests` |Number of requests received by this handler.
|`QUERY./select.serverErrors`
`UPDATE./update.serverErrors` |Number of errors thrown by the server while executing the request. In addition to a count of errors, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`QUERY./select.timeouts`
`UPDATE./update.timeouts` |Number of responses received with partial results. In addition to a count of timeout events, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`QUERY./select.totalTime`
`UPDATE./update.totalTime` |The sum of all request processing times since the Solr process was started.
|`QUERY./select.handlerStart`
`UPDATE./update.handlerStart` |Epoch time when the handler was registered.
|===
*Distributed vs. Local Request Times*
Processing of a single distributed request in SolrCloud usually requires making several requests to
other nodes and other replicas. The common statistics listed above lump these timings together, even though
they are very different in nature, thus making it difficult to measure the latency of distributed and
local requests separately. Solr 8.4 introduced additional statistics that help to do this.
These metrics are structured the same as `requestTimes` and `totalTime` metrics above but they use
different full names, e.g., `QUERY./select.distrib.requestTimes` and `QUERY./select.local.requestTimes`.
The metrics under the `distrib` path correspond to the time it takes for a (potentially) distributed
request to complete all remote calls plus any local processing, and return the result to the caller.
The metrics under the `local` path correspond to the time it takes for a local call (non-distributed,
i.e., being processed only by the Solr core where the handler operates) to complete.
== Update Handler
This section has information on the total number of adds and how many commits have been fired against a Solr core.
*Registry & Path:* `solr.<core>:UPDATE.updateHandler`
You can get all update handler statistics shown in the table below with an API request such as `\http://localhost:8983/solr/admin/metrics?group=core&prefix=UPDATE.updateHandler`.
The following describes the specific statistics you can get:
// TODO: Change column width to %autowidth.spread when https://github.com/asciidoctor/asciidoctor-pdf/issues/599 is fixed
[cols="40,60",options="header"]
|===
|Attribute |Description
|`UPDATE.updateHandler.adds` |Total number of add requests since last commit.
|`UPDATE.updateHandler.autoCommitMaxTime` |Maximum time between two auto-commits execution.
|`UPDATE.updateHandler.autoCommits` |Total number of auto-commits executed.
|`UPDATE.updateHandler.commits` | Number of total commits executed.
In addition to a count of commits, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.cumulativeAdds` |Number of effective additions executed over the lifetime. The counter is incremented when add command is executed while decremented when rollback is executed.
In addition to a count of adds, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.cumulativeDeletesById` |Number of document deletions executed by ID over the lifetime. The counter is incremented when delete command is executed and decremented when rollback is executed.
In addition to a count of deletes, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.cumulativeDeletesByQuery` |Number of document deletions executed by query over the lifetime. The counter is incremented when delete command is executed and decremented when rollback is executed.
In addition to a count of deletes, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.cumulativeErrors` |Number of error messages received while performing addition/deletion actions on documents over the lifetime.
In addition to a count of errors, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.deletesById` |Currently uncommitted deletions by ID.
|`UPDATE.updateHandler.deletesByQuery` |Currently uncommitted deletions by query.
|`UPDATE.updateHandler.docsPending` |Number of documents which are pending commit.
|`UPDATE.updateHandler.errors` |Number of error messages received while performing addition/deletion/commit/rollback actions on documents over the lifetime of the core.
|`UPDATE.updateHandler.expungeDeletes` |Number of commit commands issued with expunge deletes.
In addition to a count of expunge deletes, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.merges` | Number of index merges that have occurred.
In addition to a count of merges, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.optimizes` |Number of explicit optimize commands issued.
In addition to a count of optimizations, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.rollbacks` |Number of rollbacks executed.
In addition to a count of rollbacks, mean, 1 minute, 5 minute, and 15 minute rates are also available.
|`UPDATE.updateHandler.softAutoCommitMaxTime` |Maximum document adds between two soft auto-commits.
|`UPDATE.updateHandler.softAutoCommits` |Number of soft commits executed.
|===
== Cache Statistics
=== Document Cache
This cache holds Lucene Document objects (the stored fields for each document). Since Lucene internal document IDs are transient, this cache cannot be auto-warmed.
*Registry and Path:* `solr.<core>:CACHE.searcher.documentCache`
You can get the statistics shown in the table below with an API request such as `\http://localhost:8983/solr/admin/metrics?group=core&prefix=CACHE.searcher.documentCache`.
=== Query Result Cache
This cache holds the results of previous searches: ordered lists of document IDs based on a query, a sort, and the range of documents requested
*Registry and Path:* `solr.<core>:CACHE.searcher.queryResultCache`
You can get the statistics shown in the table below with an API request such as `\http://localhost:8983/solr/admin/metrics?group=core&prefix=CACHE.searcher.queryResultCache`.
=== Filter Cache
This cache is used for filters for unordered sets of all documents that match a query.
*Registry and Path:* `solr.<core>:CACHE.searcher.filterCache`
You can get the statistics shown in the table below with an API request such as `\http://localhost:8983/solr/admin/metrics?group=core&prefix=CACHE.searcher.filterCache`.
=== Statistics for Caches
The following statistics are available for each of the caches mentioned above:
// TODO: Change column width to %autowidth.spread when https://github.com/asciidoctor/asciidoctor-pdf/issues/599 is fixed
[cols="25,75",options="header"]
|===
|Attribute |Description
|cumulative_evictions |Number of cache evictions across all caches since this node has been running.
|cumulative_hitratio |Ratio of cache hits to lookups across all the caches since this node has been running.
|cumulative_hits |Number of cache hits across all the caches since this node has been running.
|cumulative_inserts |Number of cache insertions across all the caches since this node has been running.
|cumulative_lookups |Number of cache lookups across all the caches since this node has been running.
|evictions |Number of cache evictions for the current index searcher.
|hitratio |Ratio of cache hits to lookups for the current index searcher.
|hits |Number of hits for the current index searcher.
|inserts |Number of inserts into the cache.
|lookups |Number of lookups against the cache.
|size |Number of entries in the cache at that particular instance.
|warmupTime |Warm-up time for the registered index searcher in milliseconds. This time is taken in account for the auto-warming of caches.
|===
When eviction by heap usage is enabled, the following additional statistics are available for the Query Result Cache:
[cols="25,75",options="header"]
|===
|Attribute |Description
|maxRamMB |Maximum heap that should be used by the cache beyond which keys will be evicted.
|ramBytesUsed| Actual heap usage of the cache at that particular instance.
|evictionsRamUsage| Number of cache evictions for the current index searcher because heap usage exceeded maxRamMB.
|===
More information on Solr caches is available in the section <<query-settings-in-solrconfig.adoc#,Query Settings in SolrConfig>>.