diff --git a/docs/product/insights/backend/queries.mdx b/docs/product/insights/backend/queries.mdx index 05cd6feb9f9b5..2fdc682b7024d 100644 --- a/docs/product/insights/backend/queries.mdx +++ b/docs/product/insights/backend/queries.mdx @@ -1,12 +1,12 @@ --- title: Queries sidebar_order: 0 -description: "Monitor the performance of your database queries and drill into samples to investigate further." +description: "With Queries in Sentry, you can easily see database queries, remediate performance errors & monitor query performance." --- -If you have performance monitoring enabled and your application queries a database, you can see how your queries are performing in Sentry. +If you have [performance monitoring](/product/performance/) enabled and your application queries a database, you can see how your queries are performing in Sentry. Sentry's query monitoring helps you investigate the performance of your queries and get more information to improve them. @@ -40,7 +40,7 @@ Query monitoring works best with up-to-date SDK versions. The following minimum Sentry tries to extract metrics for all SQL-like dialects, as well as MongoDB. Other NoSQL databases like Elasticsearch, graph databases like Neo4j, and other non-SQL database systems are not currently eligible for this feature. -If you are using automatic instrumentation, query monitoring should work without any configuration. If you've manually instrumented Sentry, you'll need to make sure that your spans conform to our standards for the best experience: +If you are using automatic instrumentation, query performance monitoring should work without any configuration. If you've manually instrumented Sentry, you'll need to make sure that your spans conform to our standards for the best experience: - The span `op` field is set to an [eligible value](https://develop.sentry.dev/sdk/performance/span-operations/#database). - The span's description contains the full, parameterized query (e.g. `"SELECT * FROM users WHERE id = ?"`). Supported placeholder values for SQL are `%s`, `?`, `:c0` (e.g. `:c0`, `:c1`) and `$1` (e.g. `$1`, `$2`). MongoDB span descriptions should contain valid JSON, and placeholders should be the string `"?"`. @@ -50,11 +50,11 @@ If you are using -A query's source is the location in your application's code that triggered the query. Sentry automatically determines the query source by examining the stack trace and attaches the source to the query data. +A query's source is the location in your application's code that triggered the query. Sentry automatically determines the query source by examining the [stack trace](/product/sentry-basics/integrate-frontend/upload-source-maps/) and attaches the source to the query data. You can see the query's source underneath the query description on the **Query Summary** page, as shown in the image below. If you have a [source code management integration](/organization/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. @@ -106,7 +106,7 @@ You can see the query's source underneath the query description on the **Query S Click on an endpoint to open its samples list. This side panel shows summary metrics (QPM and average duration) for the query in the specific endpoint. -The table shows a sample list of events, their span duration, and the difference in duration compared to average. This table is sorted by longest span duration. +The table shows a sample list of events, their span duration, and the difference in duration compared to the average. This table is sorted by longest span duration. Sentry automatically finds a variety of samples to help you investigate performance problems. The chosen events will cover the entire selected time range, as well as a range of durations (both faster than, slower than, and near the average duration). You can get a sense of the performance characteristics by comparing different sample events. @@ -120,8 +120,8 @@ From the sample list, you can drill down to specific good, average, or bad examp By default, queries are sorted by **time spent**, which serves as a proxy for the relative impact of a given query. -Every database query takes some time to execute. When an application sends a query, it waits for the database to receive the query, parse it, execute it, and return the result. In Sentry, the total time taken from sending the query to receiving the full result is called the query's **duration**. The query's **time spent** is the sum of all its durations in a given time period. +Every database query takes some time to execute. When an application sends a query, it waits for the database to receive the query, parse it, execute it, and return the result. In Sentry, the total time taken from sending the query to receiving the full result is called the query's **duration**. The query's **time spent** is the sum of all its durations in a given period. -For example, an application might send a query like `SELECT * FROM users LIMIT 10` every time a user calls the `/users` endpoint. The query might take anywhere from 100ms to 200ms to run, and the endpoint is called anywhere from 10 times a minute to 100 times in a minute depending on the time of day. The query's time spent is the sum of all of its durations that occurred in a given time period. Put another way, the time spent is the product of the average duration and queries per minute. In a high-throughput application, a query's time spent might be measured in weeks or months. +For example, an application might send a query like `SELECT * FROM users LIMIT 10` every time a user calls the `/users` endpoint. The query might take anywhere from 100ms to 200ms to run, and the endpoint is called anywhere from 10 times a minute to 100 times in a minute depending on the time of day. The query's time spent is the sum of all of its durations that occurred in a given period. Put another way, the time spent is the product of the average duration and queries per minute. In a high-throughput application, a query's time spent might be measured in weeks or months. -Time spent is a useful way to measure a query's relative impact, compared to other queries in an application. For example, if one query's time spent is 7 days, and another is just 2 hours, the query with more time spent is probably more impactful to fix. Even a small improvement in duration would result in a meaningful overall improvement. Time spent can also be a strong signal that something is wrong. Queries that suddenly start taking up more time are often signal a problem. +Time spent is a useful way to measure a query's relative impact, compared to other queries in an application. For example, if one query's time spent is 7 days, and another is just 2 hours, the query with more time spent is probably more impactful to fix. Even a small improvement in duration would result in a meaningful overall improvement. Time spent can also be a strong signal that something is wrong. Queries that suddenly start taking up more time often signal a problem.