From f5327dd27b1fa08a8e5e7bef0f2a2d2252f903f7 Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Thu, 7 Dec 2023 16:29:17 -0500 Subject: [PATCH 01/15] Convert queries page to mdx --- src/docs/product/performance/{queries.md => queries.mdx} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/docs/product/performance/{queries.md => queries.mdx} (100%) diff --git a/src/docs/product/performance/queries.md b/src/docs/product/performance/queries.mdx similarity index 100% rename from src/docs/product/performance/queries.md rename to src/docs/product/performance/queries.mdx From 43d1f957df30f0ca353cf2c5072c290233179709 Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Thu, 7 Dec 2023 16:30:32 -0500 Subject: [PATCH 02/15] Remove stray breaks --- src/docs/product/performance/queries.mdx | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 0a5a3af6bed32..08bb906f889a2 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -17,8 +17,6 @@ The gif below demonstrates how to use performance monitoring for queries.
-
- ## Prerequisites and Limitations The queries widget and pages are only available for backend projects with performance monitoring enabled. @@ -67,8 +65,6 @@ The gif below provides a detailed walkthrough of the **Queries** page.
-
- ### Query Parameterization In some cases, Sentry processes queries and simplifies them to improve readability. For example: @@ -94,8 +90,6 @@ The gif below provides a detailed walkthrough of the **Query Summary** page.
-
- ## Sample List 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. @@ -114,8 +108,6 @@ The gif below explains how to navigate the sample list.
-
- ## What is Time Spent By default, queries are sorted by **time spent**, which serves as a proxy for the relative impact of a given query. From 2da64deee3dba32b16475028749ef07d1b5ca19d Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Thu, 7 Dec 2023 16:31:59 -0500 Subject: [PATCH 03/15] First draft --- src/docs/product/performance/queries.mdx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 08bb906f889a2..0a87fb2432864 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -80,7 +80,7 @@ You can see the full query by hovering on a truncated description, or clicking i To open a query's **Query Summary** page, click on the query from either the table in the "Most Time-Consuming Queries" widget on the **Performance** page or the table in the **Queries** page. -At the top of the page, queries per minute, average duration, and time spent are shown for the selected time range. The full query is shown below these metrics, followed by graphs for queries per minute and average duration. +At the top of the page, queries per minute, average duration, and time spent are shown for the selected time range. The full query is shown below these metrics, followed by graphs for queries per minute and average duration. The query's source in the code is also shown if it is available. At the bottom, you can find a list of endpoints the query is found in, sorted by the most time your application spent in that span. @@ -90,6 +90,14 @@ The gif below provides a detailed walkthrough of the **Query Summary** page.
+## Query Sources + +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 traceh and attaches the information to the query data. In order to reduce the SDK's performance impact on your application, Sentry only attaches query sources to queries that are slower than a configurable threshold. If query sources are often missing, you can reduce this threshold. + +You can see the query's source on the [event details page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall as well underneath the query description on the Query Summary page. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. + +Query Sources are currently supported in Sentry's Laravel and Django SDKs. + ## Sample List 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. From f6976991567fbbcb40e3264106b899fc506fc9aa Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 21:34:53 +0000 Subject: [PATCH 04/15] [getsentry/action-github-commit] Auto commit --- src/docs/product/performance/queries.mdx | 52 ++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 0a87fb2432864..d157aec854acc 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -15,7 +15,18 @@ Starting with the [**Queries** page](#queries-page), you get a high-level overvi The gif below demonstrates how to use performance monitoring for queries. -
+
+ +
## Prerequisites and Limitations @@ -63,7 +74,18 @@ To view more details, click on a query from the table to open its **Query Summar The gif below provides a detailed walkthrough of the **Queries** page. -
+
+ +
### Query Parameterization @@ -88,7 +110,18 @@ If you want to investigate a specific endpoint, click on it to open a sidebar sh The gif below provides a detailed walkthrough of the **Query Summary** page. -
+
+ +
## Query Sources @@ -114,7 +147,18 @@ From the sample list, you can drill down to specific good, average, or bad examp The gif below explains how to navigate the sample list. -
+
+ +
## What is Time Spent From d301358d35400e18b7830c065da3a70fa98f6151 Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:35:35 -0500 Subject: [PATCH 05/15] Improve style Co-authored-by: vivianyentran <20403606+vivianyentran@users.noreply.github.com> --- src/docs/product/performance/queries.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index d157aec854acc..30d331d18a8be 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -125,7 +125,7 @@ The gif below provides a detailed walkthrough of the **Query Summary** page. ## Query Sources -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 traceh and attaches the information to the query data. In order to reduce the SDK's performance impact on your application, Sentry only attaches query sources to queries that are slower than a configurable threshold. If query sources are often missing, you can reduce this threshold. +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. To reduce the performance impact, Sentry only attaches query sources to queries that are slower than a configurable threshold. If you want to see more query sources, you can reduce this threshold. You can see the query's source on the [event details page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall as well underneath the query description on the Query Summary page. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. From 3c2403090eb9b6e80554f61ac381d00bd5d6224b Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:36:09 -0500 Subject: [PATCH 06/15] Remove misplaced line Co-authored-by: vivianyentran <20403606+vivianyentran@users.noreply.github.com> --- src/docs/product/performance/queries.mdx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 30d331d18a8be..88e8d089d64e5 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -129,7 +129,6 @@ A query's source is the location in your application's code that triggered the q You can see the query's source on the [event details page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall as well underneath the query description on the Query Summary page. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. -Query Sources are currently supported in Sentry's Laravel and Django SDKs. ## Sample List From d02b95580f85804c5be1dfb950d49d2d861932ec Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:36:25 -0500 Subject: [PATCH 07/15] Move misplaced line Co-authored-by: vivianyentran <20403606+vivianyentran@users.noreply.github.com> --- src/docs/product/performance/queries.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 88e8d089d64e5..0e3b04401325a 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -125,6 +125,8 @@ The gif below provides a detailed walkthrough of the **Query Summary** page. ## Query Sources +Query Sources are currently supported in Sentry's Laravel and Django SDKs. + 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. To reduce the performance impact, Sentry only attaches query sources to queries that are slower than a configurable threshold. If you want to see more query sources, you can reduce this threshold. You can see the query's source on the [event details page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall as well underneath the query description on the Query Summary page. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. From 82cf41028ce5076c360514f5f16650a84bd6ae07 Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 22:37:41 +0000 Subject: [PATCH 08/15] [getsentry/action-github-commit] Auto commit --- src/docs/product/performance/queries.mdx | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 0e3b04401325a..e516f0a79026b 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -125,13 +125,10 @@ The gif below provides a detailed walkthrough of the **Query Summary** page. ## Query Sources -Query Sources are currently supported in Sentry's Laravel and Django SDKs. - 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. To reduce the performance impact, Sentry only attaches query sources to queries that are slower than a configurable threshold. If you want to see more query sources, you can reduce this threshold. You can see the query's source on the [event details page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall as well underneath the query description on the Query Summary page. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. - ## Sample List 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. From 956f18e20e13f52435ed94c2cb1439b85802542d Mon Sep 17 00:00:00 2001 From: "getsantry[bot]" <66042841+getsantry[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 22:37:56 +0000 Subject: [PATCH 09/15] [getsentry/action-github-commit] Auto commit --- src/docs/product/performance/queries.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index e516f0a79026b..ddf1930cae23d 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -125,6 +125,8 @@ The gif below provides a detailed walkthrough of the **Query Summary** page. ## Query Sources +Query Sources are currently supported in Sentry's Laravel and Django SDKs. + 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. To reduce the performance impact, Sentry only attaches query sources to queries that are slower than a configurable threshold. If you want to see more query sources, you can reduce this threshold. You can see the query's source on the [event details page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall as well underneath the query description on the Query Summary page. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. From b08e5f2d60e79f793f1a06c19941fa6af6164b27 Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:40:14 -0500 Subject: [PATCH 10/15] Clarify --- .vscode/settings.json | 4 ++-- src/docs/product/performance/queries.mdx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 125d56b7b188f..4a61a2bc48f06 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,10 +7,10 @@ "typescript.tsdk": "node_modules/typescript/lib", "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "explicit" }, "git.ignoreLimitWarning": true, "search.exclude": { - "**/src/wizard/**": true, + "**/src/wizard/**": true } } diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index ddf1930cae23d..39cd219a5e675 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -129,7 +129,7 @@ Query Sources are currently supported in Sentry's Laravel and Django SDKs. 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. To reduce the performance impact, Sentry only attaches query sources to queries that are slower than a configurable threshold. If you want to see more query sources, you can reduce this threshold. -You can see the query's source on the [event details page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall as well underneath the query description on the Query Summary page. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. +You can see the query's source underneath the query description on the **Query Summary** page, as well as on the [**Event Details** page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. ## Sample List From 98fdce9c0c2982843434480bb36bf4d333170334 Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:44:35 -0500 Subject: [PATCH 11/15] Add break --- src/docs/product/performance/queries.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 39cd219a5e675..3143db53ecfb2 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -87,6 +87,8 @@ The gif below provides a detailed walkthrough of the **Queries** page. > +
+ ### Query Parameterization In some cases, Sentry processes queries and simplifies them to improve readability. For example: From 45fef7458133ce3f7246be23a8c6d680e3f7e78b Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Mon, 11 Dec 2023 17:56:08 -0500 Subject: [PATCH 12/15] Add query source preview --- src/docs/product/performance/queries.mdx | 2 ++ .../performance/query-source-laravel.png | Bin 0 -> 22393 bytes 2 files changed, 2 insertions(+) create mode 100644 src/docs/product/performance/query-source-laravel.png diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 3143db53ecfb2..6776f7477c335 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -133,6 +133,8 @@ A query's source is the location in your application's code that triggered the q You can see the query's source underneath the query description on the **Query Summary** page, as well as on the [**Event Details** page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. +![Example of Query Source](./query-source-laravel.png) + ## Sample List 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. diff --git a/src/docs/product/performance/query-source-laravel.png b/src/docs/product/performance/query-source-laravel.png new file mode 100644 index 0000000000000000000000000000000000000000..24aa8a083020d5b0f74ebdfb2c9248b1d6484297 GIT binary patch literal 22393 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 literal 0 HcmV?d00001 From 2d032659eca44becc9e826af148b5b8b8971211a Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Tue, 12 Dec 2023 12:32:36 -0500 Subject: [PATCH 13/15] Reference the screenshot Co-authored-by: vivianyentran <20403606+vivianyentran@users.noreply.github.com> --- src/docs/product/performance/queries.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 6776f7477c335..09628a048b5ee 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -131,7 +131,7 @@ Query Sources are currently supported in Sentry's Laravel and Django SDKs. 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. To reduce the performance impact, Sentry only attaches query sources to queries that are slower than a configurable threshold. If you want to see more query sources, you can reduce this threshold. -You can see the query's source underneath the query description on the **Query Summary** page, as well as on the [**Event Details** page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. +You can see the query's source underneath the query description on the **Query Summary** page, as shown in the image below. You can also find the query's source on the [**Event Details** page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository. ![Example of Query Source](./query-source-laravel.png) From c6926d263adfc894c4480d678ad548c0755d2d2a Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Fri, 15 Dec 2023 10:42:43 -0500 Subject: [PATCH 14/15] Add better SDK instructions Co-authored-by: vivianyentran <20403606+vivianyentran@users.noreply.github.com> --- src/docs/product/performance/queries.mdx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index 09628a048b5ee..f4183007c6e2f 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -127,7 +127,11 @@ The gif below provides a detailed walkthrough of the **Query Summary** page. ## Query Sources -Query Sources are currently supported in Sentry's Laravel and Django SDKs. + + +Query Sources are currently supported in Sentry's [Laravel](/platforms/php/guides/laravel/configuration/laravel-options/) (enabled with the `SENTRY_TRACE_SQL_ORIGIN_ENABLED` option) and [Python](/platforms/python/configuration/options/#enable-db-query-source) (enabled with the `enable-db-query-source` option) SDKs. For Python, Sentry only attaches query sources to queries that are slower than a [configurable threshold](/platforms/python/configuration/options/#db-query-source-threshold-ms) to reduce the performance impact. + + 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. To reduce the performance impact, Sentry only attaches query sources to queries that are slower than a configurable threshold. If you want to see more query sources, you can reduce this threshold. From aea4fb0644e1b65204369539d9b69bfbd0791ddf Mon Sep 17 00:00:00 2001 From: George Gritsouk <989898+gggritso@users.noreply.github.com> Date: Fri, 15 Dec 2023 10:43:50 -0500 Subject: [PATCH 15/15] Remove redundant info Co-authored-by: vivianyentran <20403606+vivianyentran@users.noreply.github.com> --- src/docs/product/performance/queries.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/product/performance/queries.mdx b/src/docs/product/performance/queries.mdx index f4183007c6e2f..535d2334bfac4 100644 --- a/src/docs/product/performance/queries.mdx +++ b/src/docs/product/performance/queries.mdx @@ -133,7 +133,7 @@ Query Sources are currently supported in Sentry's [Laravel](/platforms/php/guide -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. To reduce the performance impact, Sentry only attaches query sources to queries that are slower than a configurable threshold. If you want to see more query sources, you can reduce this threshold. +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. You can see the query's source underneath the query description on the **Query Summary** page, as shown in the image below. You can also find the query's source on the [**Event Details** page](/product/sentry-basics/concepts/tracing/event-detail/) next to other span properties in the span waterfall. If you have a [source code management integration](/product/integrations/source-code-mgmt/) enabled, Sentry will also show a link to open the query's source in the relevant repository.