Include Query Timings
-
When making a query,
you can request to get detailed stats of the time spent by RavenDB on each part of the query.
E.g. duration of search, loading documents, transforming results, total duration, etc. -
By default, the timings stats are Not included in the query results, to avoid the measuring overhead.
-
To include the query timings in the query results:
add a call to thetimings()
method in your query code, or addinclude timings()
to an RQL query.
See examples below. -
In this page:
Include timings in a query
timings: Optional[QueryTimings] = None
# Prepare a callback
def timings_callback(timings_from_server: QueryTimings):
timings = timings_from_server
results = list(
session.advanced.document_query(object_type=Product)
# Call timings, provide a callback function that will be called with result timings
.timings(timings_callback)
# Define query criteria
# i.e. search for docs containing Syrup -or- Lager in their Name field
.search("Name", "Syrup Lager")
# Execute the query
)
# Get total query duration:
# =========================
total_query_duration = timings.duration_in_ms
# Get specific parts duration:
# ============================
timings_dictionary = timings.timings
optimizer_duration = timings_dictionary["Optimizer"].duration_in_ms
lucene_duration = timings_dictionary["Query"].timings["lucene"].duration_in_ms
from "Products"
where search(Name, "Syrup") or search(Name, "Lager")
include timings()
View timings
-
The detailed timings can be viewed from the Query view in the Studio.
-
Running an RQL query with
include timings()
will show an additional Timings Tab
with a graphical representation of the time spent in each query part.
Include timings results
Syntax
def timings(self, timings_callback: Callable[[QueryTimings], None]) -> DocumentQuery[_T]: ...
Parameter | Type | Description |
---|---|---|
timings_callback | Callable[[QueryTimings], None] |
A callback function (action) that takes QueryTimings as an argument. It will be called by the client with the resulting QueryTimings . You can interact with the resulting QueryTimings inside your callback. |
class QueryTimings:
def __init__(self, duration_in_ms: int = None, timings: Dict[str, QueryTimings] = None):
self.duration_in_ms = duration_in_ms
self.timings = timings or {}
QueryTimings |
||
---|---|---|
duration_in_ms | int |
Total duration |
timings | Dict[str, QueryTimings] |
Dictionary with QueryTimings info per time part |
Timings in a sharded database
-
In a sharded database, timings for each part are provided per shard.
-
Learn more in timings in a sharded database.