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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