Performance Statistics Reference

This page explains some of the statistics that Solr exposes.

There are two approaches to retrieving metrics. First, you can use the Metrics API, or you can enable JMX and get metrics from the 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

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 75th Percentile. E.g., if 100 requests are received, then the 75th fastest request time will be reported by this statistic.

p95_ms

Request processing time in milliseconds for the request which belongs to the 95th Percentile. E.g., if 100 requests are received, then the 95th fastest request time will be reported in this statistic.

p999_ms

Request processing time in milliseconds for the request which belongs to the 99.9th Percentile. E.g., if 1000 requests are received, then the 999th fastest request time will be reported in this statistic.

p99_ms

Request processing time in milliseconds for the request which belongs to the 99th Percentile. E.g., if 100 requests are received, then the 99th 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:

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 in nanoseconds.

QUERY./select.handlerStart UPDATE./update.handlerStart

Epoch time when the handler was registered.

Differentiating Internal Requests

Processing of a single request in SolrCloud for a large collection requires making additional requests to other replicas, often on other nodes. The internal requests look much the same on the surface (same handler), but they are performing a portion of the over-arching task. Differentiating these requests is really important! Solr tracks its metrics on these handlers with a different handler name when the request is contributing to some other request:

  • Queries: /select query’s internal requests will be tracked as /select[shard]. Technically, this occurs on SearchHandler and its subclasses.

  • (More can be instrumented some day)

Solr’s Prometheus exporter configuration extracts this suffix on the handler to a label named "internal". When configuring Grafana or other metrics tools, be sure to filter these metrics in or out depending on what is being analyzed.

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:

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:

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:

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 Caches and Query Warming.