From 392894956ae93de36bb26471247008508021cdd5 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Tue, 18 Jul 2023 10:24:45 -0700 Subject: [PATCH 01/34] Checkpoint --- src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs index a9daffed64..74c163760a 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs @@ -174,6 +174,9 @@ private static void InitializeRequestHandlersAndServices(ServiceHost serviceHost SqlProjectsService.Instance.InitializeService(serviceHost); serviceProvider.RegisterSingleService(SqlProjectsService.Instance); + QueryStoreService.Instance.InitializeService(serviceHost); + serviceProvider.RegisterSingleService(QueryStoreService.Instance); + serviceHost.InitializeRequestHandlers(); } From 51d8d821e6ce9a4ec67199b368f7af68aff115f4 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Tue, 18 Jul 2023 10:24:49 -0700 Subject: [PATCH 02/34] Checkpoint --- Packages.props | 1 + ...r.Management.QueryStoreModel.163.3.2.nupkg | Bin 0 -> 145386 bytes .../Microsoft.SqlTools.ServiceLayer.csproj | 4 ++ .../QueryStore/QueryStoreService.cs | 58 ++++++++++++++++++ 4 files changed, 63 insertions(+) create mode 100644 bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.3.2.nupkg create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs diff --git a/Packages.props b/Packages.props index 2ebf51b9eb..38357c1020 100644 --- a/Packages.props +++ b/Packages.props @@ -29,6 +29,7 @@ + diff --git a/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.3.2.nupkg b/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.3.2.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..639c50e7ee87b8e79171ee4ce8de8cb7d9b68403 GIT binary patch literal 145386 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 literal 0 HcmV?d00001 diff --git a/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj b/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj index 7f414b4035..ca3f70f92e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj +++ b/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj @@ -45,6 +45,7 @@ + @@ -80,4 +81,7 @@ + + + diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs new file mode 100644 index 0000000000..3110f72246 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using System; +using System.Collections.Concurrent; +using System.Threading.Tasks; +using Microsoft.SqlServer.Dac.Projects; +using Microsoft.SqlTools.Hosting.Protocol; +using Microsoft.SqlTools.ServiceLayer.Hosting; +using Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts; +using Microsoft.SqlTools.ServiceLayer.Utility; + +namespace Microsoft.SqlTools.ServiceLayer.SqlProjects +{ + /// + /// Main class for SqlProjects service + /// + public sealed class QueryStoreService : BaseService + { + private static readonly Lazy instance = new Lazy(() => new QueryStoreService()); + + /// + /// Gets the singleton instance object + /// + public static QueryStoreService Instance => instance.Value; + + private Lazy> projects = new Lazy>(() => new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase)); + + /// + /// that maps Project URI to Project + /// + public ConcurrentDictionary Projects => projects.Value; + + /// + /// Initializes the service instance + /// + /// + public void InitializeService(ServiceHost serviceHost) + { + serviceHost.SetRequestHandler(OpenSqlProjectRequest.Type, HandleOpenSqlProjectRequest, isParallelProcessingSupported: true); + } + + #region Handlers + + #region Project-level functions + + internal async Task HandleOpenSqlProjectRequest(SqlProjectParams requestParams, RequestContext requestContext) + { + await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri), requestContext); + } + + #endregion + + #endregion + } +} From d057cdf158358f0655b8e2c82fae615a99ad4868 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Wed, 19 Jul 2023 15:21:09 -0700 Subject: [PATCH 03/34] Checkpoint --- .../HostLoader.cs | 1 + .../Microsoft.SqlTools.ServiceLayer.csproj | 2 +- .../Contracts/GetForcedPlanQueriesReport.cs | 34 +++++++++++++++++++ .../GetHighVariationQueriesReport.cs | 34 +++++++++++++++++++ .../QueryStore/QueryStoreService.cs | 8 ++--- 5 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs diff --git a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs index 74c163760a..88f6221ef1 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/HostLoader.cs @@ -32,6 +32,7 @@ using Microsoft.SqlTools.ServiceLayer.ObjectManagement; using Microsoft.SqlTools.ServiceLayer.Profiler; using Microsoft.SqlTools.ServiceLayer.QueryExecution; +using Microsoft.SqlTools.ServiceLayer.QueryStore; using Microsoft.SqlTools.ServiceLayer.SchemaCompare; using Microsoft.SqlTools.ServiceLayer.Scripting; using Microsoft.SqlTools.ServiceLayer.ServerConfigurations; diff --git a/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj b/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj index ca3f70f92e..f90210d073 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj +++ b/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj @@ -45,7 +45,7 @@ - + diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs new file mode 100644 index 0000000000..42815fa54d --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -0,0 +1,34 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; +using Microsoft.SqlTools.ServiceLayer.Utility; + +#nullable disable + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts +{ + public class GetForcedPlanQueriesReportParams + { + + } + + /// + /// Gets the report for a Forced Plan Queries summary + /// + public class GetForcedPlanQueriesReportRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getForcedPlanQueriesReport"); + } + + /// + /// Result containing the report for a Forced Plan Queries summary + /// + public class GetForcedPlanQueriesReportResult : ResultStatus + { + + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs new file mode 100644 index 0000000000..a42393ce4b --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -0,0 +1,34 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; +using Microsoft.SqlTools.ServiceLayer.Utility; + +#nullable disable + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts +{ + public class GetHighVariationQueriesReportParams + { + + } + + /// + /// Gets the report for a Forced Plan Queries summary + /// + public class GetHighVariationQueriesReportRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getHighVariationQueriesReport"); + } + + /// + /// Result containing the report for a Forced Plan Queries summary + /// + public class GetHighVariationQueriesReportResult : ResultStatus + { + + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 3110f72246..972f974154 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -12,7 +12,7 @@ using Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts; using Microsoft.SqlTools.ServiceLayer.Utility; -namespace Microsoft.SqlTools.ServiceLayer.SqlProjects +namespace Microsoft.SqlTools.ServiceLayer.QueryStore { /// /// Main class for SqlProjects service @@ -39,16 +39,16 @@ public sealed class QueryStoreService : BaseService /// public void InitializeService(ServiceHost serviceHost) { - serviceHost.SetRequestHandler(OpenSqlProjectRequest.Type, HandleOpenSqlProjectRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetForcedPlanQueriesReportRequest.Type, HandleGetForcedPlanQueriesReportRequest, isParallelProcessingSupported: true); } #region Handlers #region Project-level functions - internal async Task HandleOpenSqlProjectRequest(SqlProjectParams requestParams, RequestContext requestContext) + internal async Task HandleGetForcedPlanQueriesReportRequest(GetForcedPlanQueriesReportParams requestParams, RequestContext requestContext) { - await RunWithErrorHandling(() => GetProject(requestParams.ProjectUri), requestContext); + await Task.Delay(200); } #endregion From 33419c3f3d085b89b0ac7c9d90c0a852c484a330 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Wed, 19 Jul 2023 15:33:36 -0700 Subject: [PATCH 04/34] checkpoint --- .../GetOverallResourceConsumptionReport.cs | 34 +++++++++++++++++++ .../Contracts/GetRegressedQueriesReport.cs | 34 +++++++++++++++++++ .../GetTopResourceConsumersReport.cs | 34 +++++++++++++++++++ .../QueryStore/QueryStoreService.cs | 33 +++++++++++++++--- 4 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs new file mode 100644 index 0000000000..5bde12f385 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs @@ -0,0 +1,34 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; +using Microsoft.SqlTools.ServiceLayer.Utility; + +#nullable disable + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts +{ + public class GetOverallResourceConsumptionReportParams + { + + } + + /// + /// Gets the report for a Forced Plan Queries summary + /// + public class GetOverallResourceConsumptionReportRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getOverallResourceConsumptionReport"); + } + + /// + /// Result containing the report for a Forced Plan Queries summary + /// + public class GetOverallResourceConsumptionReportResult : ResultStatus + { + + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs new file mode 100644 index 0000000000..ed86d5b7a4 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -0,0 +1,34 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; +using Microsoft.SqlTools.ServiceLayer.Utility; + +#nullable disable + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts +{ + public class GetRegressedQueriesReportParams + { + + } + + /// + /// Gets the report for a Forced Plan Queries summary + /// + public class GetRegressedQueriesReportRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getRegressedQueriesReport"); + } + + /// + /// Result containing the report for a Forced Plan Queries summary + /// + public class GetRegressedQueriesReportResult : ResultStatus + { + + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs new file mode 100644 index 0000000000..9358ed84ea --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -0,0 +1,34 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; +using Microsoft.SqlTools.ServiceLayer.Utility; + +#nullable disable + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts +{ + public class GetTopResourceConsumersReportParams + { + + } + + /// + /// Gets the report for a Forced Plan Queries summary + /// + public class GetTopResourceConsumersReportRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getTopResourceConsumersReport"); + } + + /// + /// Result containing the report for a Forced Plan Queries summary + /// + public class GetTopResourceConsumersReportResult : ResultStatus + { + + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 972f974154..80b20e5704 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -40,18 +40,43 @@ public sealed class QueryStoreService : BaseService public void InitializeService(ServiceHost serviceHost) { serviceHost.SetRequestHandler(GetForcedPlanQueriesReportRequest.Type, HandleGetForcedPlanQueriesReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetHighVariationQueriesReportRequest.Type, HandleGetHighVariationQueriesReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetOverallResourceConsumptionReportRequest.Type, HandleGetOverallResourceConsumptionReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetRegressedQueriesReportRequest.Type, HandleGetRegressedQueriesReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetTopResourceConsumersReportRequest.Type, HandleGetTopResourceConsumersReportRequest, isParallelProcessingSupported: true); } #region Handlers - #region Project-level functions - internal async Task HandleGetForcedPlanQueriesReportRequest(GetForcedPlanQueriesReportParams requestParams, RequestContext requestContext) { - await Task.Delay(200); + await Task.Delay(0); + throw new NotImplementedException(); } - #endregion + internal async Task HandleGetHighVariationQueriesReportRequest(GetHighVariationQueriesReportParams requestParams, RequestContext requestContext) + { + await Task.Delay(0); + throw new NotImplementedException(); + } + + internal async Task HandleGetOverallResourceConsumptionReportRequest(GetOverallResourceConsumptionReportParams requestParams, RequestContext requestContext) + { + await Task.Delay(0); + throw new NotImplementedException(); + } + + internal async Task HandleGetRegressedQueriesReportRequest(GetRegressedQueriesReportParams requestParams, RequestContext requestContext) + { + await Task.Delay(0); + throw new NotImplementedException(); + } + + internal async Task HandleGetTopResourceConsumersReportRequest(GetTopResourceConsumersReportParams requestParams, RequestContext requestContext) + { + await Task.Delay(0); + throw new NotImplementedException(); + } #endregion } From 99e65e10a916d232d99f2cf20ca3c01336cb72c2 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Thu, 20 Jul 2023 15:01:20 -0700 Subject: [PATCH 05/34] Hooking in calls to QueryExecutionService --- .../Microsoft.SqlTools.ServiceLayer.csproj | 3 - .../Contracts/GetForcedPlanQueriesReport.cs | 9 +- .../Contracts/QueryStoreReportParams.cs | 16 +++ .../QueryStore/QueryStoreService.cs | 124 +++++++++++++++++- 4 files changed, 142 insertions(+), 10 deletions(-) create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs diff --git a/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj b/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj index f90210d073..5f17f8e2c0 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj +++ b/src/Microsoft.SqlTools.ServiceLayer/Microsoft.SqlTools.ServiceLayer.csproj @@ -81,7 +81,4 @@ - - - diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index 42815fa54d..f8ba10c588 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -4,15 +4,16 @@ // using Microsoft.SqlTools.Hosting.Protocol.Contracts; +using Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts.ExecuteRequests; using Microsoft.SqlTools.ServiceLayer.Utility; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetForcedPlanQueriesReportParams + public class GetForcedPlanQueriesReportParams : QueryStoreReportParams { - + } /// @@ -20,8 +21,8 @@ public class GetForcedPlanQueriesReportParams /// public class GetForcedPlanQueriesReportRequest { - public static readonly RequestType Type - = RequestType.Create("queryStore/getForcedPlanQueriesReport"); + public static readonly RequestType Type + = RequestType.Create("queryStore/getForcedPlanQueriesReport"); } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs new file mode 100644 index 0000000000..9b753484d8 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -0,0 +1,16 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +#nullable disable + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts +{ + public class QueryStoreReportParams + { + public string ConnectionOwnerUri; + public string OrderByColumnId; + public bool Descending; + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 80b20e5704..58cbc77c75 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -5,10 +5,18 @@ using System; using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Diagnostics; using System.Threading.Tasks; using Microsoft.SqlServer.Dac.Projects; +using Microsoft.SqlServer.Management.QueryStoreModel.Common; +using Microsoft.SqlServer.Management.QueryStoreModel.ForcedPlanQueries; using Microsoft.SqlTools.Hosting.Protocol; +using Microsoft.SqlTools.ServiceLayer.Connection; +using Microsoft.SqlTools.ServiceLayer.Connection.Contracts; using Microsoft.SqlTools.ServiceLayer.Hosting; +using Microsoft.SqlTools.ServiceLayer.QueryExecution; +using Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts.ExecuteRequests; using Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts; using Microsoft.SqlTools.ServiceLayer.Utility; @@ -33,6 +41,21 @@ public sealed class QueryStoreService : BaseService /// public ConcurrentDictionary Projects => projects.Value; + /// + /// Instance of the connection service, used to get the connection info for a given owner URI + /// + private ConnectionService ConnectionService { get; } + + private QueryStoreService() + { + ConnectionService = ConnectionService.Instance; + } + + internal QueryStoreService(ConnectionService connService) + { + ConnectionService = connService; + } + /// /// Initializes the service instance /// @@ -48,10 +71,16 @@ public void InitializeService(ServiceHost serviceHost) #region Handlers - internal async Task HandleGetForcedPlanQueriesReportRequest(GetForcedPlanQueriesReportParams requestParams, RequestContext requestContext) + internal async Task HandleGetForcedPlanQueriesReportRequest(GetForcedPlanQueriesReportParams requestParams, RequestContext requestContext) { - await Task.Delay(0); - throw new NotImplementedException(); + // Generate query + ForcedPlanQueriesConfiguration config = new(); + + ColumnInfo orderByColumn = GetOrderByColumn(requestParams); + + string query = ForcedPlanQueriesQueryGenerator.ForcedPlanQueriesSummary(config, orderByColumn, descending: true, out IList _ /* discarded because SimpleExecuteResult already extracts this data */); + + await ExecuteQueryHelper(query, requestParams.ConnectionOwnerUri, requestContext); } internal async Task HandleGetHighVariationQueriesReportRequest(GetHighVariationQueriesReportParams requestParams, RequestContext requestContext) @@ -79,5 +108,94 @@ internal async Task HandleGetTopResourceConsumersReportRequest(GetTopResourceCon } #endregion + + #region Helpers + + private async Task ExecuteQueryHelper(string query, string connectionOwnerUri, RequestContext requestContext) + { + SimpleExecuteParams remappedParams = new() + { + OwnerUri = connectionOwnerUri, + QueryString = query + }; + + await QueryExecutionService.Instance.HandleSimpleExecuteRequest(remappedParams, requestContext); + } + + // TODO: possibly push down to QueryStoreModel + private ColumnInfo GetOrderByColumn(QueryStoreReportParams requestParams) + { + switch (requestParams.OrderByColumnId) + { + case "query_id": + return new QueryIdColumnInfo(); + case "object_id": + return new ObjectIdColumnInfo(); + case "object_name": + return new ObjectNameColumnInfo(); + case "query_sql_text": + return new QueryTextColumnInfo(); + case "plan_id": + return new PlanIdColumnInfo(); + case "execution_type": + return new ExecutionTypeColumnInfo(); + case "wait_category_desc": + return new WaitCategoryDescColumnInfo(); + case "wait_category": + return new WaitCategoryIdColumnInfo(); + default: + Debug.Fail($"Unhandled OrderByColumnId: '{requestParams.OrderByColumnId}'"); + return new QueryIdColumnInfo(); // TODO: is this the correct choice? + } + } + + private async Task ExecuteQueryHelperCustom(string query, string connectionOwnerUri, RequestContext requestContext) where T : ResultStatus + { + // set up query params + string queryOwnerUri = Guid.NewGuid().ToString(); // generate guid as the owner uri to make sure every query is unique + + ExecuteStringParams executeStringParams = new ExecuteStringParams + { + Query = query, + OwnerUri = queryOwnerUri + }; + + // set up connection + + if (!ConnectionService.TryFindConnection(connectionOwnerUri, out ConnectionInfo originConnectionInfo)) + { + await requestContext.SendError(SR.QueryServiceQueryInvalidOwnerUri); + return; + } + + ConnectParams connectParams = new ConnectParams + { + OwnerUri = queryOwnerUri, + Connection = originConnectionInfo.ConnectionDetails, + Type = ConnectionType.Default + }; + + await ConnectionService.Connect(connectParams); + ConnectionService.TryFindConnection(queryOwnerUri, out ConnectionInfo queryConnectionInfo); + + // set up handlers + ResultOnlyContext resultContext = new ResultOnlyContext(requestContext); + + Func HandleQueryCreationFailure = message => requestContext.SendError(message); + + + // execute query + + // return await QueryExecutionService.Instance.InterServiceExecuteQuery( + //executeStringParams, + //originConnectionInfo, + //resultContext, + //queryCreateSuccessFunc: null, + //HandleQueryCreationFailure, + //querySuccessFunction, + //queryFailureFunction); + } + + #endregion } } From f0a26bc6f1a1b6fe3356b5c771afb42555af4cb4 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 21 Jul 2023 19:32:59 -0700 Subject: [PATCH 06/34] adding cases --- .../QueryStore/QueryStoreService.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 58cbc77c75..1c7a834e8d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -136,13 +136,31 @@ private ColumnInfo GetOrderByColumn(QueryStoreReportParams requestParams) case "query_sql_text": return new QueryTextColumnInfo(); case "plan_id": - return new PlanIdColumnInfo(); + return new PlanIdColumnInfo(); // doubled-up columnId with ForcedPlanFailureCountColumnInfo, may need extra logic here case "execution_type": return new ExecutionTypeColumnInfo(); case "wait_category_desc": return new WaitCategoryDescColumnInfo(); case "wait_category": return new WaitCategoryIdColumnInfo(); + case "num_plans": + return new NumPlansColumnInfo(); + case "force_failure_count": + return new ForcedPlanFailureCountColumnInfo(); + case "last_force_failure_reason_desc": + return new ForcedPlanFailureDescpColumnInfo(); + case "last_compile_start_time": + return new LastCompileStartTimeColumnInfo(); + case "last_execution_time": + return new LastForcedPlanExecTimeColumnInfo(); // also LastQueryExecTimeColumnInfo, LastExecTimeColumnInfo + case "is_forced_plan": + return new PlanForcedColumnInfo(); + case "first_execution_time": + return new FirstExecTimeColumnInfo(); + case "bucket_start": + return new BucketStartTimeColumnInfo(); + case "bucket_end": + return new BucketEndTimeColumnInfo(); default: Debug.Fail($"Unhandled OrderByColumnId: '{requestParams.OrderByColumnId}'"); return new QueryIdColumnInfo(); // TODO: is this the correct choice? From ee5599b69653b71fbdc5edc1e836c1d7a9479371 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Tue, 1 Aug 2023 17:57:23 -0700 Subject: [PATCH 07/34] Fleshing out report handlers --- Packages.props | 2 +- ....Management.QueryStoreModel.163.16.2.nupkg | Bin 0 -> 146271 bytes ...r.Management.QueryStoreModel.163.3.2.nupkg | Bin 145386 -> 0 bytes .../Contracts/GetForcedPlanQueriesReport.cs | 14 +- .../GetHighVariationQueriesReport.cs | 25 +- .../GetOverallResourceConsumptionReport.cs | 15 +- .../Contracts/GetRegressedQueriesReport.cs | 18 +- .../GetTopResourceConsumersReport.cs | 25 +- .../Contracts/GetTrackedQueryReport.cs | 25 ++ .../Contracts/QueryStoreReportParams.cs | 7 + .../QueryStore/QueryStoreService.cs | 352 ++++++++++++------ 11 files changed, 317 insertions(+), 166 deletions(-) create mode 100644 bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.16.2.nupkg delete mode 100644 bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.3.2.nupkg create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs diff --git a/Packages.props b/Packages.props index 38357c1020..cc1a616ce6 100644 --- a/Packages.props +++ b/Packages.props @@ -29,7 +29,7 @@ - + diff --git a/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.16.2.nupkg b/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.16.2.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..dd8994ef78fbab921b12b873e0abde83b29e15e2 GIT binary patch literal 146271 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 literal 0 HcmV?d00001 diff --git a/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.3.2.nupkg b/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.3.2.nupkg deleted file mode 100644 index 639c50e7ee87b8e79171ee4ce8de8cb7d9b68403..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145386 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 diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index f8ba10c588..bbe20e0d58 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -4,8 +4,6 @@ // using Microsoft.SqlTools.Hosting.Protocol.Contracts; -using Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts.ExecuteRequests; -using Microsoft.SqlTools.ServiceLayer.Utility; #nullable disable @@ -21,15 +19,7 @@ public class GetForcedPlanQueriesReportParams : QueryStoreReportParams /// public class GetForcedPlanQueriesReportRequest { - public static readonly RequestType Type - = RequestType.Create("queryStore/getForcedPlanQueriesReport"); - } - - /// - /// Result containing the report for a Forced Plan Queries summary - /// - public class GetForcedPlanQueriesReportResult : ResultStatus - { - + public static readonly RequestType Type + = RequestType.Create("queryStore/getForcedPlanQueriesReport"); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index a42393ce4b..9ef5eb3563 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -4,31 +4,40 @@ // using Microsoft.SqlTools.Hosting.Protocol.Contracts; -using Microsoft.SqlTools.ServiceLayer.Utility; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetHighVariationQueriesReportParams + public class GetHighVariationQueriesReportParams : QueryStoreReportParams { } /// - /// Gets the report for a Forced Plan Queries summary + /// Gets the High Variation Queries summary /// - public class GetHighVariationQueriesReportRequest + public class GetHighVariationQueriesSummaryRequest { - public static readonly RequestType Type - = RequestType.Create("queryStore/getHighVariationQueriesReport"); + public static readonly RequestType Type + = RequestType.Create("queryStore/getHighVariationQueriesSummary"); } /// - /// Result containing the report for a Forced Plan Queries summary + /// Gets the High Variation Queries detailed summary /// - public class GetHighVariationQueriesReportResult : ResultStatus + public class GetHighVariationQueriesDetailedSummaryRequest { + public static readonly RequestType Type + = RequestType.Create("queryStore/getHighVariationQueriesDetailedSummary"); + } + /// + /// Gets the High Variation Queries detailed summary with wait stats + /// + public class GetHighVariationQueriesDetailedSummaryWithWaitStatsRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getHighVariationQueriesDetailedSummaryWithWaitStats"); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs index 5bde12f385..13d30fe06f 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs @@ -4,13 +4,12 @@ // using Microsoft.SqlTools.Hosting.Protocol.Contracts; -using Microsoft.SqlTools.ServiceLayer.Utility; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetOverallResourceConsumptionReportParams + public class GetOverallResourceConsumptionReportParams : QueryStoreReportParams { } @@ -20,15 +19,7 @@ public class GetOverallResourceConsumptionReportParams /// public class GetOverallResourceConsumptionReportRequest { - public static readonly RequestType Type - = RequestType.Create("queryStore/getOverallResourceConsumptionReport"); - } - - /// - /// Result containing the report for a Forced Plan Queries summary - /// - public class GetOverallResourceConsumptionReportResult : ResultStatus - { - + public static readonly RequestType Type + = RequestType.Create("queryStore/getOverallResourceConsumptionReport"); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index ed86d5b7a4..e6aa6e8a9d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -4,31 +4,31 @@ // using Microsoft.SqlTools.Hosting.Protocol.Contracts; -using Microsoft.SqlTools.ServiceLayer.Utility; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetRegressedQueriesReportParams + public class GetRegressedQueriesReportParams : QueryStoreReportParams { } /// - /// Gets the report for a Forced Plan Queries summary + /// Gets the Regressed Queries summary /// - public class GetRegressedQueriesReportRequest + public class GetRegressedQueriesSummaryRequest { - public static readonly RequestType Type - = RequestType.Create("queryStore/getRegressedQueriesReport"); + public static readonly RequestType Type + = RequestType.Create("queryStore/getRegressedQueriesSummary"); } /// - /// Result containing the report for a Forced Plan Queries summary + /// Gets the Regressed Queries summary /// - public class GetRegressedQueriesReportResult : ResultStatus + public class GetRegressedQueriesDetailedSummaryRequest { - + public static readonly RequestType Type + = RequestType.Create("queryStore/getRegressedQueriesDetailedSummary"); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index 9358ed84ea..f39cbf0d90 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -4,31 +4,40 @@ // using Microsoft.SqlTools.Hosting.Protocol.Contracts; -using Microsoft.SqlTools.ServiceLayer.Utility; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetTopResourceConsumersReportParams + public class GetTopResourceConsumersReportParams : QueryStoreReportParams { } /// - /// Gets the report for a Forced Plan Queries summary + /// Gets a Forced Plan Queries summary /// - public class GetTopResourceConsumersReportRequest + public class GetTopResourceConsumersSummaryRequest { - public static readonly RequestType Type - = RequestType.Create("queryStore/getTopResourceConsumersReport"); + public static readonly RequestType Type + = RequestType.Create("queryStore/getTopResourceConsumersSummary"); } /// - /// Result containing the report for a Forced Plan Queries summary + /// Gets a Forced Plan Queries detailed summary /// - public class GetTopResourceConsumersReportResult : ResultStatus + public class GetTopResourceConsumersDetailedSummaryRequest { + public static readonly RequestType Type + = RequestType.Create("queryStore/getTopResourceConsumersDetailedSummary"); + } + /// + /// Gets a Forced Plan Queries detailed summary with wait stats + /// + public class GetTopResourceConsumersDetailedSummaryWithWaitStatsRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getTopResourceConsumersDetailedSummaryWithWaitStats"); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs new file mode 100644 index 0000000000..2523aa5d16 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs @@ -0,0 +1,25 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; + +#nullable disable + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts +{ + public class GetTrackedQueriesReportParams : QueryStoreReportParams + { + + } + + /// + /// Gets the report for a Forced Plan Queries summary + /// + public class GetTrackedQueriesReportRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getTrackedQueriesReport"); + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs index 9b753484d8..371e1fbb6e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -5,6 +5,8 @@ #nullable disable +using Microsoft.SqlTools.ServiceLayer.Utility; + namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class QueryStoreReportParams @@ -13,4 +15,9 @@ public class QueryStoreReportParams public string OrderByColumnId; public bool Descending; } + + public class QueryStoreQueryResult : ResultStatus + { + public string Query; + } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 1c7a834e8d..be7eebdd63 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -4,19 +4,20 @@ // using System; -using System.Collections.Concurrent; using System.Collections.Generic; -using System.Diagnostics; +using System.Linq; using System.Threading.Tasks; -using Microsoft.SqlServer.Dac.Projects; +using Microsoft.Data.SqlClient; using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.ForcedPlanQueries; +using Microsoft.SqlServer.Management.QueryStoreModel.HighVariation; +using Microsoft.SqlServer.Management.QueryStoreModel.OverallResourceConsumption; +using Microsoft.SqlServer.Management.QueryStoreModel.RegressedQueries; +using Microsoft.SqlServer.Management.QueryStoreModel.TopResourceConsumers; +using Microsoft.SqlServer.Management.QueryStoreModel.TrackedQueries; using Microsoft.SqlTools.Hosting.Protocol; using Microsoft.SqlTools.ServiceLayer.Connection; -using Microsoft.SqlTools.ServiceLayer.Connection.Contracts; using Microsoft.SqlTools.ServiceLayer.Hosting; -using Microsoft.SqlTools.ServiceLayer.QueryExecution; -using Microsoft.SqlTools.ServiceLayer.QueryExecution.Contracts.ExecuteRequests; using Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts; using Microsoft.SqlTools.ServiceLayer.Utility; @@ -34,13 +35,6 @@ public sealed class QueryStoreService : BaseService /// public static QueryStoreService Instance => instance.Value; - private Lazy> projects = new Lazy>(() => new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase)); - - /// - /// that maps Project URI to Project - /// - public ConcurrentDictionary Projects => projects.Value; - /// /// Instance of the connection service, used to get the connection info for a given owner URI /// @@ -62,156 +56,282 @@ internal QueryStoreService(ConnectionService connService) /// public void InitializeService(ServiceHost serviceHost) { + // Top Resource Consumers report + serviceHost.SetRequestHandler(GetTopResourceConsumersSummaryRequest.Type, HandleGetTopResourceConsumersSummaryReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetTopResourceConsumersDetailedSummaryRequest.Type, HandleGetTopResourceConsumersDetailedSummaryReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetTopResourceConsumersDetailedSummaryWithWaitStatsRequest.Type, HandleGetTopResourceConsumersDetailedSummaryWithWaitStatsReportRequest, isParallelProcessingSupported: true); + + // Forced Plan Queries report serviceHost.SetRequestHandler(GetForcedPlanQueriesReportRequest.Type, HandleGetForcedPlanQueriesReportRequest, isParallelProcessingSupported: true); - serviceHost.SetRequestHandler(GetHighVariationQueriesReportRequest.Type, HandleGetHighVariationQueriesReportRequest, isParallelProcessingSupported: true); + + // Tracked Queries report + serviceHost.SetRequestHandler(GetTrackedQueriesReportRequest.Type, HandleGetTrackedQueriesReportRequest, isParallelProcessingSupported: true); + + // High Variation Queries report + serviceHost.SetRequestHandler(GetHighVariationQueriesSummaryRequest.Type, HandleGetHighVariationQueriesSummaryReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetHighVariationQueriesDetailedSummaryRequest.Type, HandleGetHighVariationQueriesDetailedSummaryReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetHighVariationQueriesDetailedSummaryWithWaitStatsRequest.Type, HandleGetHighVariationQueriesDetailedSummaryWithWaitStatsReportRequest, isParallelProcessingSupported: true); + + // Overall Resource Consumption report serviceHost.SetRequestHandler(GetOverallResourceConsumptionReportRequest.Type, HandleGetOverallResourceConsumptionReportRequest, isParallelProcessingSupported: true); - serviceHost.SetRequestHandler(GetRegressedQueriesReportRequest.Type, HandleGetRegressedQueriesReportRequest, isParallelProcessingSupported: true); - serviceHost.SetRequestHandler(GetTopResourceConsumersReportRequest.Type, HandleGetTopResourceConsumersReportRequest, isParallelProcessingSupported: true); + + // Regressed Queries report + serviceHost.SetRequestHandler(GetRegressedQueriesSummaryRequest.Type, HandleGetRegressedQueriesSummaryReportRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetRegressedQueriesDetailedSummaryRequest.Type, HandleGetRegressedQueriesDetailedSummaryReportRequest, isParallelProcessingSupported: true); } #region Handlers - internal async Task HandleGetForcedPlanQueriesReportRequest(GetForcedPlanQueriesReportParams requestParams, RequestContext requestContext) - { - // Generate query - ForcedPlanQueriesConfiguration config = new(); - - ColumnInfo orderByColumn = GetOrderByColumn(requestParams); + /* + * General process is to: + * 1. Convert the ADS config to the Query Store Model config format + * 2. Call the unordered query generator to get the list of columns + * 3. Select the intended ColumnInfo for sorting + * 4. Call the ordered query generator to get the actual query + * 5. Prepend any necessary TSQL parameters to the generated query + * 6. Return the query text to ADS for execution + */ - string query = ForcedPlanQueriesQueryGenerator.ForcedPlanQueriesSummary(config, orderByColumn, descending: true, out IList _ /* discarded because SimpleExecuteResult already extracts this data */); + #region Top Resource Consumers report - await ExecuteQueryHelper(query, requestParams.ConnectionOwnerUri, requestContext); + internal async Task HandleGetTopResourceConsumersSummaryReportRequest(GetTopResourceConsumersReportParams requestParams, RequestContext requestContext) + { + await RunWithErrorHandling(() => + { + TopResourceConsumersConfiguration config = new(); + TopResourceConsumersQueryGenerator.TopResourceConsumersSummary(config, out IList columns); + ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = TopResourceConsumersQueryGenerator.TopResourceConsumersSummary(config, orderByColumn, requestParams.Descending, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query, + }; + }, requestContext); } - internal async Task HandleGetHighVariationQueriesReportRequest(GetHighVariationQueriesReportParams requestParams, RequestContext requestContext) + internal async Task HandleGetTopResourceConsumersDetailedSummaryReportRequest(GetTopResourceConsumersReportParams requestParams, RequestContext requestContext) { - await Task.Delay(0); - throw new NotImplementedException(); + await RunWithErrorHandling(() => + { + TopResourceConsumersConfiguration config = new(); + TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummary(GetAvailableMetrics(requestParams), config, out IList columns); + ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummary(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); } - internal async Task HandleGetOverallResourceConsumptionReportRequest(GetOverallResourceConsumptionReportParams requestParams, RequestContext requestContext) + internal async Task HandleGetTopResourceConsumersDetailedSummaryWithWaitStatsReportRequest(GetTopResourceConsumersReportParams requestParams, RequestContext requestContext) { - await Task.Delay(0); - throw new NotImplementedException(); + await RunWithErrorHandling(() => + { + TopResourceConsumersConfiguration config = new(); + TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, out IList columns); + ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); } - internal async Task HandleGetRegressedQueriesReportRequest(GetRegressedQueriesReportParams requestParams, RequestContext requestContext) + #endregion + + #region Forced Plans report + + internal async Task HandleGetForcedPlanQueriesReportRequest(GetForcedPlanQueriesReportParams requestParams, RequestContext requestContext) { - await Task.Delay(0); - throw new NotImplementedException(); + await RunWithErrorHandling(() => + { + ForcedPlanQueriesConfiguration config = new(); + ForcedPlanQueriesQueryGenerator.ForcedPlanQueriesSummary(config, out IList columns); + ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = ForcedPlanQueriesQueryGenerator.ForcedPlanQueriesSummary(config, orderByColumn, requestParams.Descending, out IList _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); } - internal async Task HandleGetTopResourceConsumersReportRequest(GetTopResourceConsumersReportParams requestParams, RequestContext requestContext) + #endregion + + #region Tracked Queries report + + internal async Task HandleGetTrackedQueriesReportRequest(GetTrackedQueriesReportParams requestParams, RequestContext requestContext) { - await Task.Delay(0); - throw new NotImplementedException(); + await RunWithErrorHandling(() => + { + TrackedQueriesConfiguration config = new(); + string query = QueryIDSearchQueryGenerator.GetQuery(); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); } #endregion - #region Helpers + #region High Variation Queries report - private async Task ExecuteQueryHelper(string query, string connectionOwnerUri, RequestContext requestContext) + internal async Task HandleGetHighVariationQueriesSummaryReportRequest(GetHighVariationQueriesReportParams requestParams, RequestContext requestContext) { - SimpleExecuteParams remappedParams = new() + await RunWithErrorHandling(() => { - OwnerUri = connectionOwnerUri, - QueryString = query - }; - - await QueryExecutionService.Instance.HandleSimpleExecuteRequest(remappedParams, requestContext); + HighVariationConfiguration config = new(); + HighVariationQueryGenerator.HighVariationSummary(config, out IList columns); + ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = HighVariationQueryGenerator.HighVariationSummary(config, orderByColumn, requestParams.Descending, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); } - // TODO: possibly push down to QueryStoreModel - private ColumnInfo GetOrderByColumn(QueryStoreReportParams requestParams) + internal async Task HandleGetHighVariationQueriesDetailedSummaryReportRequest(GetHighVariationQueriesReportParams requestParams, RequestContext requestContext) { - switch (requestParams.OrderByColumnId) + await RunWithErrorHandling(() => { - case "query_id": - return new QueryIdColumnInfo(); - case "object_id": - return new ObjectIdColumnInfo(); - case "object_name": - return new ObjectNameColumnInfo(); - case "query_sql_text": - return new QueryTextColumnInfo(); - case "plan_id": - return new PlanIdColumnInfo(); // doubled-up columnId with ForcedPlanFailureCountColumnInfo, may need extra logic here - case "execution_type": - return new ExecutionTypeColumnInfo(); - case "wait_category_desc": - return new WaitCategoryDescColumnInfo(); - case "wait_category": - return new WaitCategoryIdColumnInfo(); - case "num_plans": - return new NumPlansColumnInfo(); - case "force_failure_count": - return new ForcedPlanFailureCountColumnInfo(); - case "last_force_failure_reason_desc": - return new ForcedPlanFailureDescpColumnInfo(); - case "last_compile_start_time": - return new LastCompileStartTimeColumnInfo(); - case "last_execution_time": - return new LastForcedPlanExecTimeColumnInfo(); // also LastQueryExecTimeColumnInfo, LastExecTimeColumnInfo - case "is_forced_plan": - return new PlanForcedColumnInfo(); - case "first_execution_time": - return new FirstExecTimeColumnInfo(); - case "bucket_start": - return new BucketStartTimeColumnInfo(); - case "bucket_end": - return new BucketEndTimeColumnInfo(); - default: - Debug.Fail($"Unhandled OrderByColumnId: '{requestParams.OrderByColumnId}'"); - return new QueryIdColumnInfo(); // TODO: is this the correct choice? - } + HighVariationConfiguration config = new(); + IList availableMetrics = GetAvailableMetrics(requestParams); + HighVariationQueryGenerator.HighVariationDetailedSummary(availableMetrics, config, out IList columns); + ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = HighVariationQueryGenerator.HighVariationDetailedSummary(availableMetrics, config, orderByColumn, requestParams.Descending, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); } - private async Task ExecuteQueryHelperCustom(string query, string connectionOwnerUri, RequestContext requestContext) where T : ResultStatus + internal async Task HandleGetHighVariationQueriesDetailedSummaryWithWaitStatsReportRequest(GetHighVariationQueriesReportParams requestParams, RequestContext requestContext) { - // set up query params - string queryOwnerUri = Guid.NewGuid().ToString(); // generate guid as the owner uri to make sure every query is unique + await RunWithErrorHandling(() => + { + HighVariationConfiguration config = new(); + IList availableMetrics = GetAvailableMetrics(requestParams); + HighVariationQueryGenerator.HighVariationDetailedSummaryWithWaitStats(availableMetrics, config, out IList columns); + ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = HighVariationQueryGenerator.HighVariationDetailedSummaryWithWaitStats(availableMetrics, config, orderByColumn, requestParams.Descending, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); + } - ExecuteStringParams executeStringParams = new ExecuteStringParams + #endregion + + #region Overall Resource Consumption report + + internal async Task HandleGetOverallResourceConsumptionReportRequest(GetOverallResourceConsumptionReportParams requestParams, RequestContext requestContext) + { + await RunWithErrorHandling(() => { - Query = query, - OwnerUri = queryOwnerUri - }; + OverallResourceConsumptionConfiguration config = new(); + string query = OverallResourceConsumptionQueryGenerator.GenerateQuery(GetAvailableMetrics(requestParams), config, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); + } + + #endregion - // set up connection + #region Regressed Queries report - if (!ConnectionService.TryFindConnection(connectionOwnerUri, out ConnectionInfo originConnectionInfo)) + internal async Task HandleGetRegressedQueriesSummaryReportRequest(GetRegressedQueriesReportParams requestParams, RequestContext requestContext) + { + await RunWithErrorHandling(() => { - await requestContext.SendError(SR.QueryServiceQueryInvalidOwnerUri); - return; - } + RegressedQueriesConfiguration config = new(); + string query = RegressedQueriesQueryGenerator.RegressedQuerySummary(config, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); + } - ConnectParams connectParams = new ConnectParams + internal async Task HandleGetRegressedQueriesDetailedSummaryReportRequest(GetRegressedQueriesReportParams requestParams, RequestContext requestContext) + { + await RunWithErrorHandling(() => { - OwnerUri = queryOwnerUri, - Connection = originConnectionInfo.ConnectionDetails, - Type = ConnectionType.Default - }; + RegressedQueriesConfiguration config = new(); + string query = RegressedQueriesQueryGenerator.RegressedQueryDetailedSummary(GetAvailableMetrics(requestParams), config, out _); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); + } - await ConnectionService.Connect(connectParams); - ConnectionService.TryFindConnection(queryOwnerUri, out ConnectionInfo queryConnectionInfo); + #endregion - // set up handlers - ResultOnlyContext resultContext = new ResultOnlyContext(requestContext); + #endregion - Func HandleQueryCreationFailure = message => requestContext.SendError(message); + #region Helpers + private ColumnInfo GetOrderByColumn(QueryStoreReportParams requestParams, IList columnInfoList) + { + return requestParams.OrderByColumnId != null ? columnInfoList.First(col => col.GetQueryColumnLabel() == requestParams.OrderByColumnId) : columnInfoList[0]; + } - // execute query + private IList GetAvailableMetrics(QueryStoreReportParams requestParams) + { + ConnectionService.TryFindConnection(requestParams.ConnectionOwnerUri, out ConnectionInfo connectionInfo); - // return await QueryExecutionService.Instance.InterServiceExecuteQuery( - //executeStringParams, - //originConnectionInfo, - //resultContext, - //queryCreateSuccessFunc: null, - //HandleQueryCreationFailure, - //querySuccessFunction, - //queryFailureFunction); + if (connectionInfo != null) + { + using (SqlConnection connection = ConnectionService.OpenSqlConnection(connectionInfo, "QueryStoreService available metrics")) + { + return QdsMetadataMapper.GetAvailableMetrics(connection); + } + } + else + { + throw new InvalidOperationException($"Unable to find connection for '{requestParams.ConnectionOwnerUri}'"); + } } #endregion From 3d2ccfcd86a32dbb0ba079304b9c928d8c08f566 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 11 Aug 2023 13:59:41 -0700 Subject: [PATCH 08/34] Adding parameter converters --- .../Contracts/GetForcedPlanQueriesReport.cs | 14 ++++- .../GetHighVariationQueriesReport.cs | 12 +++- .../GetOverallResourceConsumptionReport.cs | 15 ++++- .../Contracts/GetRegressedQueriesReport.cs | 17 +++++- .../GetTopResourceConsumersReport.cs | 12 +++- .../Contracts/GetTrackedQueryReport.cs | 6 +- .../Contracts/PlanSummaryReportParams.cs | 55 +++++++++++++++++++ .../Contracts/QueryStoreReportParams.cs | 30 +++++++++- .../QueryStore/QueryStoreService.cs | 29 +++++----- 9 files changed, 168 insertions(+), 22 deletions(-) create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index bbe20e0d58..809ccee2d7 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -3,15 +3,25 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // +using Microsoft.SqlServer.Management.QueryStoreModel.Common; +using Microsoft.SqlServer.Management.QueryStoreModel.ForcedPlanQueries; using Microsoft.SqlTools.Hosting.Protocol.Contracts; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetForcedPlanQueriesReportParams : QueryStoreReportParams + public class GetForcedPlanQueriesReportParams : QueryConfigurationParams { - + public TimeInterval TimeInterval; + + public override ForcedPlanQueriesConfiguration Convert() + { + ForcedPlanQueriesConfiguration config = base.Convert(); + config.TimeInterval = TimeInterval; + + return config; + } } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index 9ef5eb3563..9c302871a8 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -3,15 +3,25 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // +using Microsoft.SqlServer.Management.QueryStoreModel.Common; +using Microsoft.SqlServer.Management.QueryStoreModel.HighVariation; using Microsoft.SqlTools.Hosting.Protocol.Contracts; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetHighVariationQueriesReportParams : QueryStoreReportParams + public class GetHighVariationQueriesReportParams : QueryConfigurationParams { + public TimeInterval TimeInterval; + public override HighVariationConfiguration Convert() + { + HighVariationConfiguration config = base.Convert(); + config.TimeInterval = TimeInterval; + + return base.Convert(); + } } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs index 13d30fe06f..ecc1285383 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs @@ -3,15 +3,28 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // +using Microsoft.SqlServer.Management.QueryStoreModel.Common; +using Microsoft.SqlServer.Management.QueryStoreModel.OverallResourceConsumption; using Microsoft.SqlTools.Hosting.Protocol.Contracts; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetOverallResourceConsumptionReportParams : QueryStoreReportParams + public class GetOverallResourceConsumptionReportParams : QueryConfigurationParams { + TimeInterval SpecifiedTimeInterval; + BucketInterval SpecifiedBucketInterval; + public override OverallResourceConsumptionConfiguration Convert() + { + OverallResourceConsumptionConfiguration result = base.Convert(); + + result.SpecifiedTimeInterval = SpecifiedTimeInterval; + result.SelectedBucketInterval = SpecifiedBucketInterval; + + return result; + } } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index e6aa6e8a9d..638ccd3812 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -3,15 +3,30 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // +using Microsoft.SqlServer.Management.QueryStoreModel.Common; +using Microsoft.SqlServer.Management.QueryStoreModel.RegressedQueries; using Microsoft.SqlTools.Hosting.Protocol.Contracts; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetRegressedQueriesReportParams : QueryStoreReportParams + public class GetRegressedQueriesReportParams : QueryConfigurationParams { + TimeInterval TimeIntervalRecent; + TimeInterval TimeIntervalHistory; + long MinExecutionCount; + public override RegressedQueriesConfiguration Convert() + { + RegressedQueriesConfiguration result = base.Convert(); + + result.TimeIntervalRecent = TimeIntervalRecent; + result.TimeIntervalHistory = TimeIntervalHistory; + result.MinExecutionCount = MinExecutionCount; + + return result; + } } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index f39cbf0d90..6e1fd79a10 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -3,15 +3,25 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // +using Microsoft.SqlServer.Management.QueryStoreModel.Common; +using Microsoft.SqlServer.Management.QueryStoreModel.TopResourceConsumers; using Microsoft.SqlTools.Hosting.Protocol.Contracts; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetTopResourceConsumersReportParams : QueryStoreReportParams + public class GetTopResourceConsumersReportParams : QueryConfigurationParams { + TimeInterval TimeInterval; + public override TopResourceConsumersConfiguration Convert() + { + TopResourceConsumersConfiguration result = base.Convert(); + result.TimeInterval = TimeInterval; + + return result; + } } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs index 2523aa5d16..704eb8afc3 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs @@ -3,15 +3,17 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // +using Microsoft.SqlServer.Management.QueryStoreModel.TrackedQueries; using Microsoft.SqlTools.Hosting.Protocol.Contracts; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetTrackedQueriesReportParams : QueryStoreReportParams + public class GetTrackedQueriesReportParams : GetPlanSummaryParams { - + // TrackedQueriesConfiguration doesn't contain any new properties useful to query generation, so a straight conversion here is fine. + public override TrackedQueriesConfiguration Convert() => (TrackedQueriesConfiguration)base.Convert(); } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs new file mode 100644 index 0000000000..be942172f2 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlServer.Management.QueryStoreModel.Common; +using Microsoft.SqlServer.Management.QueryStoreModel.PlanSummary; +using Microsoft.SqlTools.Hosting.Protocol.Contracts; + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts +{ + public class GetPlanSummaryParams : TypedQueryStoreReportParams + { + public long QueryId; + //public PlanTimeIntervalMode TimeIntervalMode; // TODO: make enum public in QueryStoreModel + public TimeInterval TimeInterval; + public Metric SelectedMetric; + public Statistic SelectedStatistic; + + public override PlanSummaryConfiguration Convert() => new() + { + QueryId = QueryId, + TimeInterval = TimeInterval, + SelectedMetric = SelectedMetric, + SelectedStatistic = SelectedStatistic + }; + } + + /// + /// Gets the query for a Plan Summary chart view + /// + public class GetPlanSummaryChartViewRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getPlanSummaryChartView"); + } + + /// + /// Gets the query for a forced plan query + /// + public class GetForcedPlanQueryRequest // there's also GetForcedPlanQueries (plural) in QSM; how is that not confusing... + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getForcedPlanQuery"); + } + + /// + /// Gets the query for a Plan Summary grid view + /// + public class GetPlanSummaryGridViewRequest + { + public static readonly RequestType Type + = RequestType.Create("queryStore/getPlanSummaryGridView"); + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs index 371e1fbb6e..1d27552b25 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -5,15 +5,43 @@ #nullable disable +using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlTools.ServiceLayer.Utility; namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class QueryStoreReportParams + public abstract class QueryStoreReportParams { public string ConnectionOwnerUri; + } + + public abstract class TypedQueryStoreReportParams : QueryStoreReportParams + { + public abstract T Convert(); + } + + public abstract class QueryConfigurationParams : TypedQueryStoreReportParams where T : QueryConfigurationBase, new() + { + public Metric SelectedMetric; + public Statistic SelectedStatistic; + public int TopQueriesReturned; + public bool ReturnAllQueries; + public int MinNumberOfQueryPlans; + + /// + /// Column name by which to order, if any. Not all query generators involve ordering. + /// public string OrderByColumnId; public bool Descending; + + public override T Convert() => new T() + { + SelectedMetric = SelectedMetric, + SelectedStatistic = SelectedStatistic, + TopQueriesReturned = TopQueriesReturned, + ReturnAllQueries = ReturnAllQueries, + MinNumberOfQueryPlans = MinNumberOfQueryPlans + }; } public class QueryStoreQueryResult : ResultStatus diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index be7eebdd63..086e440bd2 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -78,13 +78,16 @@ public void InitializeService(ServiceHost serviceHost) // Regressed Queries report serviceHost.SetRequestHandler(GetRegressedQueriesSummaryRequest.Type, HandleGetRegressedQueriesSummaryReportRequest, isParallelProcessingSupported: true); serviceHost.SetRequestHandler(GetRegressedQueriesDetailedSummaryRequest.Type, HandleGetRegressedQueriesDetailedSummaryReportRequest, isParallelProcessingSupported: true); + + // Plan Summary report + // TODO } #region Handlers /* * General process is to: - * 1. Convert the ADS config to the Query Store Model config format + * 1. Convert the ADS config to the QueryStoreModel config format * 2. Call the unordered query generator to get the list of columns * 3. Select the intended ColumnInfo for sorting * 4. Call the ordered query generator to get the actual query @@ -98,7 +101,7 @@ internal async Task HandleGetTopResourceConsumersSummaryReportRequest(GetTopReso { await RunWithErrorHandling(() => { - TopResourceConsumersConfiguration config = new(); + TopResourceConsumersConfiguration config = requestParams.Convert(); TopResourceConsumersQueryGenerator.TopResourceConsumersSummary(config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); string query = TopResourceConsumersQueryGenerator.TopResourceConsumersSummary(config, orderByColumn, requestParams.Descending, out _); @@ -116,7 +119,7 @@ internal async Task HandleGetTopResourceConsumersDetailedSummaryReportRequest(Ge { await RunWithErrorHandling(() => { - TopResourceConsumersConfiguration config = new(); + TopResourceConsumersConfiguration config = requestParams.Convert(); TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummary(GetAvailableMetrics(requestParams), config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummary(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); @@ -134,7 +137,7 @@ internal async Task HandleGetTopResourceConsumersDetailedSummaryWithWaitStatsRep { await RunWithErrorHandling(() => { - TopResourceConsumersConfiguration config = new(); + TopResourceConsumersConfiguration config = requestParams.Convert(); TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); @@ -156,7 +159,7 @@ internal async Task HandleGetForcedPlanQueriesReportRequest(GetForcedPlanQueries { await RunWithErrorHandling(() => { - ForcedPlanQueriesConfiguration config = new(); + ForcedPlanQueriesConfiguration config = requestParams.Convert(); ForcedPlanQueriesQueryGenerator.ForcedPlanQueriesSummary(config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); string query = ForcedPlanQueriesQueryGenerator.ForcedPlanQueriesSummary(config, orderByColumn, requestParams.Descending, out IList _); @@ -178,7 +181,7 @@ internal async Task HandleGetTrackedQueriesReportRequest(GetTrackedQueriesReport { await RunWithErrorHandling(() => { - TrackedQueriesConfiguration config = new(); + TrackedQueriesConfiguration config = requestParams.Convert(); string query = QueryIDSearchQueryGenerator.GetQuery(); return new QueryStoreQueryResult() @@ -198,7 +201,7 @@ internal async Task HandleGetHighVariationQueriesSummaryReportRequest(GetHighVar { await RunWithErrorHandling(() => { - HighVariationConfiguration config = new(); + HighVariationConfiguration config = requestParams.Convert(); HighVariationQueryGenerator.HighVariationSummary(config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); string query = HighVariationQueryGenerator.HighVariationSummary(config, orderByColumn, requestParams.Descending, out _); @@ -216,7 +219,7 @@ internal async Task HandleGetHighVariationQueriesDetailedSummaryReportRequest(Ge { await RunWithErrorHandling(() => { - HighVariationConfiguration config = new(); + HighVariationConfiguration config = requestParams.Convert(); IList availableMetrics = GetAvailableMetrics(requestParams); HighVariationQueryGenerator.HighVariationDetailedSummary(availableMetrics, config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); @@ -235,7 +238,7 @@ internal async Task HandleGetHighVariationQueriesDetailedSummaryWithWaitStatsRep { await RunWithErrorHandling(() => { - HighVariationConfiguration config = new(); + HighVariationConfiguration config = requestParams.Convert(); IList availableMetrics = GetAvailableMetrics(requestParams); HighVariationQueryGenerator.HighVariationDetailedSummaryWithWaitStats(availableMetrics, config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); @@ -258,7 +261,7 @@ internal async Task HandleGetOverallResourceConsumptionReportRequest(GetOverallR { await RunWithErrorHandling(() => { - OverallResourceConsumptionConfiguration config = new(); + OverallResourceConsumptionConfiguration config = requestParams.Convert(); string query = OverallResourceConsumptionQueryGenerator.GenerateQuery(GetAvailableMetrics(requestParams), config, out _); return new QueryStoreQueryResult() @@ -278,7 +281,7 @@ internal async Task HandleGetRegressedQueriesSummaryReportRequest(GetRegressedQu { await RunWithErrorHandling(() => { - RegressedQueriesConfiguration config = new(); + RegressedQueriesConfiguration config = requestParams.Convert(); string query = RegressedQueriesQueryGenerator.RegressedQuerySummary(config, out _); return new QueryStoreQueryResult() @@ -294,7 +297,7 @@ internal async Task HandleGetRegressedQueriesDetailedSummaryReportRequest(GetReg { await RunWithErrorHandling(() => { - RegressedQueriesConfiguration config = new(); + RegressedQueriesConfiguration config = requestParams.Convert(); string query = RegressedQueriesQueryGenerator.RegressedQueryDetailedSummary(GetAvailableMetrics(requestParams), config, out _); return new QueryStoreQueryResult() @@ -312,7 +315,7 @@ await RunWithErrorHandling(() => #region Helpers - private ColumnInfo GetOrderByColumn(QueryStoreReportParams requestParams, IList columnInfoList) + private ColumnInfo GetOrderByColumn(QueryConfigurationParams requestParams, IList columnInfoList) where T : QueryConfigurationBase, new() { return requestParams.OrderByColumnId != null ? columnInfoList.First(col => col.GetQueryColumnLabel() == requestParams.OrderByColumnId) : columnInfoList[0]; } From ef73305d17edc1b6032d9979acd2b586df3ffc37 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 11 Aug 2023 14:37:16 -0700 Subject: [PATCH 09/34] Adding sqlparam declarations for Top Resource Consumers and Forced Plans --- .../QueryStore/QueryStoreService.cs | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 086e440bd2..28316ec453 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; using System.Threading.Tasks; using Microsoft.Data.SqlClient; using Microsoft.SqlServer.Management.QueryStoreModel.Common; @@ -104,8 +105,22 @@ await RunWithErrorHandling(() => TopResourceConsumersConfiguration config = requestParams.Convert(); TopResourceConsumersQueryGenerator.TopResourceConsumersSummary(config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = TopResourceConsumersQueryGenerator.TopResourceConsumersSummary(config, orderByColumn, requestParams.Descending, out _); + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() + }; + + if (!config.ReturnAllQueries) + { + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString(); + } + + query = PrependSqlParameters(query, sqlParams); + return new QueryStoreQueryResult() { Success = true, @@ -122,8 +137,22 @@ await RunWithErrorHandling(() => TopResourceConsumersConfiguration config = requestParams.Convert(); TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummary(GetAvailableMetrics(requestParams), config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummary(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() + }; + + if (!config.ReturnAllQueries) + { + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString(); + } + + query = PrependSqlParameters(query, sqlParams); + return new QueryStoreQueryResult() { Success = true, @@ -133,6 +162,8 @@ await RunWithErrorHandling(() => }, requestContext); } + // TODO: not called directly by UI; probably should be removed, and QSM method reduced to internal + internal async Task HandleGetTopResourceConsumersDetailedSummaryWithWaitStatsReportRequest(GetTopResourceConsumersReportParams requestParams, RequestContext requestContext) { await RunWithErrorHandling(() => @@ -140,8 +171,22 @@ await RunWithErrorHandling(() => TopResourceConsumersConfiguration config = requestParams.Convert(); TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() + }; + + if (!config.ReturnAllQueries) + { + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString(); + } + + query = PrependSqlParameters(query, sqlParams); + return new QueryStoreQueryResult() { Success = true, @@ -162,8 +207,14 @@ await RunWithErrorHandling(() => ForcedPlanQueriesConfiguration config = requestParams.Convert(); ForcedPlanQueriesQueryGenerator.ForcedPlanQueriesSummary(config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = ForcedPlanQueriesQueryGenerator.ForcedPlanQueriesSummary(config, orderByColumn, requestParams.Descending, out IList _); + if (!config.ReturnAllQueries) + { + query = PrependSqlParameters(query, new() { [QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString()}); + } + return new QueryStoreQueryResult() { Success = true, @@ -337,6 +388,21 @@ private IList GetAvailableMetrics(QueryStoreReportParams requestParams) } } + private string PrependSqlParameters(string query, Dictionary sqlParams) + { + StringBuilder sb = new StringBuilder(); + + foreach (string key in sqlParams.Keys) + { + sb.AppendLine($"DECLARE {key} = {sqlParams[key]};"); + } + + sb.AppendLine(); + sb.AppendLine(query); + + return sb.ToString().Trim(); + } + #endregion } } From 6995f11c810967d4295c2b64f8987f83e0b9a700 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 11 Aug 2023 14:40:29 -0700 Subject: [PATCH 10/34] swapping to object-object to centralize conversion for sqlparams --- .../QueryStore/QueryStoreService.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 28316ec453..0a377a1c35 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -108,7 +108,7 @@ await RunWithErrorHandling(() => string query = TopResourceConsumersQueryGenerator.TopResourceConsumersSummary(config, orderByColumn, requestParams.Descending, out _); - Dictionary sqlParams = new() + Dictionary sqlParams = new() { [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() @@ -140,7 +140,7 @@ await RunWithErrorHandling(() => string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummary(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); - Dictionary sqlParams = new() + Dictionary sqlParams = new() { [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() @@ -174,7 +174,7 @@ await RunWithErrorHandling(() => string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); - Dictionary sqlParams = new() + Dictionary sqlParams = new() { [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() @@ -388,13 +388,14 @@ private IList GetAvailableMetrics(QueryStoreReportParams requestParams) } } - private string PrependSqlParameters(string query, Dictionary sqlParams) + private string PrependSqlParameters(string query, Dictionary sqlParams) { StringBuilder sb = new StringBuilder(); foreach (string key in sqlParams.Keys) { - sb.AppendLine($"DECLARE {key} = {sqlParams[key]};"); + // TODO: convert the object to TSQL representation correctly (e.g. DECLARE @topCount INT = 999) + sb.AppendLine($"DECLARE {key} {"TODO"} = {sqlParams[key]};"); } sb.AppendLine(); From 4f6d74f3161ebe8c3d926feb0d1d1015df8e7aa2 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 11 Aug 2023 14:50:40 -0700 Subject: [PATCH 11/34] Adding sqlparams for GetTrackedQueries --- .../Contracts/GetTrackedQueryReport.cs | 6 ++---- .../QueryStore/QueryStoreService.cs | 21 ++++++++++--------- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs index 704eb8afc3..c6924e018f 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs @@ -3,17 +3,15 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.TrackedQueries; using Microsoft.SqlTools.Hosting.Protocol.Contracts; #nullable disable namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetTrackedQueriesReportParams : GetPlanSummaryParams + public class GetTrackedQueriesReportParams { - // TrackedQueriesConfiguration doesn't contain any new properties useful to query generation, so a straight conversion here is fine. - public override TrackedQueriesConfiguration Convert() => (TrackedQueriesConfiguration)base.Convert(); + public string QuerySearchText; } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 0a377a1c35..87257deecd 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -110,13 +110,13 @@ await RunWithErrorHandling(() => Dictionary sqlParams = new() { - [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), - [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset, + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset }; if (!config.ReturnAllQueries) { - sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString(); + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; } query = PrependSqlParameters(query, sqlParams); @@ -142,13 +142,13 @@ await RunWithErrorHandling(() => Dictionary sqlParams = new() { - [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), - [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset, + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset }; if (!config.ReturnAllQueries) { - sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString(); + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; } query = PrependSqlParameters(query, sqlParams); @@ -176,13 +176,13 @@ await RunWithErrorHandling(() => Dictionary sqlParams = new() { - [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset.ToString(), - [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset.ToString() + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset, + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset }; if (!config.ReturnAllQueries) { - sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString(); + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; } query = PrependSqlParameters(query, sqlParams); @@ -232,9 +232,10 @@ internal async Task HandleGetTrackedQueriesReportRequest(GetTrackedQueriesReport { await RunWithErrorHandling(() => { - TrackedQueriesConfiguration config = requestParams.Convert(); string query = QueryIDSearchQueryGenerator.GetQuery(); + query = PrependSqlParameters(query, new() { [QueryIDSearchQueryGenerator.QuerySearchTextParameter] = requestParams.QuerySearchText }); + return new QueryStoreQueryResult() { Success = true, From bf1626f76e120e0666d69b13380bbbffad4111e8 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 11 Aug 2023 14:53:04 -0700 Subject: [PATCH 12/34] Added sqlparams for High Variation --- .../QueryStore/QueryStoreService.cs | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 87257deecd..c6def4650d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -256,8 +256,22 @@ await RunWithErrorHandling(() => HighVariationConfiguration config = requestParams.Convert(); HighVariationQueryGenerator.HighVariationSummary(config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = HighVariationQueryGenerator.HighVariationSummary(config, orderByColumn, requestParams.Descending, out _); + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset, + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset + }; + + if (!config.ReturnAllQueries) + { + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; + } + + query = PrependSqlParameters(query, sqlParams); + return new QueryStoreQueryResult() { Success = true, @@ -275,8 +289,22 @@ await RunWithErrorHandling(() => IList availableMetrics = GetAvailableMetrics(requestParams); HighVariationQueryGenerator.HighVariationDetailedSummary(availableMetrics, config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = HighVariationQueryGenerator.HighVariationDetailedSummary(availableMetrics, config, orderByColumn, requestParams.Descending, out _); + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset, + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset + }; + + if (!config.ReturnAllQueries) + { + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; + } + + query = PrependSqlParameters(query, sqlParams); + return new QueryStoreQueryResult() { Success = true, @@ -286,6 +314,8 @@ await RunWithErrorHandling(() => }, requestContext); } + // TODO: not called directly by UI; probably should be removed, and QSM method reduced to internal + internal async Task HandleGetHighVariationQueriesDetailedSummaryWithWaitStatsReportRequest(GetHighVariationQueriesReportParams requestParams, RequestContext requestContext) { await RunWithErrorHandling(() => @@ -294,8 +324,22 @@ await RunWithErrorHandling(() => IList availableMetrics = GetAvailableMetrics(requestParams); HighVariationQueryGenerator.HighVariationDetailedSummaryWithWaitStats(availableMetrics, config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + string query = HighVariationQueryGenerator.HighVariationDetailedSummaryWithWaitStats(availableMetrics, config, orderByColumn, requestParams.Descending, out _); + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset, + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset + }; + + if (!config.ReturnAllQueries) + { + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; + } + + query = PrependSqlParameters(query, sqlParams); + return new QueryStoreQueryResult() { Success = true, From f762d6cebf68366f1b9bce5730dae4bcdf75eeea Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 11 Aug 2023 14:55:21 -0700 Subject: [PATCH 13/34] Added Overall ResourceConumption --- .../QueryStore/QueryStoreService.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index c6def4650d..87e172a9f4 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -360,6 +360,14 @@ await RunWithErrorHandling(() => OverallResourceConsumptionConfiguration config = requestParams.Convert(); string query = OverallResourceConsumptionQueryGenerator.GenerateQuery(GetAvailableMetrics(requestParams), config, out _); + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterIntervalStartTime] = config.SpecifiedTimeInterval.StartDateTimeOffset, + [QueryGeneratorUtils.ParameterIntervalEndTime] = config.SpecifiedTimeInterval.EndDateTimeOffset + }; + + query = PrependSqlParameters(query, sqlParams); + return new QueryStoreQueryResult() { Success = true, From 2c39510d333e5a31322d76618b28fe38dc71a2c0 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Mon, 14 Aug 2023 11:43:19 -0700 Subject: [PATCH 14/34] Adding params for regressed queries --- .../QueryStore/QueryStoreService.cs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 87e172a9f4..646f989f3e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -388,6 +388,23 @@ await RunWithErrorHandling(() => RegressedQueriesConfiguration config = requestParams.Convert(); string query = RegressedQueriesQueryGenerator.RegressedQuerySummary(config, out _); + Dictionary sqlParams = new() + { + [RegressedQueriesQueryGenerator.ParameterRecentStartTime] = config.TimeIntervalRecent.StartDateTimeOffset, + [RegressedQueriesQueryGenerator.ParameterRecentEndTime] = config.TimeIntervalRecent.EndDateTimeOffset, + [RegressedQueriesQueryGenerator.ParameterHistoryStartTime] = config.TimeIntervalHistory.StartDateTimeOffset, + [RegressedQueriesQueryGenerator.ParameterHistoryEndTime] = config.TimeIntervalHistory.EndDateTimeOffset, + [RegressedQueriesQueryGenerator.ParameterMinExecutionCount] = config.MinExecutionCount + }; + + if (!config.ReturnAllQueries) + { + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; + } + + query = PrependSqlParameters(query, sqlParams); + + return new QueryStoreQueryResult() { Success = true, From 4196c82edf9038f6a2cb95f7003af89cbd0f53df Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Mon, 14 Aug 2023 13:42:04 -0700 Subject: [PATCH 15/34] Removing WithWaitStats calls, since they're automatically used within QSM when waitstats is an available statistic# --- .../QueryStore/QueryStoreService.cs | 71 ------------------- 1 file changed, 71 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 646f989f3e..553492f523 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -60,7 +60,6 @@ public void InitializeService(ServiceHost serviceHost) // Top Resource Consumers report serviceHost.SetRequestHandler(GetTopResourceConsumersSummaryRequest.Type, HandleGetTopResourceConsumersSummaryReportRequest, isParallelProcessingSupported: true); serviceHost.SetRequestHandler(GetTopResourceConsumersDetailedSummaryRequest.Type, HandleGetTopResourceConsumersDetailedSummaryReportRequest, isParallelProcessingSupported: true); - serviceHost.SetRequestHandler(GetTopResourceConsumersDetailedSummaryWithWaitStatsRequest.Type, HandleGetTopResourceConsumersDetailedSummaryWithWaitStatsReportRequest, isParallelProcessingSupported: true); // Forced Plan Queries report serviceHost.SetRequestHandler(GetForcedPlanQueriesReportRequest.Type, HandleGetForcedPlanQueriesReportRequest, isParallelProcessingSupported: true); @@ -71,7 +70,6 @@ public void InitializeService(ServiceHost serviceHost) // High Variation Queries report serviceHost.SetRequestHandler(GetHighVariationQueriesSummaryRequest.Type, HandleGetHighVariationQueriesSummaryReportRequest, isParallelProcessingSupported: true); serviceHost.SetRequestHandler(GetHighVariationQueriesDetailedSummaryRequest.Type, HandleGetHighVariationQueriesDetailedSummaryReportRequest, isParallelProcessingSupported: true); - serviceHost.SetRequestHandler(GetHighVariationQueriesDetailedSummaryWithWaitStatsRequest.Type, HandleGetHighVariationQueriesDetailedSummaryWithWaitStatsReportRequest, isParallelProcessingSupported: true); // Overall Resource Consumption report serviceHost.SetRequestHandler(GetOverallResourceConsumptionReportRequest.Type, HandleGetOverallResourceConsumptionReportRequest, isParallelProcessingSupported: true); @@ -162,40 +160,6 @@ await RunWithErrorHandling(() => }, requestContext); } - // TODO: not called directly by UI; probably should be removed, and QSM method reduced to internal - - internal async Task HandleGetTopResourceConsumersDetailedSummaryWithWaitStatsReportRequest(GetTopResourceConsumersReportParams requestParams, RequestContext requestContext) - { - await RunWithErrorHandling(() => - { - TopResourceConsumersConfiguration config = requestParams.Convert(); - TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, out IList columns); - ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); - - string query = TopResourceConsumersQueryGenerator.TopResourceConsumersDetailedSummaryWithWaitStats(GetAvailableMetrics(requestParams), config, orderByColumn, requestParams.Descending, out _); - - Dictionary sqlParams = new() - { - [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset, - [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset - }; - - if (!config.ReturnAllQueries) - { - sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; - } - - query = PrependSqlParameters(query, sqlParams); - - return new QueryStoreQueryResult() - { - Success = true, - ErrorMessage = null, - Query = query - }; - }, requestContext); - } - #endregion #region Forced Plans report @@ -314,41 +278,6 @@ await RunWithErrorHandling(() => }, requestContext); } - // TODO: not called directly by UI; probably should be removed, and QSM method reduced to internal - - internal async Task HandleGetHighVariationQueriesDetailedSummaryWithWaitStatsReportRequest(GetHighVariationQueriesReportParams requestParams, RequestContext requestContext) - { - await RunWithErrorHandling(() => - { - HighVariationConfiguration config = requestParams.Convert(); - IList availableMetrics = GetAvailableMetrics(requestParams); - HighVariationQueryGenerator.HighVariationDetailedSummaryWithWaitStats(availableMetrics, config, out IList columns); - ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); - - string query = HighVariationQueryGenerator.HighVariationDetailedSummaryWithWaitStats(availableMetrics, config, orderByColumn, requestParams.Descending, out _); - - Dictionary sqlParams = new() - { - [QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset, - [QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset - }; - - if (!config.ReturnAllQueries) - { - sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; - } - - query = PrependSqlParameters(query, sqlParams); - - return new QueryStoreQueryResult() - { - Success = true, - ErrorMessage = null, - Query = query - }; - }, requestContext); - } - #endregion #region Overall Resource Consumption report From 381c0414288c52ae702edc0956ce49a6806abf04 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Mon, 14 Aug 2023 15:03:02 -0700 Subject: [PATCH 16/34] Adding PlanSummary handlers --- .../Contracts/PlanSummaryReportParams.cs | 30 +++-- .../Contracts/QueryStoreReportParams.cs | 6 + .../QueryStore/QueryStoreService.cs | 114 +++++++++++++++++- 3 files changed, 138 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs index be942172f2..c1e916dfb6 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -3,6 +3,8 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // +#nullable disable + using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.PlanSummary; using Microsoft.SqlTools.Hosting.Protocol.Contracts; @@ -26,6 +28,18 @@ public class GetPlanSummaryParams : TypedQueryStoreReportParams /// Gets the query for a Plan Summary chart view /// @@ -36,20 +50,20 @@ public static readonly RequestType } /// - /// Gets the query for a forced plan query + /// Gets the query for a Plan Summary grid view /// - public class GetForcedPlanQueryRequest // there's also GetForcedPlanQueries (plural) in QSM; how is that not confusing... + public class GetPlanSummaryGridViewRequest { - public static readonly RequestType Type - = RequestType.Create("queryStore/getForcedPlanQuery"); + public static readonly RequestType Type + = RequestType.Create("queryStore/getPlanSummaryGridView"); } /// - /// Gets the query for a Plan Summary grid view + /// Gets the query for a forced plan query /// - public class GetPlanSummaryGridViewRequest + public class GetForcedPlanRequest // there's also GetForcedPlanQueries (plural) in QSM; how is that not confusing... { - public static readonly RequestType Type - = RequestType.Create("queryStore/getPlanSummaryGridView"); + public static readonly RequestType Type + = RequestType.Create("queryStore/getForcedPlan"); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs index 1d27552b25..8fc48229c8 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -48,4 +48,10 @@ public class QueryStoreQueryResult : ResultStatus { public string Query; } + + public interface IOrderableQueryParams + { + string GetOrderByColumnId(); + bool GetDescending(); + } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 553492f523..6677e6d4b7 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -13,6 +13,7 @@ using Microsoft.SqlServer.Management.QueryStoreModel.ForcedPlanQueries; using Microsoft.SqlServer.Management.QueryStoreModel.HighVariation; using Microsoft.SqlServer.Management.QueryStoreModel.OverallResourceConsumption; +using Microsoft.SqlServer.Management.QueryStoreModel.PlanSummary; using Microsoft.SqlServer.Management.QueryStoreModel.RegressedQueries; using Microsoft.SqlServer.Management.QueryStoreModel.TopResourceConsumers; using Microsoft.SqlServer.Management.QueryStoreModel.TrackedQueries; @@ -79,7 +80,9 @@ public void InitializeService(ServiceHost serviceHost) serviceHost.SetRequestHandler(GetRegressedQueriesDetailedSummaryRequest.Type, HandleGetRegressedQueriesDetailedSummaryReportRequest, isParallelProcessingSupported: true); // Plan Summary report - // TODO + serviceHost.SetRequestHandler(GetPlanSummaryChartViewRequest.Type, HandleGetPlanSummaryChartViewRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetPlanSummaryGridViewRequest.Type, HandleGetPlanSummaryGridViewRequest, isParallelProcessingSupported: true); + serviceHost.SetRequestHandler(GetForcedPlanRequest.Type, HandleGetForcedPlanRequest, isParallelProcessingSupported: true); } #region Handlers @@ -176,7 +179,7 @@ await RunWithErrorHandling(() => if (!config.ReturnAllQueries) { - query = PrependSqlParameters(query, new() { [QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString()}); + query = PrependSqlParameters(query, new() { [QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned.ToString() }); } return new QueryStoreQueryResult() @@ -220,7 +223,7 @@ await RunWithErrorHandling(() => HighVariationConfiguration config = requestParams.Convert(); HighVariationQueryGenerator.HighVariationSummary(config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); - + string query = HighVariationQueryGenerator.HighVariationSummary(config, orderByColumn, requestParams.Descending, out _); Dictionary sqlParams = new() @@ -253,7 +256,7 @@ await RunWithErrorHandling(() => IList availableMetrics = GetAvailableMetrics(requestParams); HighVariationQueryGenerator.HighVariationDetailedSummary(availableMetrics, config, out IList columns); ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); - + string query = HighVariationQueryGenerator.HighVariationDetailedSummary(availableMetrics, config, orderByColumn, requestParams.Descending, out _); Dictionary sqlParams = new() @@ -361,6 +364,104 @@ await RunWithErrorHandling(() => #endregion + #region Plan Summary report + + internal async Task HandleGetPlanSummaryChartViewRequest(GetPlanSummaryParams requestParams, RequestContext requestContext) + { + await RunWithErrorHandling(() => + { + PlanSummaryConfiguration config = requestParams.Convert(); + + BucketInterval bucketInterval = BucketInterval.Hour; + + // if interval is specified then select a 'good' interval + if (config.UseTimeInterval) + { + TimeSpan duration = config.TimeInterval.TimeSpan; + bucketInterval = BucketIntervalUtils.CalculateGoodSubInterval(duration); + } + + string query = PlanSummaryQueryGenerator.PlanSummaryChartView(config, bucketInterval, out _); + + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterQueryId] = config.QueryId + }; + + if (config.UseTimeInterval) + { + sqlParams[QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset; + sqlParams[QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset; + } + + query = PrependSqlParameters(query, sqlParams); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); + } + + internal async Task HandleGetPlanSummaryGridViewRequest(GetPlanSummaryGridViewParams requestParams, RequestContext requestContext) + { + await RunWithErrorHandling(() => + { + PlanSummaryConfiguration config = requestParams.Convert(); + + PlanSummaryQueryGenerator.PlanSummaryGridView(config, out IList columns); + ColumnInfo orderByColumn = GetOrderByColumn(requestParams, columns); + + string query = PlanSummaryQueryGenerator.PlanSummaryGridView(config, orderByColumn, requestParams.Descending, out _); + + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterQueryId] = config.QueryId + }; + + if (config.UseTimeInterval) + { + sqlParams[QueryGeneratorUtils.ParameterIntervalStartTime] = config.TimeInterval.StartDateTimeOffset; + sqlParams[QueryGeneratorUtils.ParameterIntervalEndTime] = config.TimeInterval.EndDateTimeOffset; + } + + query = PrependSqlParameters(query, sqlParams); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); + } + + internal async Task HandleGetForcedPlanRequest(GetForcedPlanParams requestParams, RequestContext requestContext) + { + await RunWithErrorHandling(() => + { + string query = PlanSummaryQueryGenerator.GetForcedPlanQuery(); + Dictionary sqlParams = new() + { + [QueryGeneratorUtils.ParameterQueryId] = requestParams.QueryId, + [QueryGeneratorUtils.ParameterPlanId] = requestParams.PlanId, + }; + + query = PrependSqlParameters(query, sqlParams); + + return new QueryStoreQueryResult() + { + Success = true, + ErrorMessage = null, + Query = query + }; + }, requestContext); + } + + #endregion + #endregion #region Helpers @@ -370,6 +471,11 @@ await RunWithErrorHandling(() => return requestParams.OrderByColumnId != null ? columnInfoList.First(col => col.GetQueryColumnLabel() == requestParams.OrderByColumnId) : columnInfoList[0]; } + private ColumnInfo GetOrderByColumn(GetPlanSummaryGridViewParams requestParams, IList columnInfoList) + { + return requestParams.OrderByColumnId != null ? columnInfoList.First(col => col.GetQueryColumnLabel() == requestParams.OrderByColumnId) : columnInfoList[0]; + } + private IList GetAvailableMetrics(QueryStoreReportParams requestParams) { ConnectionService.TryFindConnection(requestParams.ConnectionOwnerUri, out ConnectionInfo connectionInfo); From d79de0ac575cacc88c39151e5ec908469c807950 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Mon, 14 Aug 2023 16:19:08 -0700 Subject: [PATCH 17/34] cleaning up orderable queries --- .../QueryStore/Contracts/GetForcedPlanQueriesReport.cs | 6 +++++- .../Contracts/GetHighVariationQueriesReport.cs | 6 +++++- .../Contracts/GetTopResourceConsumersReport.cs | 6 +++++- .../QueryStore/Contracts/PlanSummaryReportParams.cs | 4 +++- .../QueryStore/Contracts/QueryStoreReportParams.cs | 4 +--- .../QueryStore/QueryStoreService.cs | 9 ++------- 6 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index 809ccee2d7..db57a2eac1 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -11,9 +11,11 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetForcedPlanQueriesReportParams : QueryConfigurationParams + public class GetForcedPlanQueriesReportParams : QueryConfigurationParams, IOrderableQueryParams { public TimeInterval TimeInterval; + public string OrderByColumnId; + public bool Descending; public override ForcedPlanQueriesConfiguration Convert() { @@ -22,6 +24,8 @@ public override ForcedPlanQueriesConfiguration Convert() return config; } + + public string GetOrderByColumnId() => OrderByColumnId; } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index 9c302871a8..7b0cf6d210 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -11,9 +11,11 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetHighVariationQueriesReportParams : QueryConfigurationParams + public class GetHighVariationQueriesReportParams : QueryConfigurationParams, IOrderableQueryParams { public TimeInterval TimeInterval; + public string OrderByColumnId; + public bool Descending; public override HighVariationConfiguration Convert() { @@ -22,6 +24,8 @@ public override HighVariationConfiguration Convert() return base.Convert(); } + + public string GetOrderByColumnId() => OrderByColumnId; } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index 6e1fd79a10..cdbac4d983 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -11,9 +11,11 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetTopResourceConsumersReportParams : QueryConfigurationParams + public class GetTopResourceConsumersReportParams : QueryConfigurationParams, IOrderableQueryParams { TimeInterval TimeInterval; + public string OrderByColumnId; + public bool Descending; public override TopResourceConsumersConfiguration Convert() { @@ -22,6 +24,8 @@ public override TopResourceConsumersConfiguration Convert() return result; } + + public string GetOrderByColumnId() => OrderByColumnId; } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs index c1e916dfb6..6acb6e5658 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -28,10 +28,12 @@ public class GetPlanSummaryParams : TypedQueryStoreReportParams OrderByColumnId; } public class GetForcedPlanParams : QueryStoreReportParams diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs index 8fc48229c8..bf9f4dbe64 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -31,8 +31,7 @@ public abstract class TypedQueryStoreReportParams : QueryStoreReportParams /// /// Column name by which to order, if any. Not all query generators involve ordering. /// - public string OrderByColumnId; - public bool Descending; + public override T Convert() => new T() { @@ -52,6 +51,5 @@ public class QueryStoreQueryResult : ResultStatus public interface IOrderableQueryParams { string GetOrderByColumnId(); - bool GetDescending(); } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 6677e6d4b7..6af19ff8e5 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -466,14 +466,9 @@ await RunWithErrorHandling(() => #region Helpers - private ColumnInfo GetOrderByColumn(QueryConfigurationParams requestParams, IList columnInfoList) where T : QueryConfigurationBase, new() + private ColumnInfo GetOrderByColumn(IOrderableQueryParams requestParams, IList columnInfoList) { - return requestParams.OrderByColumnId != null ? columnInfoList.First(col => col.GetQueryColumnLabel() == requestParams.OrderByColumnId) : columnInfoList[0]; - } - - private ColumnInfo GetOrderByColumn(GetPlanSummaryGridViewParams requestParams, IList columnInfoList) - { - return requestParams.OrderByColumnId != null ? columnInfoList.First(col => col.GetQueryColumnLabel() == requestParams.OrderByColumnId) : columnInfoList[0]; + return requestParams.GetOrderByColumnId() != null ? columnInfoList.First(col => col.GetQueryColumnLabel() == requestParams.GetOrderByColumnId()) : columnInfoList[0]; } private IList GetAvailableMetrics(QueryStoreReportParams requestParams) From 3f70aa8109b6171b211498917c3e65c24a40dae7 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Tue, 15 Aug 2023 12:18:09 -0700 Subject: [PATCH 18/34] initial test mockout --- .../QueryStore/QueryStoreBaselines.cs | 12 ++++++ .../QueryStore/QueryStoreTests.cs | 43 +++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs create mode 100644 test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs new file mode 100644 index 0000000000..b1f259509a --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs @@ -0,0 +1,12 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.QueryStore +{ + internal class QueryStoreBaselines + { + public const string HandleGetTopResourceConsumersSummaryReportRequest = "none yet"; + } +} diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs new file mode 100644 index 0000000000..14cd5d55de --- /dev/null +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs @@ -0,0 +1,43 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using System.Threading.Tasks; +using Microsoft.SqlServer.Management.QueryStoreModel.Common; +using Microsoft.SqlTools.ServiceLayer.Connection; +using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility; +using Microsoft.SqlTools.ServiceLayer.QueryStore; +using Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts; +using Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking; +using NUnit.Framework; + +namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.QueryStore +{ + public class QueryStoreTests : TestBase + { + + [Test] + public async Task TopResourceConsumers() + { + QueryStoreService service = new(ConnectionService.Instance); + + // Validate that result indicates failure when there's an exception + MockRequest requestMock = new(); + await service.HandleGetTopResourceConsumersSummaryReportRequest(new GetTopResourceConsumersReportParams + { + ConnectionOwnerUri = "", + ReturnAllQueries = true, + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + OrderByColumnId = "test_column", + Descending = true, + MinNumberOfQueryPlans = 1, + TopQueriesReturned = 50 + }, requestMock.Object); + + requestMock.AssertSuccess(nameof(service.HandleGetTopResourceConsumersSummaryReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetTopResourceConsumersSummaryReportRequest, requestMock.Result.Query); + } + } +} From cb3778fa893a73a183e64eba7388539811f30760 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Tue, 15 Aug 2023 15:14:22 -0700 Subject: [PATCH 19/34] adding basic (incorrect) parameter translation --- .../QueryStore/QueryStoreService.cs | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 6af19ff8e5..2485926afc 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -28,7 +29,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore /// /// Main class for SqlProjects service /// - public sealed class QueryStoreService : BaseService + public class QueryStoreService : BaseService { private static readonly Lazy instance = new Lazy(() => new QueryStoreService()); @@ -471,7 +472,7 @@ private ColumnInfo GetOrderByColumn(IOrderableQueryParams requestParams, IList col.GetQueryColumnLabel() == requestParams.GetOrderByColumnId()) : columnInfoList[0]; } - private IList GetAvailableMetrics(QueryStoreReportParams requestParams) + internal virtual IList GetAvailableMetrics(QueryStoreReportParams requestParams) { ConnectionService.TryFindConnection(requestParams.ConnectionOwnerUri, out ConnectionInfo connectionInfo); @@ -488,14 +489,20 @@ private IList GetAvailableMetrics(QueryStoreReportParams requestParams) } } - private string PrependSqlParameters(string query, Dictionary sqlParams) + /// + /// Prepends declarations and definitions of to + /// + /// + /// + /// + private static string PrependSqlParameters(string query, Dictionary sqlParams) { StringBuilder sb = new StringBuilder(); foreach (string key in sqlParams.Keys) { // TODO: convert the object to TSQL representation correctly (e.g. DECLARE @topCount INT = 999) - sb.AppendLine($"DECLARE {key} {"TODO"} = {sqlParams[key]};"); + sb.AppendLine($"DECLARE {key} {GetTSqlRepresentation(sqlParams[key])};"); } sb.AppendLine(); @@ -504,6 +511,35 @@ private string PrependSqlParameters(string query, Dictionary sql return sb.ToString().Trim(); } + private static HashSet types = new HashSet(); + + /// + /// Converts an object (that would otherwise be set as a SqlParameter value) to an entirely TSQL representation. + /// Only handles the same subset of object types that Query Store query generators use: + /// int, long, string, and DateTimeOffset + /// + /// + /// data type and value portions of a parameter declaration, in the form "INT = 999" + internal static string GetTSqlRepresentation(object paramValue) + { + types.Add(paramValue.GetType()); + + switch (paramValue) + { + case int i: + return $"INT = {i}"; + case long l: + return $"BIGINT = {l}"; + case string s: + return $"VARCHAR(max) = {s}"; + case DateTimeOffset dto: + return $"DATETIMEOFFSET = {dto.ToString()}"; + default: + Debug.Fail($"Unhandled TSQL parameter type: '{paramValue.GetType()}'"); + return $"= {paramValue}"; + } + } + #endregion } } From 8891103d395f11860b734898da4240d58013de18 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Tue, 15 Aug 2023 17:44:22 -0700 Subject: [PATCH 20/34] first test passing, datetimeoffset swapped to ISO format --- .../GetTopResourceConsumersReport.cs | 2 +- .../Contracts/PlanSummaryReportParams.cs | 1 + .../QueryStore/QueryStoreService.cs | 6 +- .../QueryStore/QueryStoreBaselines.cs | 137 ++++++++++- .../QueryStore/QueryStoreTests.cs | 229 +++++++++++++++++- 5 files changed, 360 insertions(+), 15 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index cdbac4d983..b7c88b3b71 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -13,7 +13,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetTopResourceConsumersReportParams : QueryConfigurationParams, IOrderableQueryParams { - TimeInterval TimeInterval; + public TimeInterval TimeInterval; public string OrderByColumnId; public bool Descending; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs index 6acb6e5658..d274dc2499 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -22,6 +22,7 @@ public class GetPlanSummaryParams : TypedQueryStoreReportParams new() { QueryId = QueryId, + //TimeIntervalMode = TimeIntervalMode TimeInterval = TimeInterval, SelectedMetric = SelectedMetric, SelectedStatistic = SelectedStatistic diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 2485926afc..1c298756e6 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Globalization; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -501,7 +502,6 @@ private static string PrependSqlParameters(string query, Dictionary @interval_end_time OR itvl.end_time < @interval_start_time) +GROUP BY ws.plan_id, ws.runtime_stats_interval_id, ws.wait_category +) +SELECT + p.query_id query_id, + q.object_id object_id, + ISNULL(OBJECT_NAME(q.object_id),'') object_name, + qt.query_sql_text query_sql_text, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) stdev_query_wait_time, + MAX(ws.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id + JOIN sys.query_store_query q ON q.query_id = p.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +WHERE NOT (ws.first_execution_time > @interval_end_time OR ws.last_execution_time < @interval_start_time) +GROUP BY p.query_id, qt.query_sql_text, q.object_id +HAVING COUNT(distinct p.plan_id) >= 1 +ORDER BY query_id DESC"; + + public const string HandleGetTopResourceConsumersDetailedSummaryReportRequest = +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; + +With wait_stats AS +( +SELECT + ws.plan_id plan_id, + ws.wait_category, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms)/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))*1,2) avg_query_wait_time, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time_ms*ws.stdev_query_wait_time_ms*(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms)))*1,2) stdev_query_wait_time, + CAST(ROUND(SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms),0) AS BIGINT) count_executions, + MAX(itvl.end_time) last_execution_time, + MIN(itvl.start_time) first_execution_time +FROM sys.query_store_wait_stats ws + JOIN sys.query_store_runtime_stats_interval itvl ON itvl.runtime_stats_interval_id = ws.runtime_stats_interval_id +WHERE NOT (itvl.start_time > @interval_end_time OR itvl.end_time < @interval_start_time) +GROUP BY ws.plan_id, ws.runtime_stats_interval_id, ws.wait_category +), +top_wait_stats AS +( +SELECT + p.query_id query_id, + q.object_id object_id, + ISNULL(OBJECT_NAME(q.object_id),'') object_name, + qt.query_sql_text query_sql_text, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) stdev_query_wait_time, + MAX(ws.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id + JOIN sys.query_store_query q ON q.query_id = p.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +WHERE NOT (ws.first_execution_time > @interval_end_time OR ws.last_execution_time < @interval_start_time) +GROUP BY p.query_id, qt.query_sql_text, q.object_id +), +top_other_stats AS +( +SELECT + p.query_id query_id, + q.object_id object_id, + ISNULL(OBJECT_NAME(q.object_id),'') object_name, + qt.query_sql_text query_sql_text, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_clr_time*rs.stdev_clr_time*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_clr_time, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_cpu_time*rs.stdev_cpu_time*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_cpu_time, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_dop*rs.stdev_dop*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*1,0) stdev_dop, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_duration*rs.stdev_duration*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_duration, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_logical_io_reads*rs.stdev_logical_io_reads*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_logical_io_reads, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_logical_io_writes*rs.stdev_logical_io_writes*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_logical_io_writes, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_log_bytes_used*rs.stdev_log_bytes_used*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.0009765625,2) stdev_log_bytes_used, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_query_max_used_memory*rs.stdev_query_max_used_memory*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_query_max_used_memory, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_physical_io_reads*rs.stdev_physical_io_reads*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_physical_io_reads, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_rowcount*rs.stdev_rowcount*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*1,0) stdev_rowcount, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_tempdb_space_used*rs.stdev_tempdb_space_used*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_tempdb_space_used, + SUM(rs.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM sys.query_store_runtime_stats rs + JOIN sys.query_store_plan p ON p.plan_id = rs.plan_id + JOIN sys.query_store_query q ON q.query_id = p.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +WHERE NOT (rs.first_execution_time > @interval_end_time OR rs.last_execution_time < @interval_start_time) +GROUP BY p.query_id, qt.query_sql_text, q.object_id +) +SELECT + A.query_id query_id, + A.object_id object_id, + A.object_name object_name, + A.query_sql_text query_sql_text, + A.stdev_clr_time stdev_clr_time, + A.stdev_cpu_time stdev_cpu_time, + A.stdev_dop stdev_dop, + A.stdev_duration stdev_duration, + A.stdev_logical_io_reads stdev_logical_io_reads, + A.stdev_logical_io_writes stdev_logical_io_writes, + A.stdev_log_bytes_used stdev_log_bytes_used, + A.stdev_query_max_used_memory stdev_query_max_used_memory, + A.stdev_physical_io_reads stdev_physical_io_reads, + A.stdev_rowcount stdev_rowcount, + A.stdev_tempdb_space_used stdev_tempdb_space_used, + ISNULL(B.stdev_query_wait_time,0) stdev_query_wait_time, + A.count_executions count_executions, + A.num_plans num_plans +FROM top_other_stats A LEFT JOIN top_wait_stats B on A.query_id = B.query_id and A.query_sql_text = B.query_sql_text and A.object_id = B.object_id +WHERE A.num_plans >= 1 +ORDER BY query_id DESC"; + + public const string HandleGetForcedPlanQueriesReportRequest = @""; + public const string HandleGetTrackedQueriesReportRequest = @""; + public const string HandleGetHighVariationQueriesSummaryReportRequest = @""; + public const string HandleGetHighVariationQueriesDetailedSummaryReportRequest = @""; + public const string HandleGetOverallResourceConsumptionReportRequest = @""; + public const string HandleGetRegressedQueriesSummaryReportRequest = @""; + public const string HandleGetRegressedQueriesDetailedSummaryReportRequest = @""; + public const string HandleGetPlanSummaryChartViewRequest = @""; + public const string HandleGetPlanSummaryGridViewRequest = @""; } } diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs index 14cd5d55de..2e1b22739c 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs @@ -3,6 +3,8 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // +using System; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlTools.ServiceLayer.Connection; @@ -10,34 +12,243 @@ using Microsoft.SqlTools.ServiceLayer.QueryStore; using Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts; using Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking; +using Moq; using NUnit.Framework; namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.QueryStore { public class QueryStoreTests : TestBase { + private const string TestConnectionOwnerUri = "FakeConnectionOwnerUri"; + private static DateTimeOffset TestWindowStart = DateTimeOffset.Parse("6/10/2023 12:34:56 PM -07:00"); + private static DateTimeOffset TestWindowEnd = TestWindowStart.AddDays(7); + private static TimeInterval TestTimeInterval { get => new TimeInterval(TestWindowStart, TestWindowEnd); } [Test] public async Task TopResourceConsumers() { - QueryStoreService service = new(ConnectionService.Instance); + QueryStoreService service = GetMock(); - // Validate that result indicates failure when there's an exception - MockRequest requestMock = new(); - await service.HandleGetTopResourceConsumersSummaryReportRequest(new GetTopResourceConsumersReportParams + MockRequest request = new(); + await service.HandleGetTopResourceConsumersSummaryReportRequest(new GetTopResourceConsumersReportParams() { - ConnectionOwnerUri = "", + ConnectionOwnerUri = TestConnectionOwnerUri, ReturnAllQueries = true, SelectedMetric = Metric.WaitTime, SelectedStatistic = Statistic.Stdev, - OrderByColumnId = "test_column", + OrderByColumnId = "query_id", + Descending = true, + MinNumberOfQueryPlans = 1, + TopQueriesReturned = 50, + TimeInterval = TestTimeInterval + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetTopResourceConsumersSummaryReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetTopResourceConsumersSummaryReportRequest, request.Result.Query); + + request = new(); + await service.HandleGetTopResourceConsumersDetailedSummaryReportRequest(new GetTopResourceConsumersReportParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + ReturnAllQueries = true, + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + OrderByColumnId = "query_id", + Descending = true, + MinNumberOfQueryPlans = 1, + TopQueriesReturned = 50, + TimeInterval = TestTimeInterval + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetTopResourceConsumersDetailedSummaryReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetTopResourceConsumersDetailedSummaryReportRequest, request.Result.Query); + } + + [Test] + public async Task ForcedPlanQueries() + { + QueryStoreService service = GetMock(); + + MockRequest request = new(); + await service.HandleGetForcedPlanQueriesReportRequest(new GetForcedPlanQueriesReportParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + ReturnAllQueries = true, + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + OrderByColumnId = "query_id", + Descending = true, + MinNumberOfQueryPlans = 1, + TopQueriesReturned = 50 + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetForcedPlanQueriesReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetForcedPlanQueriesReportRequest, request.Result.Query); + } + + [Test] + public async Task TrackedQueries() + { + QueryStoreService service = GetMock(); + + MockRequest request = new(); + await service.HandleGetTrackedQueriesReportRequest(new GetTrackedQueriesReportParams() + { + QuerySearchText = "test search text" + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetTrackedQueriesReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetTrackedQueriesReportRequest, request.Result.Query); + } + + [Test] + public async Task HighVariationQueries() + { + QueryStoreService service = GetMock(); + + MockRequest request = new(); + await service.HandleGetHighVariationQueriesSummaryReportRequest(new GetHighVariationQueriesReportParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + ReturnAllQueries = true, + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + OrderByColumnId = "query_id", + Descending = true, + MinNumberOfQueryPlans = 1, + TopQueriesReturned = 50 + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetHighVariationQueriesSummaryReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetHighVariationQueriesSummaryReportRequest, request.Result.Query); + + request = new(); + await service.HandleGetHighVariationQueriesDetailedSummaryReportRequest(new GetHighVariationQueriesReportParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + ReturnAllQueries = true, + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + OrderByColumnId = "query_id", Descending = true, MinNumberOfQueryPlans = 1, TopQueriesReturned = 50 - }, requestMock.Object); + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetHighVariationQueriesDetailedSummaryReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetHighVariationQueriesDetailedSummaryReportRequest, request.Result.Query); + } + + [Test] + public async Task OverallResourceConsumption() + { + QueryStoreService service = GetMock(); + + MockRequest request = new(); + await service.HandleGetOverallResourceConsumptionReportRequest(new GetOverallResourceConsumptionReportParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + ReturnAllQueries = true, + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + MinNumberOfQueryPlans = 1, + TopQueriesReturned = 50 + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetOverallResourceConsumptionReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetOverallResourceConsumptionReportRequest, request.Result.Query); + } + + [Test] + public async Task RegressedQueries() + { + QueryStoreService service = GetMock(); + + MockRequest request = new(); + await service.HandleGetRegressedQueriesSummaryReportRequest(new GetRegressedQueriesReportParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + ReturnAllQueries = true, + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + MinNumberOfQueryPlans = 1, + TopQueriesReturned = 50 + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetRegressedQueriesSummaryReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetRegressedQueriesSummaryReportRequest, request.Result.Query); + + request = new(); + await service.HandleGetRegressedQueriesDetailedSummaryReportRequest(new GetRegressedQueriesReportParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + ReturnAllQueries = true, + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + MinNumberOfQueryPlans = 1, + TopQueriesReturned = 50 + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetRegressedQueriesDetailedSummaryReportRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetRegressedQueriesDetailedSummaryReportRequest, request.Result.Query); + } + + [Test] + public async Task PlanSummary() + { + QueryStoreService service = GetMock(); + + MockRequest request = new(); + await service.HandleGetPlanSummaryChartViewRequest(new GetPlanSummaryParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + QueryId = 97, + //TimeIntervalMode = TimeIntervalMode.SpecifiedRange, // TODO: uncomment once new QSM package is brought in + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetPlanSummaryChartViewRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetPlanSummaryChartViewRequest, request.Result.Query); + + request = new(); + await service.HandleGetPlanSummaryGridViewRequest(new GetPlanSummaryGridViewParams() + { + ConnectionOwnerUri = TestConnectionOwnerUri, + QueryId = 97, + //TimeIntervalMode = TimeIntervalMode.SpecifiedRange, // TODO: uncomment once new QSM package is brought in + SelectedMetric = Metric.WaitTime, + SelectedStatistic = Statistic.Stdev, + OrderByColumnId = "object_id", + Descending = true + }, request.Object); + + request.AssertSuccess(nameof(service.HandleGetPlanSummaryGridViewRequest)); + Assert.AreEqual(QueryStoreBaselines.HandleGetPlanSummaryGridViewRequest, request.Result.Query); + } + + private QueryStoreService GetMock() + { + Mock mock = new Mock(ConnectionService.Instance); + mock.Setup(s => s.GetAvailableMetrics(It.IsAny())) + .Returns(new List() + { + Metric.ClrTime, + Metric.CPUTime, + Metric.Dop, + Metric.Duration, + Metric.ExecutionCount, + Metric.LogicalReads, + Metric.LogicalWrites, + Metric.LogMemoryUsed, + Metric.MemoryConsumption, + Metric.PhysicalReads, + Metric.RowCount, + Metric.TempDbMemoryUsed, + Metric.WaitTime + }); - requestMock.AssertSuccess(nameof(service.HandleGetTopResourceConsumersSummaryReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetTopResourceConsumersSummaryReportRequest, requestMock.Result.Query); + return mock.Object; } } } From 31a15c9de93542e8d979ed0680b0f9d44b3626a8 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Wed, 16 Aug 2023 15:09:31 -0700 Subject: [PATCH 21/34] Adding test baselines --- .../GetHighVariationQueriesReport.cs | 2 +- .../GetOverallResourceConsumptionReport.cs | 4 +- .../Contracts/GetRegressedQueriesReport.cs | 6 +- .../QueryStore/QueryStoreService.cs | 16 + .../QueryStore/QueryStoreBaselines.cs | 722 +++++++++++++++++- .../QueryStore/QueryStoreTests.cs | 29 +- 6 files changed, 757 insertions(+), 22 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index 7b0cf6d210..6c7e34d86b 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -22,7 +22,7 @@ public override HighVariationConfiguration Convert() HighVariationConfiguration config = base.Convert(); config.TimeInterval = TimeInterval; - return base.Convert(); + return config; } public string GetOrderByColumnId() => OrderByColumnId; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs index ecc1285383..00c5b19628 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs @@ -13,8 +13,8 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetOverallResourceConsumptionReportParams : QueryConfigurationParams { - TimeInterval SpecifiedTimeInterval; - BucketInterval SpecifiedBucketInterval; + public TimeInterval SpecifiedTimeInterval; + public BucketInterval SpecifiedBucketInterval; public override OverallResourceConsumptionConfiguration Convert() { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index 638ccd3812..bc4d051551 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -13,9 +13,9 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetRegressedQueriesReportParams : QueryConfigurationParams { - TimeInterval TimeIntervalRecent; - TimeInterval TimeIntervalHistory; - long MinExecutionCount; + public TimeInterval TimeIntervalRecent; + public TimeInterval TimeIntervalHistory; + public long MinExecutionCount; public override RegressedQueriesConfiguration Convert() { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 1c298756e6..8c749c9696 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -355,6 +355,22 @@ await RunWithErrorHandling(() => RegressedQueriesConfiguration config = requestParams.Convert(); string query = RegressedQueriesQueryGenerator.RegressedQueryDetailedSummary(GetAvailableMetrics(requestParams), config, out _); + Dictionary sqlParams = new() + { + [RegressedQueriesQueryGenerator.ParameterRecentStartTime] = config.TimeIntervalRecent.StartDateTimeOffset, + [RegressedQueriesQueryGenerator.ParameterRecentEndTime] = config.TimeIntervalRecent.EndDateTimeOffset, + [RegressedQueriesQueryGenerator.ParameterHistoryStartTime] = config.TimeIntervalHistory.StartDateTimeOffset, + [RegressedQueriesQueryGenerator.ParameterHistoryEndTime] = config.TimeIntervalHistory.EndDateTimeOffset, + [RegressedQueriesQueryGenerator.ParameterMinExecutionCount] = config.MinExecutionCount + }; + + if (!config.ReturnAllQueries) + { + sqlParams[QueryGeneratorUtils.ParameterResultsRowCount] = config.TopQueriesReturned; + } + + query = PrependSqlParameters(query, sqlParams); + return new QueryStoreQueryResult() { Success = true, diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs index 1235fb4cec..37637bd2a4 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs @@ -132,14 +132,718 @@ A.num_plans num_plans WHERE A.num_plans >= 1 ORDER BY query_id DESC"; - public const string HandleGetForcedPlanQueriesReportRequest = @""; - public const string HandleGetTrackedQueriesReportRequest = @""; - public const string HandleGetHighVariationQueriesSummaryReportRequest = @""; - public const string HandleGetHighVariationQueriesDetailedSummaryReportRequest = @""; - public const string HandleGetOverallResourceConsumptionReportRequest = @""; - public const string HandleGetRegressedQueriesSummaryReportRequest = @""; - public const string HandleGetRegressedQueriesDetailedSummaryReportRequest = @""; - public const string HandleGetPlanSummaryChartViewRequest = @""; - public const string HandleGetPlanSummaryGridViewRequest = @""; + public const string HandleGetForcedPlanQueriesReportRequest = + @"WITH +A AS +( +SELECT + p.query_id query_id, + qt.query_sql_text query_sql_text, + p.plan_id plan_id, + p.force_failure_count force_failure_count, + p.last_force_failure_reason_desc last_force_failure_reason_desc, + p.last_execution_time last_execution_time, + q.object_id object_id, + ISNULL(OBJECT_NAME(q.object_id),'') object_name, + p.last_compile_start_time last_compile_start_time +FROM sys.query_store_plan p + JOIN sys.query_store_query q ON q.query_id = p.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +where p.is_forced_plan = 1 +), +B AS +( +SELECT + p.query_id query_id, + MAX(p.last_execution_time) last_execution_time, + COUNT(distinct p.plan_id) num_plans +FROM sys.query_store_plan p +GROUP BY p.query_id +HAVING MAX(CAST(p.is_forced_plan AS tinyint)) = 1 +) +SELECT + A.query_id, + A.query_sql_text, + A.plan_id, + A.force_failure_count, + A.last_compile_start_time, + A.last_force_failure_reason_desc, + B.num_plans, + B.last_execution_time, + A.last_execution_time, + A.object_id, + A.object_name +FROM A JOIN B ON A.query_id = B.query_id +WHERE B.num_plans >= 1 +ORDER BY query_id DESC"; + + public const string HandleGetTrackedQueriesReportRequest = +@"DECLARE @QuerySearchText NVARCHAR(max) = N'test search text'; + +SELECT TOP 500 q.query_id, q.query_text_id, qt.query_sql_text +FROM sys.query_store_query_text qt JOIN sys.query_store_query q ON q.query_text_id = qt.query_text_id +WHERE qt.query_sql_text LIKE ('%' + @QuerySearchText + '%')"; + + public const string HandleGetHighVariationQueriesSummaryReportRequest = +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; + +With wait_stats AS +( +SELECT + ws.plan_id plan_id, + ws.wait_category, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms)/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))*1,2) avg_query_wait_time, + ROUND(CONVERT(float, MIN(ws.min_query_wait_time_ms))*1,2) min_query_wait_time, + ROUND(CONVERT(float, MAX(ws.max_query_wait_time_ms))*1,2) max_query_wait_time, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time_ms*ws.stdev_query_wait_time_ms*(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms)))*1,2) stdev_query_wait_time, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms))*1,2) total_query_wait_time, + CAST(ROUND(SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms),0) AS BIGINT) count_executions, + MAX(itvl.end_time) last_execution_time, + MIN(itvl.start_time) first_execution_time +FROM sys.query_store_wait_stats ws + JOIN sys.query_store_runtime_stats_interval itvl ON itvl.runtime_stats_interval_id = ws.runtime_stats_interval_id +WHERE NOT (itvl.start_time > @interval_end_time OR itvl.end_time < @interval_start_time) +GROUP BY ws.plan_id, ws.runtime_stats_interval_id, ws.wait_category +) +SELECT + p.query_id query_id, + q.object_id object_id, + ISNULL(OBJECT_NAME(q.object_id),'') object_name, + qt.query_sql_text query_sql_text, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) stdev_query_wait_time, + ROUND(CONVERT(float, SUM(ws.avg_query_wait_time*ws.count_executions))/NULLIF(SUM(ws.count_executions), 0)*1,2) avg_query_wait_time, + MAX(ws.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id + JOIN sys.query_store_query q ON q.query_id = p.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +WHERE NOT (ws.first_execution_time > @interval_end_time OR ws.last_execution_time < @interval_start_time) +GROUP BY p.query_id, qt.query_sql_text, q.object_id +HAVING COUNT(distinct p.plan_id) >= 1 AND SUM(ws.count_executions) > 1 +ORDER BY query_id DESC"; + + public const string HandleGetHighVariationQueriesDetailedSummaryReportRequest = +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; + +With wait_stats AS +( +SELECT + ws.plan_id plan_id, + ws.wait_category, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms)/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))*1,2) avg_query_wait_time, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time_ms*ws.stdev_query_wait_time_ms*(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms)))*1,2) stdev_query_wait_time, + CAST(ROUND(SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms),0) AS BIGINT) count_executions, + MAX(itvl.end_time) last_execution_time, + MIN(itvl.start_time) first_execution_time +FROM sys.query_store_wait_stats ws + JOIN sys.query_store_runtime_stats_interval itvl ON itvl.runtime_stats_interval_id = ws.runtime_stats_interval_id +WHERE NOT (itvl.start_time > @interval_end_time OR itvl.end_time < @interval_start_time) +GROUP BY ws.plan_id, ws.runtime_stats_interval_id, ws.wait_category +), +wait_stats_variation AS +( +SELECT + p.query_id query_id, + q.object_id object_id, + ISNULL(OBJECT_NAME(q.object_id),'') object_name, + qt.query_sql_text query_sql_text, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) stdev_query_wait_time, + MAX(ws.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id + JOIN sys.query_store_query q ON q.query_id = p.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +WHERE NOT (ws.first_execution_time > @interval_end_time OR ws.last_execution_time < @interval_start_time) +GROUP BY p.query_id, qt.query_sql_text, q.object_id +), +other_stats_variation AS +( +SELECT + p.query_id query_id, + q.object_id object_id, + ISNULL(OBJECT_NAME(q.object_id),'') object_name, + qt.query_sql_text query_sql_text, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_clr_time*rs.stdev_clr_time*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_clr_time, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_cpu_time*rs.stdev_cpu_time*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_cpu_time, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_dop*rs.stdev_dop*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*1,0) stdev_dop, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_duration*rs.stdev_duration*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_duration, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_logical_io_reads*rs.stdev_logical_io_reads*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_logical_io_reads, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_logical_io_writes*rs.stdev_logical_io_writes*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_logical_io_writes, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_log_bytes_used*rs.stdev_log_bytes_used*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.0009765625,2) stdev_log_bytes_used, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_query_max_used_memory*rs.stdev_query_max_used_memory*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_query_max_used_memory, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_physical_io_reads*rs.stdev_physical_io_reads*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_physical_io_reads, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_rowcount*rs.stdev_rowcount*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*1,0) stdev_rowcount, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_tempdb_space_used*rs.stdev_tempdb_space_used*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_tempdb_space_used, + SUM(rs.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM sys.query_store_runtime_stats rs + JOIN sys.query_store_plan p ON p.plan_id = rs.plan_id + JOIN sys.query_store_query q ON q.query_id = p.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +WHERE NOT (rs.first_execution_time > @interval_end_time OR rs.last_execution_time < @interval_start_time) +GROUP BY p.query_id, qt.query_sql_text, q.object_id +) +SELECT + A.query_id query_id, + A.object_id object_id, + A.object_name object_name, + A.query_sql_text query_sql_text, + A.stdev_clr_time stdev_clr_time, + A.stdev_cpu_time stdev_cpu_time, + A.stdev_dop stdev_dop, + A.stdev_duration stdev_duration, + A.stdev_logical_io_reads stdev_logical_io_reads, + A.stdev_logical_io_writes stdev_logical_io_writes, + A.stdev_log_bytes_used stdev_log_bytes_used, + A.stdev_query_max_used_memory stdev_query_max_used_memory, + A.stdev_physical_io_reads stdev_physical_io_reads, + A.stdev_rowcount stdev_rowcount, + A.stdev_tempdb_space_used stdev_tempdb_space_used, + ISNULL(B.stdev_query_wait_time,0) stdev_query_wait_time, + A.count_executions count_executions, + A.num_plans num_plans +FROM other_stats_variation A LEFT JOIN wait_stats_variation B on A.query_id = B.query_id and A.query_sql_text = B.query_sql_text and A.object_id = B.object_id +WHERE A.num_plans >= 1 AND A.count_executions > 1 +ORDER BY query_id DESC"; + + public const string HandleGetOverallResourceConsumptionReportRequest = +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; + +WITH DateGenerator AS +( +SELECT CAST(@interval_start_time AS DATETIME) DatePlaceHolder +UNION ALL +SELECT DATEADD(hh, 1, DatePlaceHolder) +FROM DateGenerator +WHERE DATEADD(hh, 1, DatePlaceHolder) < @interval_end_time +), WaitStats AS +( +SELECT + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms))*1,2) total_query_wait_time +FROM sys.query_store_wait_stats ws + JOIN sys.query_store_runtime_stats_interval itvl ON itvl.runtime_stats_interval_id = ws.runtime_stats_interval_id +WHERE NOT (itvl.start_time > @interval_end_time OR itvl.end_time < @interval_start_time) +GROUP BY DATEDIFF(hh, 0, itvl.end_time) +), +UnionAll AS +( +SELECT + ROUND(CONVERT(float, SUM(rs.avg_clr_time*rs.count_executions))*0.001,2) as total_clr_time, + ROUND(CONVERT(float, SUM(rs.avg_cpu_time*rs.count_executions))*0.001,2) as total_cpu_time, + ROUND(CONVERT(float, SUM(rs.avg_dop*rs.count_executions))*1,0) as total_dop, + ROUND(CONVERT(float, SUM(rs.avg_duration*rs.count_executions))*0.001,2) as total_duration, + CONVERT(float, SUM(rs.count_executions)) as total_count_executions, + ROUND(CONVERT(float, SUM(rs.avg_logical_io_reads*rs.count_executions))*8,2) as total_logical_io_reads, + ROUND(CONVERT(float, SUM(rs.avg_logical_io_writes*rs.count_executions))*8,2) as total_logical_io_writes, + ROUND(CONVERT(float, SUM(rs.avg_log_bytes_used*rs.count_executions))*0.0009765625,2) as total_log_bytes_used, + ROUND(CONVERT(float, SUM(rs.avg_query_max_used_memory*rs.count_executions))*8,2) as total_query_max_used_memory, + ROUND(CONVERT(float, SUM(rs.avg_physical_io_reads*rs.count_executions))*8,2) as total_physical_io_reads, + ROUND(CONVERT(float, SUM(rs.avg_rowcount*rs.count_executions))*1,0) as total_rowcount, + ROUND(CONVERT(float, SUM(rs.avg_tempdb_space_used*rs.count_executions))*8,2) as total_tempdb_space_used, + DATEADD(hh, ((DATEDIFF(hh, 0, rs.last_execution_time))),0 ) as bucket_start, + DATEADD(hh, (1 + (DATEDIFF(hh, 0, rs.last_execution_time))), 0) as bucket_end +FROM sys.query_store_runtime_stats rs +WHERE NOT (rs.first_execution_time > @interval_end_time OR rs.last_execution_time < @interval_start_time) +GROUP BY DATEDIFF(hh, 0, rs.last_execution_time) +) +SELECT + total_clr_time, + total_cpu_time, + total_dop, + total_duration, + total_count_executions, + total_logical_io_reads, + total_logical_io_writes, + total_log_bytes_used, + total_query_max_used_memory, + total_physical_io_reads, + total_rowcount, + total_tempdb_space_used, + total_query_wait_time, + SWITCHOFFSET(bucket_start, DATEPART(tz, @interval_start_time)) , SWITCHOFFSET(bucket_end, DATEPART(tz, @interval_start_time)) +FROM +( +SELECT *, ROW_NUMBER() OVER (PARTITION BY bucket_start ORDER BY bucket_start, total_duration DESC) AS RowNumber +FROM UnionAll , WaitStats +) as UnionAllResults +WHERE UnionAllResults.RowNumber = 1 +OPTION (MAXRECURSION 0)"; + + public const string HandleGetRegressedQueriesSummaryReportRequest = +@"DECLARE @recent_start_time DATETIMEOFFSET = '2023-06-17T11:34:56.0000000-07:00'; +DECLARE @recent_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +DECLARE @history_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; +DECLARE @history_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +DECLARE @min_exec_count BIGINT = 1; + +WITH wait_stats AS +( +SELECT + ws.plan_id plan_id, + ws.wait_category, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms)/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))*1,2) avg_query_wait_time, + ROUND(CONVERT(float, MIN(ws.min_query_wait_time_ms))*1,2) min_query_wait_time, + ROUND(CONVERT(float, MAX(ws.max_query_wait_time_ms))*1,2) max_query_wait_time, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time_ms*ws.stdev_query_wait_time_ms*(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms)))*1,2) stdev_query_wait_time, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms))*1,2) total_query_wait_time, + CAST(ROUND(SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms),0) AS BIGINT) count_executions, + MAX(itvl.end_time) last_execution_time, + MIN(itvl.start_time) first_execution_time +FROM sys.query_store_wait_stats ws + JOIN sys.query_store_runtime_stats_interval itvl ON itvl.runtime_stats_interval_id = ws.runtime_stats_interval_id +WHERE NOT (itvl.start_time > @history_end_time OR itvl.end_time < @history_start_time) +GROUP BY ws.plan_id, ws.runtime_stats_interval_id, ws.wait_category +), +hist AS +( +SELECT + p.query_id query_id, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) stdev_query_wait_time, + MAX(ws.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id +WHERE NOT (ws.first_execution_time > @history_end_time OR ws.last_execution_time < @history_start_time) +GROUP BY p.query_id +), +recent AS +( +SELECT + p.query_id query_id, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) stdev_query_wait_time, + MAX(ws.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id +WHERE NOT (ws.first_execution_time > @recent_end_time OR ws.last_execution_time < @recent_start_time) +GROUP BY p.query_id +) +SELECT + results.query_id query_id, + results.object_id object_id, + ISNULL(OBJECT_NAME(results.object_id),'') object_name, + results.query_sql_text query_sql_text, + results.query_wait_time_regr_perc_recent query_wait_time_regr_perc_recent, + results.stdev_query_wait_time_recent stdev_query_wait_time_recent, + results.stdev_query_wait_time_hist stdev_query_wait_time_hist, + ISNULL(results.count_executions_recent, 0) count_executions_recent, + ISNULL(results.count_executions_hist, 0) count_executions_hist, + queries.num_plans num_plans +FROM +( +SELECT + hist.query_id query_id, + q.object_id object_id, + qt.query_sql_text query_sql_text, + ROUND(CONVERT(float, recent.stdev_query_wait_time-hist.stdev_query_wait_time)/NULLIF(hist.stdev_query_wait_time,0)*100.0, 2) query_wait_time_regr_perc_recent, + ROUND(recent.stdev_query_wait_time, 2) stdev_query_wait_time_recent, + ROUND(hist.stdev_query_wait_time, 2) stdev_query_wait_time_hist, + recent.count_executions count_executions_recent, + hist.count_executions count_executions_hist +FROM hist + JOIN recent ON hist.query_id = recent.query_id + JOIN sys.query_store_query q ON q.query_id = hist.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +WHERE + recent.count_executions >= @min_exec_count +) AS results +JOIN +( +SELECT + p.query_id query_id, + COUNT(distinct p.plan_id) num_plans +FROM sys.query_store_plan p +GROUP BY p.query_id +HAVING COUNT(distinct p.plan_id) >= 1 +) AS queries ON queries.query_id = results.query_id +WHERE query_wait_time_regr_perc_recent > 0 +OPTION (MERGE JOIN)"; + + public const string HandleGetRegressedQueriesDetailedSummaryReportRequest = +@"DECLARE @recent_start_time DATETIMEOFFSET = '2023-06-17T11:34:56.0000000-07:00'; +DECLARE @recent_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +DECLARE @history_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; +DECLARE @history_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +DECLARE @min_exec_count BIGINT = 1; + +WITH +wait_stats AS +( +SELECT + ws.plan_id plan_id, + ws.wait_category, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms)/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))*1,2) avg_query_wait_time, + ROUND(CONVERT(float, MIN(ws.min_query_wait_time_ms))*1,2) min_query_wait_time, + ROUND(CONVERT(float, MAX(ws.max_query_wait_time_ms))*1,2) max_query_wait_time, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time_ms*ws.stdev_query_wait_time_ms*(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms)))*1,2) stdev_query_wait_time, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms))*1,2) total_query_wait_time, + CAST(ROUND(SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms),0) AS BIGINT) count_executions, + MAX(itvl.end_time) last_execution_time, + MIN(itvl.start_time) first_execution_time +FROM sys.query_store_wait_stats ws + JOIN sys.query_store_runtime_stats_interval itvl ON itvl.runtime_stats_interval_id = ws.runtime_stats_interval_id +WHERE NOT (itvl.start_time > @history_end_time OR itvl.end_time < @history_start_time) +GROUP BY ws.plan_id, ws.runtime_stats_interval_id, ws.wait_category +), +wait_stats_hist AS +( +SELECT + p.query_id query_id, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) stdev_query_wait_time, + MAX(ws.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id +WHERE NOT (ws.first_execution_time > @history_end_time OR ws.last_execution_time < @history_start_time) +GROUP BY p.query_id +), +other_hist AS +( +SELECT + p.query_id query_id, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_clr_time*rs.stdev_clr_time*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_clr_time, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_cpu_time*rs.stdev_cpu_time*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_cpu_time, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_dop*rs.stdev_dop*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*1,0) stdev_dop, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_duration*rs.stdev_duration*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_duration, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_logical_io_reads*rs.stdev_logical_io_reads*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_logical_io_reads, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_logical_io_writes*rs.stdev_logical_io_writes*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_logical_io_writes, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_log_bytes_used*rs.stdev_log_bytes_used*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.0009765625,2) stdev_log_bytes_used, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_query_max_used_memory*rs.stdev_query_max_used_memory*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_query_max_used_memory, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_physical_io_reads*rs.stdev_physical_io_reads*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_physical_io_reads, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_rowcount*rs.stdev_rowcount*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*1,0) stdev_rowcount, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_tempdb_space_used*rs.stdev_tempdb_space_used*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_tempdb_space_used, + SUM(rs.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM sys.query_store_runtime_stats rs + JOIN sys.query_store_plan p ON p.plan_id = rs.plan_id +WHERE NOT (rs.first_execution_time > @history_end_time OR rs.last_execution_time < @history_start_time) +GROUP BY p.query_id +), +hist AS +( +SELECT + other_hist.query_id, + other_hist.stdev_clr_time stdev_clr_time, + other_hist.stdev_cpu_time stdev_cpu_time, + other_hist.stdev_dop stdev_dop, + other_hist.stdev_duration stdev_duration, + other_hist.stdev_logical_io_reads stdev_logical_io_reads, + other_hist.stdev_logical_io_writes stdev_logical_io_writes, + other_hist.stdev_log_bytes_used stdev_log_bytes_used, + other_hist.stdev_query_max_used_memory stdev_query_max_used_memory, + other_hist.stdev_physical_io_reads stdev_physical_io_reads, + other_hist.stdev_rowcount stdev_rowcount, + other_hist.stdev_tempdb_space_used stdev_tempdb_space_used, + ISNULL(wait_stats_hist.stdev_query_wait_time, 0) stdev_query_wait_time, + other_hist.count_executions, + wait_stats_hist.count_executions wait_stats_count_executions, + other_hist.num_plans +FROM other_hist + LEFT JOIN wait_stats_hist ON wait_stats_hist.query_id = other_hist.query_id +), +wait_stats_recent AS +( +SELECT + p.query_id query_id, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) stdev_query_wait_time, + MAX(ws.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id +WHERE NOT (ws.first_execution_time > @recent_end_time OR ws.last_execution_time < @recent_start_time) +GROUP BY p.query_id +), +other_recent AS +( +SELECT + p.query_id query_id, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_clr_time*rs.stdev_clr_time*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_clr_time, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_cpu_time*rs.stdev_cpu_time*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_cpu_time, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_dop*rs.stdev_dop*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*1,0) stdev_dop, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_duration*rs.stdev_duration*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.001,2) stdev_duration, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_logical_io_reads*rs.stdev_logical_io_reads*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_logical_io_reads, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_logical_io_writes*rs.stdev_logical_io_writes*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_logical_io_writes, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_log_bytes_used*rs.stdev_log_bytes_used*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*0.0009765625,2) stdev_log_bytes_used, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_query_max_used_memory*rs.stdev_query_max_used_memory*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_query_max_used_memory, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_physical_io_reads*rs.stdev_physical_io_reads*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_physical_io_reads, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_rowcount*rs.stdev_rowcount*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*1,0) stdev_rowcount, + ROUND(CONVERT(float, SQRT( SUM(rs.stdev_tempdb_space_used*rs.stdev_tempdb_space_used*rs.count_executions)/NULLIF(SUM(rs.count_executions), 0)))*8,2) stdev_tempdb_space_used, + SUM(rs.count_executions) count_executions, + COUNT(distinct p.plan_id) num_plans +FROM sys.query_store_runtime_stats rs + JOIN sys.query_store_plan p ON p.plan_id = rs.plan_id +WHERE NOT (rs.first_execution_time > @recent_end_time OR rs.last_execution_time < @recent_start_time) +GROUP BY p.query_id +), +recent AS +( +SELECT + other_recent.query_id, + other_recent.stdev_clr_time stdev_clr_time, + other_recent.stdev_cpu_time stdev_cpu_time, + other_recent.stdev_dop stdev_dop, + other_recent.stdev_duration stdev_duration, + other_recent.stdev_logical_io_reads stdev_logical_io_reads, + other_recent.stdev_logical_io_writes stdev_logical_io_writes, + other_recent.stdev_log_bytes_used stdev_log_bytes_used, + other_recent.stdev_query_max_used_memory stdev_query_max_used_memory, + other_recent.stdev_physical_io_reads stdev_physical_io_reads, + other_recent.stdev_rowcount stdev_rowcount, + other_recent.stdev_tempdb_space_used stdev_tempdb_space_used, + ISNULL(wait_stats_recent.stdev_query_wait_time, 0) stdev_query_wait_time, + other_recent.count_executions, + wait_stats_recent.count_executions wait_stats_count_executions, + other_recent.num_plans +FROM other_recent + LEFT JOIN wait_stats_recent ON wait_stats_recent.query_id = other_recent.query_id +) +SELECT + results.query_id query_id, + results.object_id object_id, + ISNULL(OBJECT_NAME(results.object_id),'') object_name, + results.query_sql_text query_sql_text, + results.clr_time_regr_perc_recent clr_time_regr_perc_recent, + results.stdev_clr_time_recent stdev_clr_time_recent, + results.stdev_clr_time_hist stdev_clr_time_hist, + results.cpu_time_regr_perc_recent cpu_time_regr_perc_recent, + results.stdev_cpu_time_recent stdev_cpu_time_recent, + results.stdev_cpu_time_hist stdev_cpu_time_hist, + results.dop_regr_perc_recent dop_regr_perc_recent, + results.stdev_dop_recent stdev_dop_recent, + results.stdev_dop_hist stdev_dop_hist, + results.duration_regr_perc_recent duration_regr_perc_recent, + results.stdev_duration_recent stdev_duration_recent, + results.stdev_duration_hist stdev_duration_hist, + results.logical_io_reads_regr_perc_recent logical_io_reads_regr_perc_recent, + results.stdev_logical_io_reads_recent stdev_logical_io_reads_recent, + results.stdev_logical_io_reads_hist stdev_logical_io_reads_hist, + results.logical_io_writes_regr_perc_recent logical_io_writes_regr_perc_recent, + results.stdev_logical_io_writes_recent stdev_logical_io_writes_recent, + results.stdev_logical_io_writes_hist stdev_logical_io_writes_hist, + results.log_bytes_used_regr_perc_recent log_bytes_used_regr_perc_recent, + results.stdev_log_bytes_used_recent stdev_log_bytes_used_recent, + results.stdev_log_bytes_used_hist stdev_log_bytes_used_hist, + results.query_max_used_memory_regr_perc_recent query_max_used_memory_regr_perc_recent, + results.stdev_query_max_used_memory_recent stdev_query_max_used_memory_recent, + results.stdev_query_max_used_memory_hist stdev_query_max_used_memory_hist, + results.physical_io_reads_regr_perc_recent physical_io_reads_regr_perc_recent, + results.stdev_physical_io_reads_recent stdev_physical_io_reads_recent, + results.stdev_physical_io_reads_hist stdev_physical_io_reads_hist, + results.rowcount_regr_perc_recent rowcount_regr_perc_recent, + results.stdev_rowcount_recent stdev_rowcount_recent, + results.stdev_rowcount_hist stdev_rowcount_hist, + results.tempdb_space_used_regr_perc_recent tempdb_space_used_regr_perc_recent, + results.stdev_tempdb_space_used_recent stdev_tempdb_space_used_recent, + results.stdev_tempdb_space_used_hist stdev_tempdb_space_used_hist, + results.query_wait_time_regr_perc_recent query_wait_time_regr_perc_recent, + results.stdev_query_wait_time_recent stdev_query_wait_time_recent, + results.stdev_query_wait_time_hist stdev_query_wait_time_hist, + ISNULL(results.count_executions_recent, 0) count_executions_recent, + ISNULL(results.count_executions_hist, 0) count_executions_hist, + queries.num_plans num_plans +FROM +( +SELECT + hist.query_id query_id, + q.object_id object_id, + qt.query_sql_text query_sql_text, + ROUND(CONVERT(float, recent.stdev_clr_time-hist.stdev_clr_time)/NULLIF(hist.stdev_clr_time,0)*100.0, 2) clr_time_regr_perc_recent, + ROUND(recent.stdev_clr_time, 2) stdev_clr_time_recent, + ROUND(hist.stdev_clr_time, 2) stdev_clr_time_hist, + ROUND(CONVERT(float, recent.stdev_cpu_time-hist.stdev_cpu_time)/NULLIF(hist.stdev_cpu_time,0)*100.0, 2) cpu_time_regr_perc_recent, + ROUND(recent.stdev_cpu_time, 2) stdev_cpu_time_recent, + ROUND(hist.stdev_cpu_time, 2) stdev_cpu_time_hist, + ROUND(CONVERT(float, recent.stdev_dop-hist.stdev_dop)/NULLIF(hist.stdev_dop,0)*100.0, 2) dop_regr_perc_recent, + ROUND(recent.stdev_dop, 2) stdev_dop_recent, + ROUND(hist.stdev_dop, 2) stdev_dop_hist, + ROUND(CONVERT(float, recent.stdev_duration-hist.stdev_duration)/NULLIF(hist.stdev_duration,0)*100.0, 2) duration_regr_perc_recent, + ROUND(recent.stdev_duration, 2) stdev_duration_recent, + ROUND(hist.stdev_duration, 2) stdev_duration_hist, + ROUND(CONVERT(float, recent.stdev_logical_io_reads-hist.stdev_logical_io_reads)/NULLIF(hist.stdev_logical_io_reads,0)*100.0, 2) logical_io_reads_regr_perc_recent, + ROUND(recent.stdev_logical_io_reads, 2) stdev_logical_io_reads_recent, + ROUND(hist.stdev_logical_io_reads, 2) stdev_logical_io_reads_hist, + ROUND(CONVERT(float, recent.stdev_logical_io_writes-hist.stdev_logical_io_writes)/NULLIF(hist.stdev_logical_io_writes,0)*100.0, 2) logical_io_writes_regr_perc_recent, + ROUND(recent.stdev_logical_io_writes, 2) stdev_logical_io_writes_recent, + ROUND(hist.stdev_logical_io_writes, 2) stdev_logical_io_writes_hist, + ROUND(CONVERT(float, recent.stdev_log_bytes_used-hist.stdev_log_bytes_used)/NULLIF(hist.stdev_log_bytes_used,0)*100.0, 2) log_bytes_used_regr_perc_recent, + ROUND(recent.stdev_log_bytes_used, 2) stdev_log_bytes_used_recent, + ROUND(hist.stdev_log_bytes_used, 2) stdev_log_bytes_used_hist, + ROUND(CONVERT(float, recent.stdev_query_max_used_memory-hist.stdev_query_max_used_memory)/NULLIF(hist.stdev_query_max_used_memory,0)*100.0, 2) query_max_used_memory_regr_perc_recent, + ROUND(recent.stdev_query_max_used_memory, 2) stdev_query_max_used_memory_recent, + ROUND(hist.stdev_query_max_used_memory, 2) stdev_query_max_used_memory_hist, + ROUND(CONVERT(float, recent.stdev_physical_io_reads-hist.stdev_physical_io_reads)/NULLIF(hist.stdev_physical_io_reads,0)*100.0, 2) physical_io_reads_regr_perc_recent, + ROUND(recent.stdev_physical_io_reads, 2) stdev_physical_io_reads_recent, + ROUND(hist.stdev_physical_io_reads, 2) stdev_physical_io_reads_hist, + ROUND(CONVERT(float, recent.stdev_rowcount-hist.stdev_rowcount)/NULLIF(hist.stdev_rowcount,0)*100.0, 2) rowcount_regr_perc_recent, + ROUND(recent.stdev_rowcount, 2) stdev_rowcount_recent, + ROUND(hist.stdev_rowcount, 2) stdev_rowcount_hist, + ROUND(CONVERT(float, recent.stdev_tempdb_space_used-hist.stdev_tempdb_space_used)/NULLIF(hist.stdev_tempdb_space_used,0)*100.0, 2) tempdb_space_used_regr_perc_recent, + ROUND(recent.stdev_tempdb_space_used, 2) stdev_tempdb_space_used_recent, + ROUND(hist.stdev_tempdb_space_used, 2) stdev_tempdb_space_used_hist, + ROUND(CONVERT(float, recent.stdev_query_wait_time-hist.stdev_query_wait_time)/NULLIF(hist.stdev_query_wait_time,0)*100.0, 2) query_wait_time_regr_perc_recent, + ROUND(recent.stdev_query_wait_time, 2) stdev_query_wait_time_recent, + ROUND(hist.stdev_query_wait_time, 2) stdev_query_wait_time_hist, + recent.count_executions count_executions_recent, + hist.count_executions count_executions_hist +FROM hist + JOIN recent ON hist.query_id = recent.query_id + JOIN sys.query_store_query q ON q.query_id = hist.query_id + JOIN sys.query_store_query_text qt ON q.query_text_id = qt.query_text_id +WHERE + recent.count_executions >= @min_exec_count +) AS results +JOIN +( +SELECT + p.query_id query_id, + COUNT(distinct p.plan_id) num_plans +FROM sys.query_store_plan p +GROUP BY p.query_id +HAVING COUNT(distinct p.plan_id) >= 1 +) AS queries ON queries.query_id = results.query_id +OPTION (MERGE JOIN)"; + + public const string HandleGetPlanSummaryChartViewRequest = +@"DECLARE @query_id BIGINT = 97; +DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; + +WITH wait_stats AS +( +SELECT + ws.plan_id plan_id, + ws.execution_type, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms)/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))*1,2) avg_query_wait_time, + ROUND(CONVERT(float, MIN(ws.min_query_wait_time_ms))*1,2) min_query_wait_time, + ROUND(CONVERT(float, MAX(ws.max_query_wait_time_ms))*1,2) max_query_wait_time, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time_ms*ws.stdev_query_wait_time_ms*(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms)))*1,2) stdev_query_wait_time, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms))*1,2) total_query_wait_time, + CAST(ROUND(SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms),0) AS BIGINT) count_executions, + MAX(itvl.end_time) last_execution_time, + MIN(itvl.start_time) first_execution_time + FROM + ( + SELECT *, LAST_VALUE(last_query_wait_time_ms) OVER (order by plan_id, runtime_stats_interval_id, execution_type, wait_category) last_query_wait_time + FROM sys.query_store_wait_stats + ) +AS ws + JOIN sys.query_store_runtime_stats_interval itvl ON itvl.runtime_stats_interval_id = ws.runtime_stats_interval_id +WHERE NOT (itvl.start_time > @interval_end_time OR itvl.end_time < @interval_start_time) +GROUP BY ws.plan_id, ws.runtime_stats_interval_id, ws.execution_type, ws.wait_category +), + bucketizer as + ( + SELECT + ws.plan_id as plan_id, + ws.execution_type as execution_type, + MAX(ws.count_executions) count_executions, + DATEADD(d, ((DATEDIFF(d, 0, ws.last_execution_time))),0 ) as bucket_start, + DATEADD(d, (1 + (DATEDIFF(d, 0, ws.last_execution_time))), 0) as bucket_end, + ROUND(CONVERT(float, SUM(ws.avg_query_wait_time*ws.count_executions))/NULLIF(SUM(ws.count_executions), 0)*1,2) as avg_query_wait_time, + ROUND(CONVERT(float, MAX(ws.max_query_wait_time))*1,2) as max_query_wait_time, + ROUND(CONVERT(float, MIN(ws.min_query_wait_time))*1,2) as min_query_wait_time, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2) as stdev_query_wait_time, + ISNULL(ROUND(CONVERT(float, (SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0))*SUM(ws.count_executions)) / NULLIF(SUM(ws.avg_query_wait_time*ws.count_executions), 0)),2), 0) as variation_query_wait_time, + ROUND(CONVERT(float, SUM(ws.avg_query_wait_time*ws.count_executions))*1,2) as total_query_wait_time + FROM + wait_stats ws + JOIN sys.query_store_plan p ON p.plan_id = ws.plan_id + WHERE + p.query_id = @query_id + AND NOT (ws.first_execution_time > @interval_end_time OR ws.last_execution_time < @interval_start_time) + GROUP BY + ws.plan_id, + ws.execution_type, + DATEDIFF(d, 0, ws.last_execution_time) + ), + is_forced as + ( + SELECT is_forced_plan, plan_id + FROM sys.query_store_plan + ) +SELECT b.plan_id as plan_id, + is_forced_plan, + execution_type, + count_executions, + SWITCHOFFSET(bucket_start, DATEPART(tz, @interval_start_time)) AS bucket_start, + SWITCHOFFSET(bucket_end, DATEPART(tz, @interval_start_time)) AS bucket_end, + avg_query_wait_time, + max_query_wait_time, + min_query_wait_time, + stdev_query_wait_time, + variation_query_wait_time, + total_query_wait_time +FROM bucketizer b +JOIN is_forced f ON f.plan_id = b.plan_id"; + + public const string HandleGetPlanSummaryGridViewRequest = +@"DECLARE @query_id BIGINT = 97; +DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; + +WITH wait_stats AS +( +SELECT + ws.plan_id plan_id, + ws.execution_type, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms)/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))*1,2) avg_query_wait_time, + ROUND(CONVERT(float, MIN(ws.min_query_wait_time_ms))*1,2) min_query_wait_time, + ROUND(CONVERT(float, MAX(ws.max_query_wait_time_ms))*1,2) max_query_wait_time, + ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time_ms*ws.stdev_query_wait_time_ms*(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms))/SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms)))*1,2) stdev_query_wait_time, + ROUND(CONVERT(float, SUM(ws.total_query_wait_time_ms))*1,2) total_query_wait_time, + ROUND(CONVERT(float, MIN(ws.last_query_wait_time))*1,2) last_query_wait_time, + CAST(ROUND(SUM(ws.total_query_wait_time_ms/ws.avg_query_wait_time_ms),0) AS BIGINT) count_executions, + MAX(itvl.end_time) last_execution_time, + MIN(itvl.start_time) first_execution_time + FROM + ( + SELECT *, LAST_VALUE(last_query_wait_time_ms) OVER (order by plan_id, runtime_stats_interval_id, execution_type, wait_category) last_query_wait_time + FROM sys.query_store_wait_stats + ) +AS ws + JOIN sys.query_store_runtime_stats_interval itvl ON itvl.runtime_stats_interval_id = ws.runtime_stats_interval_id +WHERE NOT (itvl.start_time > @interval_end_time OR itvl.end_time < @interval_start_time) +GROUP BY ws.plan_id, ws.runtime_stats_interval_id, ws.execution_type, ws.wait_category +), + last_table AS + ( + SELECT + p.plan_id plan_id, + first_value(ws.last_query_wait_time) OVER (PARTITION BY p.plan_id ORDER BY ws.last_execution_time DESC) last_value + FROM + wait_stats ws + JOIN + sys.query_store_plan p ON p.plan_id = ws.plan_id + WHERE + p.query_id = @query_id + ) +SELECT p.plan_id, + MAX(CONVERT(int, p.is_forced_plan)) is_forced_plan, + SUM(distinct ws.execution_type) execution_type, + MAX(ws.count_executions) count_executions, + ROUND(ROUND(CONVERT(float, MIN(ws.min_query_wait_time))*1,2), 2) min_query_wait_time, + ROUND(ROUND(CONVERT(float, MAX(ws.max_query_wait_time))*1,2), 2) max_query_wait_time, + ROUND(ROUND(CONVERT(float, SUM(ws.avg_query_wait_time*ws.count_executions))/NULLIF(SUM(ws.count_executions), 0)*1,2), 2) avg_query_wait_time, + ROUND(ROUND(CONVERT(float, SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0)))*1,2), 2) stdev_query_wait_time, + ROUND(ISNULL(ROUND(CONVERT(float, (SQRT( SUM(ws.stdev_query_wait_time*ws.stdev_query_wait_time*ws.count_executions)/NULLIF(SUM(ws.count_executions), 0))*SUM(ws.count_executions)) / NULLIF(SUM(ws.avg_query_wait_time*ws.count_executions), 0)),2), 0), 2) variation_query_wait_time, + ROUND(max(l.last_value), 2) last_query_wait_time, + ROUND(ROUND(CONVERT(float, SUM(ws.avg_query_wait_time*ws.count_executions))*1,2), 2) total_query_wait_time, + SWITCHOFFSET(MIN(ws.first_execution_time), DATEPART(tz, @interval_start_time)) first_execution_time, + SWITCHOFFSET(MAX(ws.last_execution_time), DATEPART(tz, @interval_start_time)) last_execution_time +FROM + wait_stats ws +JOIN + sys.query_store_plan p ON p.plan_id = ws.plan_id +JOIN + last_table l ON p.plan_id = l.plan_id +WHERE p.query_id = @query_id + AND NOT (ws.first_execution_time > @interval_end_time OR ws.last_execution_time < @interval_start_time) +GROUP BY p.plan_id, ws.execution_type +ORDER BY count_executions DESC"; } } diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs index 2e1b22739c..06c8a068fb 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs @@ -22,7 +22,9 @@ public class QueryStoreTests : TestBase private const string TestConnectionOwnerUri = "FakeConnectionOwnerUri"; private static DateTimeOffset TestWindowStart = DateTimeOffset.Parse("6/10/2023 12:34:56 PM -07:00"); private static DateTimeOffset TestWindowEnd = TestWindowStart.AddDays(7); + private static DateTimeOffset TestWindowRecentStart = TestWindowEnd.AddHours(-1); private static TimeInterval TestTimeInterval { get => new TimeInterval(TestWindowStart, TestWindowEnd); } + private static TimeInterval RecentTestTimeInterval { get => new TimeInterval(TestWindowRecentStart, TestWindowEnd); } [Test] public async Task TopResourceConsumers() @@ -79,7 +81,8 @@ await service.HandleGetForcedPlanQueriesReportRequest(new GetForcedPlanQueriesRe OrderByColumnId = "query_id", Descending = true, MinNumberOfQueryPlans = 1, - TopQueriesReturned = 50 + TopQueriesReturned = 50, + TimeInterval = TestTimeInterval }, request.Object); request.AssertSuccess(nameof(service.HandleGetForcedPlanQueriesReportRequest)); @@ -116,7 +119,8 @@ await service.HandleGetHighVariationQueriesSummaryReportRequest(new GetHighVaria OrderByColumnId = "query_id", Descending = true, MinNumberOfQueryPlans = 1, - TopQueriesReturned = 50 + TopQueriesReturned = 50, + TimeInterval = TestTimeInterval }, request.Object); request.AssertSuccess(nameof(service.HandleGetHighVariationQueriesSummaryReportRequest)); @@ -132,7 +136,8 @@ await service.HandleGetHighVariationQueriesDetailedSummaryReportRequest(new GetH OrderByColumnId = "query_id", Descending = true, MinNumberOfQueryPlans = 1, - TopQueriesReturned = 50 + TopQueriesReturned = 50, + TimeInterval = TestTimeInterval }, request.Object); request.AssertSuccess(nameof(service.HandleGetHighVariationQueriesDetailedSummaryReportRequest)); @@ -152,7 +157,9 @@ await service.HandleGetOverallResourceConsumptionReportRequest(new GetOverallRes SelectedMetric = Metric.WaitTime, SelectedStatistic = Statistic.Stdev, MinNumberOfQueryPlans = 1, - TopQueriesReturned = 50 + TopQueriesReturned = 50, + SpecifiedTimeInterval = TestTimeInterval, + SpecifiedBucketInterval = BucketInterval.Hour }, request.Object); request.AssertSuccess(nameof(service.HandleGetOverallResourceConsumptionReportRequest)); @@ -172,7 +179,10 @@ await service.HandleGetRegressedQueriesSummaryReportRequest(new GetRegressedQuer SelectedMetric = Metric.WaitTime, SelectedStatistic = Statistic.Stdev, MinNumberOfQueryPlans = 1, - TopQueriesReturned = 50 + TopQueriesReturned = 50, + MinExecutionCount = 1, + TimeIntervalHistory = TestTimeInterval, + TimeIntervalRecent = RecentTestTimeInterval }, request.Object); request.AssertSuccess(nameof(service.HandleGetRegressedQueriesSummaryReportRequest)); @@ -186,7 +196,10 @@ await service.HandleGetRegressedQueriesDetailedSummaryReportRequest(new GetRegre SelectedMetric = Metric.WaitTime, SelectedStatistic = Statistic.Stdev, MinNumberOfQueryPlans = 1, - TopQueriesReturned = 50 + TopQueriesReturned = 50, + MinExecutionCount = 1, + TimeIntervalHistory = TestTimeInterval, + TimeIntervalRecent = RecentTestTimeInterval }, request.Object); request.AssertSuccess(nameof(service.HandleGetRegressedQueriesDetailedSummaryReportRequest)); @@ -203,6 +216,7 @@ await service.HandleGetPlanSummaryChartViewRequest(new GetPlanSummaryParams() { ConnectionOwnerUri = TestConnectionOwnerUri, QueryId = 97, + TimeInterval = TestTimeInterval, //TimeIntervalMode = TimeIntervalMode.SpecifiedRange, // TODO: uncomment once new QSM package is brought in SelectedMetric = Metric.WaitTime, SelectedStatistic = Statistic.Stdev @@ -216,10 +230,11 @@ await service.HandleGetPlanSummaryGridViewRequest(new GetPlanSummaryGridViewPara { ConnectionOwnerUri = TestConnectionOwnerUri, QueryId = 97, + TimeInterval = TestTimeInterval, //TimeIntervalMode = TimeIntervalMode.SpecifiedRange, // TODO: uncomment once new QSM package is brought in SelectedMetric = Metric.WaitTime, SelectedStatistic = Statistic.Stdev, - OrderByColumnId = "object_id", + OrderByColumnId = "count_executions", Descending = true }, request.Object); From 3756a380af9a55ed0d612c0ff866896ba6a6c0ab Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Thu, 17 Aug 2023 12:26:20 -0700 Subject: [PATCH 22/34] Updating nuget package --- Packages.props | 2 +- ...r.Management.QueryStoreModel.163.16.2.nupkg | Bin 146271 -> 0 bytes ...r.Management.QueryStoreModel.163.26.1.nupkg | Bin 0 -> 146338 bytes .../Contracts/PlanSummaryReportParams.cs | 5 +++-- .../Contracts/QueryStoreReportParams.cs | 5 ----- .../QueryStore/QueryStoreService.cs | 13 ++----------- 6 files changed, 6 insertions(+), 19 deletions(-) delete mode 100644 bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.16.2.nupkg create mode 100644 bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.26.1.nupkg diff --git a/Packages.props b/Packages.props index cc1a616ce6..a149431ae3 100644 --- a/Packages.props +++ b/Packages.props @@ -29,7 +29,7 @@ - + diff --git a/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.16.2.nupkg b/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.16.2.nupkg deleted file mode 100644 index dd8994ef78fbab921b12b873e0abde83b29e15e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146271 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 diff --git a/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.26.1.nupkg b/bin/nuget/Microsoft.SqlServer.Management.QueryStoreModel.163.26.1.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..ba61aa4023c4a8fa9e77643038db51402f9aaee3 GIT binary patch literal 146338 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

;)bKg~Dp4%zXon^I? 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

xv@n#wn;?Y2>Gv4e9|*7Citg$)O6Y&NN-KP(acf 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

&wZ&j{j5Qy=b5pR0~TaKJQQ!Kn~D50l0y>6PP3Y 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∈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 { public long QueryId; - //public PlanTimeIntervalMode TimeIntervalMode; // TODO: make enum public in QueryStoreModel + public PlanTimeIntervalMode TimeIntervalMode; public TimeInterval TimeInterval; public Metric SelectedMetric; public Statistic SelectedStatistic; @@ -22,7 +23,7 @@ public class GetPlanSummaryParams : TypedQueryStoreReportParams new() { QueryId = QueryId, - //TimeIntervalMode = TimeIntervalMode + TimeIntervalMode = TimeIntervalMode, TimeInterval = TimeInterval, SelectedMetric = SelectedMetric, SelectedStatistic = SelectedStatistic diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs index bf9f4dbe64..e607753655 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -28,11 +28,6 @@ public abstract class TypedQueryStoreReportParams : QueryStoreReportParams public bool ReturnAllQueries; public int MinNumberOfQueryPlans; - ///

- /// Column name by which to order, if any. Not all query generators involve ordering. - /// - - public override T Convert() => new T() { SelectedMetric = SelectedMetric, diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index 8c749c9696..d4899dac06 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -28,7 +28,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore { /// - /// Main class for SqlProjects service + /// Main class for Query Store service /// public class QueryStoreService : BaseService { @@ -49,11 +49,6 @@ private QueryStoreService() ConnectionService = ConnectionService.Instance; } - internal QueryStoreService(ConnectionService connService) - { - ConnectionService = connService; - } - /// /// Initializes the service instance /// @@ -527,8 +522,6 @@ private static string PrependSqlParameters(string query, Dictionary types = new HashSet(); - /// /// Converts an object (that would otherwise be set as a SqlParameter value) to an entirely TSQL representation. /// Only handles the same subset of object types that Query Store query generators use: @@ -538,8 +531,6 @@ private static string PrependSqlParameters(string query, Dictionarydata type and value portions of a parameter declaration, in the form "INT = 999" internal static string GetTSqlRepresentation(object paramValue) { - types.Add(paramValue.GetType()); - switch (paramValue) { case int i: @@ -547,7 +538,7 @@ internal static string GetTSqlRepresentation(object paramValue) case long l: return $"BIGINT = {l}"; case string s: - return $"NVARCHAR(max) = N'{s}'"; // TODO: escape + return $"NVARCHAR(max) = N'{s.Replace("'", "''")}'"; case DateTimeOffset dto: return $"DATETIMEOFFSET = '{dto.ToString("O", CultureInfo.InvariantCulture)}'"; // "O" = ISO 8601 standard datetime format default: From 8a6cb0b82a7075b7321ba0c2158d2fdc23867bac Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Thu, 17 Aug 2023 12:30:34 -0700 Subject: [PATCH 23/34] Adding get/set --- .../Contracts/GetForcedPlanQueriesReport.cs | 6 +++--- .../Contracts/GetHighVariationQueriesReport.cs | 6 +++--- .../GetOverallResourceConsumptionReport.cs | 4 ++-- .../Contracts/GetRegressedQueriesReport.cs | 6 +++--- .../Contracts/GetTopResourceConsumersReport.cs | 6 +++--- .../Contracts/GetTrackedQueryReport.cs | 2 +- .../Contracts/PlanSummaryReportParams.cs | 18 +++++++++--------- .../Contracts/QueryStoreReportParams.cs | 12 ++++++------ 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index db57a2eac1..22a40dfa5e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -13,9 +13,9 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetForcedPlanQueriesReportParams : QueryConfigurationParams, IOrderableQueryParams { - public TimeInterval TimeInterval; - public string OrderByColumnId; - public bool Descending; + public TimeInterval TimeInterval { get; set; } + public string OrderByColumnId { get; set; } + public bool Descending { get; set; } public override ForcedPlanQueriesConfiguration Convert() { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index 6c7e34d86b..e95a84ef3b 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -13,9 +13,9 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetHighVariationQueriesReportParams : QueryConfigurationParams, IOrderableQueryParams { - public TimeInterval TimeInterval; - public string OrderByColumnId; - public bool Descending; + public TimeInterval TimeInterval { get; set; } + public string OrderByColumnId { get; set; } + public bool Descending { get; set; } public override HighVariationConfiguration Convert() { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs index 00c5b19628..8b063e8e78 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs @@ -13,8 +13,8 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetOverallResourceConsumptionReportParams : QueryConfigurationParams { - public TimeInterval SpecifiedTimeInterval; - public BucketInterval SpecifiedBucketInterval; + public TimeInterval SpecifiedTimeInterval { get; set; } + public BucketInterval SpecifiedBucketInterval { get; set; } public override OverallResourceConsumptionConfiguration Convert() { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index bc4d051551..a637b1e0c5 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -13,9 +13,9 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetRegressedQueriesReportParams : QueryConfigurationParams { - public TimeInterval TimeIntervalRecent; - public TimeInterval TimeIntervalHistory; - public long MinExecutionCount; + public TimeInterval TimeIntervalRecent { get; set; } + public TimeInterval TimeIntervalHistory { get; set; } + public long MinExecutionCount { get; set; } public override RegressedQueriesConfiguration Convert() { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index b7c88b3b71..493e3d0127 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -13,9 +13,9 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetTopResourceConsumersReportParams : QueryConfigurationParams, IOrderableQueryParams { - public TimeInterval TimeInterval; - public string OrderByColumnId; - public bool Descending; + public TimeInterval TimeInterval { get; set; } + public string OrderByColumnId { get; set; } + public bool Descending { get; set; } public override TopResourceConsumersConfiguration Convert() { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs index c6924e018f..c0471bf55d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs @@ -11,7 +11,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetTrackedQueriesReportParams { - public string QuerySearchText; + public string QuerySearchText { get; set; } } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs index 657a13d918..b80a0fb07c 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -14,11 +14,11 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetPlanSummaryParams : TypedQueryStoreReportParams { - public long QueryId; - public PlanTimeIntervalMode TimeIntervalMode; - public TimeInterval TimeInterval; - public Metric SelectedMetric; - public Statistic SelectedStatistic; + public long QueryId { get; set; } + public PlanTimeIntervalMode TimeIntervalMode { get; set; } + public TimeInterval TimeInterval { get; set; } + public Metric SelectedMetric { get; set; } + public Statistic SelectedStatistic { get; set; } public override PlanSummaryConfiguration Convert() => new() { @@ -32,16 +32,16 @@ public class GetPlanSummaryParams : TypedQueryStoreReportParams OrderByColumnId; } public class GetForcedPlanParams : QueryStoreReportParams { - public long QueryId; - public long PlanId; + public long QueryId { get; set; } + public long PlanId { get; set; } } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs index e607753655..1a84b4ceaf 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -12,7 +12,7 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public abstract class QueryStoreReportParams { - public string ConnectionOwnerUri; + public string ConnectionOwnerUri { get; set; } } public abstract class TypedQueryStoreReportParams : QueryStoreReportParams @@ -22,11 +22,11 @@ public abstract class TypedQueryStoreReportParams : QueryStoreReportParams public abstract class QueryConfigurationParams : TypedQueryStoreReportParams where T : QueryConfigurationBase, new() { - public Metric SelectedMetric; - public Statistic SelectedStatistic; - public int TopQueriesReturned; - public bool ReturnAllQueries; - public int MinNumberOfQueryPlans; + public Metric SelectedMetric { get; set; } + public Statistic SelectedStatistic { get; set; } + public int TopQueriesReturned { get; set; } + public bool ReturnAllQueries { get; set; } + public int MinNumberOfQueryPlans { get; set; } public override T Convert() => new T() { From fd051f93cf2e64a9511c3f1fc742a9c1c18af6d5 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 18 Aug 2023 11:11:17 -0700 Subject: [PATCH 24/34] Adding get/set for result object --- .../QueryStore/Contracts/QueryStoreReportParams.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs index 1a84b4ceaf..6bb1bfb1ec 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -40,7 +40,7 @@ public abstract class TypedQueryStoreReportParams : QueryStoreReportParams public class QueryStoreQueryResult : ResultStatus { - public string Query; + public string Query { get; set; } } public interface IOrderableQueryParams From bfc63d59725d1a4ddeba114ce7589b69c47fc2e4 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 18 Aug 2023 14:13:32 -0700 Subject: [PATCH 25/34] Switching to parameter-less constructor --- .../QueryStore/QueryStoreService.cs | 2 +- .../QueryStore/QueryStoreTests.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs index d4899dac06..db167da4f2 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/QueryStoreService.cs @@ -44,7 +44,7 @@ public class QueryStoreService : BaseService /// private ConnectionService ConnectionService { get; } - private QueryStoreService() + public QueryStoreService() { ConnectionService = ConnectionService.Instance; } diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs index 06c8a068fb..c9c9074c7e 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs @@ -7,13 +7,13 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.SqlServer.Management.QueryStoreModel.Common; -using Microsoft.SqlTools.ServiceLayer.Connection; using Microsoft.SqlTools.ServiceLayer.IntegrationTests.Utility; using Microsoft.SqlTools.ServiceLayer.QueryStore; using Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts; using Microsoft.SqlTools.ServiceLayer.Test.Common.RequestContextMocking; using Moq; using NUnit.Framework; +using static Microsoft.SqlServer.Management.QueryStoreModel.PlanSummary.PlanSummaryConfiguration; namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.QueryStore { @@ -231,7 +231,7 @@ await service.HandleGetPlanSummaryGridViewRequest(new GetPlanSummaryGridViewPara ConnectionOwnerUri = TestConnectionOwnerUri, QueryId = 97, TimeInterval = TestTimeInterval, - //TimeIntervalMode = TimeIntervalMode.SpecifiedRange, // TODO: uncomment once new QSM package is brought in + TimeIntervalMode = PlanTimeIntervalMode.SpecifiedRange, SelectedMetric = Metric.WaitTime, SelectedStatistic = Statistic.Stdev, OrderByColumnId = "count_executions", @@ -244,7 +244,7 @@ await service.HandleGetPlanSummaryGridViewRequest(new GetPlanSummaryGridViewPara private QueryStoreService GetMock() { - Mock mock = new Mock(ConnectionService.Instance); + Mock mock = new Mock(); mock.Setup(s => s.GetAvailableMetrics(It.IsAny())) .Returns(new List() { From 8fce979bb428e64621d5f94a73c380ab594c8598 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 18 Aug 2023 15:00:34 -0700 Subject: [PATCH 26/34] Swapping TimeInterval for string-based BasicTimeInterval --- .../QueryStore/BasicTimeInterval.cs | 55 +++++++++++++++++++ .../Contracts/GetForcedPlanQueriesReport.cs | 4 +- .../GetHighVariationQueriesReport.cs | 4 +- .../GetOverallResourceConsumptionReport.cs | 4 +- .../Contracts/GetRegressedQueriesReport.cs | 8 +-- .../GetTopResourceConsumersReport.cs | 4 +- .../Contracts/PlanSummaryReportParams.cs | 4 +- .../QueryStore/QueryStoreTests.cs | 15 ++++- 8 files changed, 81 insertions(+), 17 deletions(-) create mode 100644 src/Microsoft.SqlTools.ServiceLayer/QueryStore/BasicTimeInterval.cs diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/BasicTimeInterval.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/BasicTimeInterval.cs new file mode 100644 index 0000000000..3eb77cd77f --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/BasicTimeInterval.cs @@ -0,0 +1,55 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +#nullable disable + +using System; +using Microsoft.SqlServer.Management.QueryStoreModel.Common; + +namespace Microsoft.SqlTools.ServiceLayer.QueryStore +{ + /// + /// Represents a TimeInterval with strings for the start and end times instead of DateTimeOffsets for JRPC compatibility + /// + public class BasicTimeInterval + { + /// + /// Start time of this time interval, in ISO 8601 format (ToString("O")). + /// This property is ignored unless TimeIntervalOptions is set to Custom. + /// + public string StartDateTimeInUtc { get; set; } = null; + + /// + /// End time of this time interval, in ISO 8601 format (ToString("O")). + /// This property is ignored unless TimeIntervalOptions is set to Custom. + /// + public string EndDateTimeInUtc { get; set; } = null; + + /// + /// Time interval type. Unless set to Custom, then StartDateTimeInUtc and EndDateTimeInUtc are ignored. + /// + public TimeIntervalOptions TimeIntervalOptions { get; set; } = TimeIntervalOptions.Custom; + + public TimeInterval Convert() + { + if (TimeIntervalOptions == TimeIntervalOptions.Custom + && !String.IsNullOrWhiteSpace(StartDateTimeInUtc) + && !String.IsNullOrWhiteSpace(EndDateTimeInUtc)) + { + return new TimeInterval(DateTimeOffset.Parse(StartDateTimeInUtc), DateTimeOffset.Parse(EndDateTimeInUtc)); + } + else if (TimeIntervalOptions != TimeIntervalOptions.Custom + && String.IsNullOrWhiteSpace(StartDateTimeInUtc) + && String.IsNullOrWhiteSpace(EndDateTimeInUtc)) + { + return new TimeInterval(TimeIntervalOptions); + } + else + { + throw new InvalidOperationException($"{nameof(BasicTimeInterval)} was not populated correctly: '{TimeIntervalOptions}', '{StartDateTimeInUtc}' - '{EndDateTimeInUtc}'"); + } + } + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index 22a40dfa5e..d140f5b9f8 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -13,14 +13,14 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetForcedPlanQueriesReportParams : QueryConfigurationParams, IOrderableQueryParams { - public TimeInterval TimeInterval { get; set; } + public BasicTimeInterval TimeInterval { get; set; } public string OrderByColumnId { get; set; } public bool Descending { get; set; } public override ForcedPlanQueriesConfiguration Convert() { ForcedPlanQueriesConfiguration config = base.Convert(); - config.TimeInterval = TimeInterval; + config.TimeInterval = TimeInterval.Convert(); return config; } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index e95a84ef3b..8419e59931 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -13,14 +13,14 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetHighVariationQueriesReportParams : QueryConfigurationParams, IOrderableQueryParams { - public TimeInterval TimeInterval { get; set; } + public BasicTimeInterval TimeInterval { get; set; } public string OrderByColumnId { get; set; } public bool Descending { get; set; } public override HighVariationConfiguration Convert() { HighVariationConfiguration config = base.Convert(); - config.TimeInterval = TimeInterval; + config.TimeInterval = TimeInterval.Convert(); return config; } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs index 8b063e8e78..84f1a9c040 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs @@ -13,14 +13,14 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetOverallResourceConsumptionReportParams : QueryConfigurationParams { - public TimeInterval SpecifiedTimeInterval { get; set; } + public BasicTimeInterval SpecifiedTimeInterval { get; set; } public BucketInterval SpecifiedBucketInterval { get; set; } public override OverallResourceConsumptionConfiguration Convert() { OverallResourceConsumptionConfiguration result = base.Convert(); - result.SpecifiedTimeInterval = SpecifiedTimeInterval; + result.SpecifiedTimeInterval = SpecifiedTimeInterval.Convert(); result.SelectedBucketInterval = SpecifiedBucketInterval; return result; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index a637b1e0c5..4de1fea54f 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -13,16 +13,16 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetRegressedQueriesReportParams : QueryConfigurationParams { - public TimeInterval TimeIntervalRecent { get; set; } - public TimeInterval TimeIntervalHistory { get; set; } + public BasicTimeInterval TimeIntervalRecent { get; set; } + public BasicTimeInterval TimeIntervalHistory { get; set; } public long MinExecutionCount { get; set; } public override RegressedQueriesConfiguration Convert() { RegressedQueriesConfiguration result = base.Convert(); - result.TimeIntervalRecent = TimeIntervalRecent; - result.TimeIntervalHistory = TimeIntervalHistory; + result.TimeIntervalRecent = TimeIntervalRecent.Convert(); + result.TimeIntervalHistory = TimeIntervalHistory.Convert(); result.MinExecutionCount = MinExecutionCount; return result; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index 493e3d0127..709c0f668d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -13,14 +13,14 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { public class GetTopResourceConsumersReportParams : QueryConfigurationParams, IOrderableQueryParams { - public TimeInterval TimeInterval { get; set; } + public BasicTimeInterval TimeInterval { get; set; } public string OrderByColumnId { get; set; } public bool Descending { get; set; } public override TopResourceConsumersConfiguration Convert() { TopResourceConsumersConfiguration result = base.Convert(); - result.TimeInterval = TimeInterval; + result.TimeInterval = TimeInterval.Convert(); return result; } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs index b80a0fb07c..651eca783c 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -16,7 +16,7 @@ public class GetPlanSummaryParams : TypedQueryStoreReportParams new TimeInterval(TestWindowStart, TestWindowEnd); } - private static TimeInterval RecentTestTimeInterval { get => new TimeInterval(TestWindowRecentStart, TestWindowEnd); } + private static BasicTimeInterval TestTimeInterval => new BasicTimeInterval() + { + StartDateTimeInUtc = TestWindowStart.ToString("O"), + EndDateTimeInUtc = TestWindowEnd.ToString("O") + }; + + private static BasicTimeInterval RecentTestTimeInterval => new BasicTimeInterval() + { + StartDateTimeInUtc = TestWindowRecentStart.ToString("O"), + EndDateTimeInUtc = TestWindowEnd.ToString("O") + }; [Test] public async Task TopResourceConsumers() @@ -217,7 +226,7 @@ await service.HandleGetPlanSummaryChartViewRequest(new GetPlanSummaryParams() ConnectionOwnerUri = TestConnectionOwnerUri, QueryId = 97, TimeInterval = TestTimeInterval, - //TimeIntervalMode = TimeIntervalMode.SpecifiedRange, // TODO: uncomment once new QSM package is brought in + TimeIntervalMode = PlanTimeIntervalMode.SpecifiedRange, SelectedMetric = Metric.WaitTime, SelectedStatistic = Statistic.Stdev }, request.Object); From 817d89d853c6ad6db180150a83d46d9169619427 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 18 Aug 2023 17:04:30 -0700 Subject: [PATCH 27/34] Removing unnecessary usings --- .../QueryStore/Contracts/GetForcedPlanQueriesReport.cs | 1 - .../QueryStore/Contracts/GetHighVariationQueriesReport.cs | 1 - .../QueryStore/Contracts/GetRegressedQueriesReport.cs | 1 - .../QueryStore/Contracts/GetTopResourceConsumersReport.cs | 1 - 4 files changed, 4 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index d140f5b9f8..4e4ead5b0f 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.ForcedPlanQueries; using Microsoft.SqlTools.Hosting.Protocol.Contracts; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index 8419e59931..95e1234122 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.HighVariation; using Microsoft.SqlTools.Hosting.Protocol.Contracts; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index 4de1fea54f..2f65c28d08 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.RegressedQueries; using Microsoft.SqlTools.Hosting.Protocol.Contracts; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index 709c0f668d..6835c76b4d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.TopResourceConsumers; using Microsoft.SqlTools.Hosting.Protocol.Contracts; From 7cc471f5f8aab0173ee667b7ff5360cff1accf3f Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 18 Aug 2023 17:32:24 -0700 Subject: [PATCH 28/34] Adding back params comments --- .../Contracts/GetForcedPlanQueriesReport.cs | 12 +-- .../GetHighVariationQueriesReport.cs | 21 ++---- .../GetOverallResourceConsumptionReport.cs | 12 ++- .../Contracts/GetRegressedQueriesReport.cs | 14 ++++ .../GetTopResourceConsumersReport.cs | 25 +++---- .../Contracts/GetTrackedQueryReport.cs | 6 ++ .../Contracts/PlanSummaryReportParams.cs | 42 +++++++++++ .../Contracts/QueryStoreReportParams.cs | 73 +++++++++++++++++++ 8 files changed, 169 insertions(+), 36 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index 4e4ead5b0f..bd415b54e3 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -10,11 +10,15 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetForcedPlanQueriesReportParams : QueryConfigurationParams, IOrderableQueryParams + /// + /// Parameters for getting a Forced Plan Queries report + /// + public class GetForcedPlanQueriesReportParams : OrderableQueryConfigurationParams { + /// + /// Time interval for the report + /// public BasicTimeInterval TimeInterval { get; set; } - public string OrderByColumnId { get; set; } - public bool Descending { get; set; } public override ForcedPlanQueriesConfiguration Convert() { @@ -23,8 +27,6 @@ public override ForcedPlanQueriesConfiguration Convert() return config; } - - public string GetOrderByColumnId() => OrderByColumnId; } /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index 95e1234122..0a4bc4ad8c 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -10,11 +10,15 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetHighVariationQueriesReportParams : QueryConfigurationParams, IOrderableQueryParams + /// + /// Parameters for getting a High Variation Queries report + /// + public class GetHighVariationQueriesReportParams : OrderableQueryConfigurationParams { + /// + /// Time interval for the report + /// public BasicTimeInterval TimeInterval { get; set; } - public string OrderByColumnId { get; set; } - public bool Descending { get; set; } public override HighVariationConfiguration Convert() { @@ -23,8 +27,6 @@ public override HighVariationConfiguration Convert() return config; } - - public string GetOrderByColumnId() => OrderByColumnId; } /// @@ -44,13 +46,4 @@ public class GetHighVariationQueriesDetailedSummaryRequest public static readonly RequestType Type = RequestType.Create("queryStore/getHighVariationQueriesDetailedSummary"); } - - /// - /// Gets the High Variation Queries detailed summary with wait stats - /// - public class GetHighVariationQueriesDetailedSummaryWithWaitStatsRequest - { - public static readonly RequestType Type - = RequestType.Create("queryStore/getHighVariationQueriesDetailedSummaryWithWaitStats"); - } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs index 84f1a9c040..9e76aeb012 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs @@ -11,9 +11,19 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { + /// + /// Parameters for getting an Overall Resource Consumption report + /// public class GetOverallResourceConsumptionReportParams : QueryConfigurationParams { + /// + /// Time interval for the report + /// public BasicTimeInterval SpecifiedTimeInterval { get; set; } + + /// + /// Bucket interval for the report + /// public BucketInterval SpecifiedBucketInterval { get; set; } public override OverallResourceConsumptionConfiguration Convert() @@ -28,7 +38,7 @@ public override OverallResourceConsumptionConfiguration Convert() } /// - /// Gets the report for a Forced Plan Queries summary + /// Gets the report for an Overall Resource Consumption report /// public class GetOverallResourceConsumptionReportRequest { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index 2f65c28d08..4e1e60c420 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -10,10 +10,24 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { + /// + /// Parameters for getting a Regressed Queries report + /// public class GetRegressedQueriesReportParams : QueryConfigurationParams { + /// + /// Time interval during which to look for performance regressions for the report + /// public BasicTimeInterval TimeIntervalRecent { get; set; } + + /// + /// Time interval during which to establish baseline performance for the report + /// public BasicTimeInterval TimeIntervalHistory { get; set; } + + /// + /// Minimum number of executions for a query to be included + /// public long MinExecutionCount { get; set; } public override RegressedQueriesConfiguration Convert() diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index 6835c76b4d..10335b7814 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -10,11 +10,15 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { - public class GetTopResourceConsumersReportParams : QueryConfigurationParams, IOrderableQueryParams + /// + /// Parameters for getting a Top Resource Consumers report + /// + public class GetTopResourceConsumersReportParams : OrderableQueryConfigurationParams { + /// + /// Time interval for the report + /// public BasicTimeInterval TimeInterval { get; set; } - public string OrderByColumnId { get; set; } - public bool Descending { get; set; } public override TopResourceConsumersConfiguration Convert() { @@ -23,12 +27,10 @@ public override TopResourceConsumersConfiguration Convert() return result; } - - public string GetOrderByColumnId() => OrderByColumnId; } /// - /// Gets a Forced Plan Queries summary + /// Gets a Top Resource Consumers summary /// public class GetTopResourceConsumersSummaryRequest { @@ -37,20 +39,11 @@ public static readonly RequestType - /// Gets a Forced Plan Queries detailed summary + /// Gets a Top Resource Consumers detailed summary /// public class GetTopResourceConsumersDetailedSummaryRequest { public static readonly RequestType Type = RequestType.Create("queryStore/getTopResourceConsumersDetailedSummary"); } - - /// - /// Gets a Forced Plan Queries detailed summary with wait stats - /// - public class GetTopResourceConsumersDetailedSummaryWithWaitStatsRequest - { - public static readonly RequestType Type - = RequestType.Create("queryStore/getTopResourceConsumersDetailedSummaryWithWaitStats"); - } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs index c0471bf55d..7fbeea4c79 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs @@ -9,8 +9,14 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { + /// + /// Parameters for getting a Tracked Queries report + /// public class GetTrackedQueriesReportParams { + /// + /// Search text for a query + /// public string QuerySearchText { get; set; } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs index 651eca783c..d0dcd69e1e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -12,12 +12,34 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { + /// + /// Parameters for getting a Plan Summary + /// public class GetPlanSummaryParams : TypedQueryStoreReportParams { + /// + /// Query ID to view a summary of plans for + /// public long QueryId { get; set; } + + /// + /// Mode of the time interval search + /// public PlanTimeIntervalMode TimeIntervalMode { get; set; } + + /// + /// Time interval for the report + /// public BasicTimeInterval TimeInterval { get; set; } + + /// + /// Metric to summarize + /// public Metric SelectedMetric { get; set; } + + /// + /// Statistic to calculate on SelecticMetric + /// public Statistic SelectedStatistic { get; set; } public override PlanSummaryConfiguration Convert() => new() @@ -30,17 +52,37 @@ public class GetPlanSummaryParams : TypedQueryStoreReportParams + /// Parameters for getting the grid view of a Plan Summary + /// public class GetPlanSummaryGridViewParams : GetPlanSummaryParams, IOrderableQueryParams { + /// + /// Name of the column to order results by + /// public string OrderByColumnId { get; set; } + + /// + /// Direction of the result ordering + /// public bool Descending { get; set; } public string GetOrderByColumnId() => OrderByColumnId; } + /// + /// Parameters for getting the forced plan for a query + /// public class GetForcedPlanParams : QueryStoreReportParams { + /// + /// Query ID to view the plan for + /// public long QueryId { get; set; } + + /// + /// Plan ID to view + /// public long PlanId { get; set; } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs index 6bb1bfb1ec..2adcb500ec 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/QueryStoreReportParams.cs @@ -10,22 +10,59 @@ namespace Microsoft.SqlTools.ServiceLayer.QueryStore.Contracts { + /// + /// Base class for a Query Store report parameters + /// public abstract class QueryStoreReportParams { + /// + /// Connection URI for the database + /// public string ConnectionOwnerUri { get; set; } } + /// + /// Base class for Query Store report parameters that can be converted to a configuration object for use in QSM query generators + /// + /// public abstract class TypedQueryStoreReportParams : QueryStoreReportParams { + /// + /// Converts this SQL Tools Service parameter object to the QSM configuration object + /// + /// public abstract T Convert(); } + /// + /// Base class for parameters for a report type that uses QueryConfigurationBase for its configuration + /// + /// public abstract class QueryConfigurationParams : TypedQueryStoreReportParams where T : QueryConfigurationBase, new() { + /// + /// Metric to summarize + /// public Metric SelectedMetric { get; set; } + + /// + /// Statistic to calculate on SelecticMetric + /// public Statistic SelectedStatistic { get; set; } + + /// + /// Number of queries to return if ReturnAllQueries is not set + /// public int TopQueriesReturned { get; set; } + + /// + /// True to include all queries in the report; false to only include the top queries, up to the value specified by TopQueriesReturned + /// public bool ReturnAllQueries { get; set; } + + /// + /// Minimum number of query plans for a query to included in the report + /// public int MinNumberOfQueryPlans { get; set; } public override T Convert() => new T() @@ -38,13 +75,49 @@ public abstract class TypedQueryStoreReportParams : QueryStoreReportParams }; } + /// + /// Base class for parameters for a report that can be ordered by a specified column + /// + /// + public abstract class OrderableQueryConfigurationParams : QueryConfigurationParams, IOrderableQueryParams where T : QueryConfigurationBase, new() + { + /// + /// Name of the column to order results by + /// + public string OrderByColumnId { get; set; } + + /// + /// Direction of the result ordering + /// + public bool Descending { get; set; } + + /// + /// Gets the name of the column to order the report results by + /// + /// + public string GetOrderByColumnId() => OrderByColumnId; + } + + /// + /// Result containing a finalized query for a report + /// public class QueryStoreQueryResult : ResultStatus { + /// + /// Finalized query for a report + /// public string Query { get; set; } } + /// + /// Interface for parameters for a report that can be ordered by a specific column + /// public interface IOrderableQueryParams { + /// + /// Gets the name of the column to order the report results by + /// + /// string GetOrderByColumnId(); } } From cd1526493d72c87a4333a4c2bffa8e6ae2b94147 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 18 Aug 2023 17:36:01 -0700 Subject: [PATCH 29/34] Fixing up request docstrings --- .../QueryStore/Contracts/GetForcedPlanQueriesReport.cs | 2 +- .../QueryStore/Contracts/GetHighVariationQueriesReport.cs | 4 ++-- .../Contracts/GetOverallResourceConsumptionReport.cs | 2 +- .../QueryStore/Contracts/GetRegressedQueriesReport.cs | 4 ++-- .../QueryStore/Contracts/GetTopResourceConsumersReport.cs | 4 ++-- .../QueryStore/Contracts/GetTrackedQueryReport.cs | 2 +- .../QueryStore/Contracts/PlanSummaryReportParams.cs | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index bd415b54e3..f6a9e0426e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -30,7 +30,7 @@ public override ForcedPlanQueriesConfiguration Convert() } /// - /// Gets the report for a Forced Plan Queries summary + /// Gets the query for a Forced Plan Queries report /// public class GetForcedPlanQueriesReportRequest { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index 0a4bc4ad8c..bf274250b5 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -30,7 +30,7 @@ public override HighVariationConfiguration Convert() } /// - /// Gets the High Variation Queries summary + /// Gets the query for a High Variation Queries report /// public class GetHighVariationQueriesSummaryRequest { @@ -39,7 +39,7 @@ public static readonly RequestType - /// Gets the High Variation Queries detailed summary + /// Gets the query for a detailed High Variation Queries report /// public class GetHighVariationQueriesDetailedSummaryRequest { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs index 9e76aeb012..8a2ae01752 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetOverallResourceConsumptionReport.cs @@ -38,7 +38,7 @@ public override OverallResourceConsumptionConfiguration Convert() } /// - /// Gets the report for an Overall Resource Consumption report + /// Gets the query for an Overall Resource Consumption report /// public class GetOverallResourceConsumptionReportRequest { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index 4e1e60c420..decb820fc5 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -43,7 +43,7 @@ public override RegressedQueriesConfiguration Convert() } /// - /// Gets the Regressed Queries summary + /// Gets the query for a Regressed Queries report /// public class GetRegressedQueriesSummaryRequest { @@ -52,7 +52,7 @@ public static readonly RequestType - /// Gets the Regressed Queries summary + /// Gets the query for a detailed Regressed Queries report /// public class GetRegressedQueriesDetailedSummaryRequest { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index 10335b7814..dc8a32cc9e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -30,7 +30,7 @@ public override TopResourceConsumersConfiguration Convert() } /// - /// Gets a Top Resource Consumers summary + /// Gets the query for a Top Resource Consumers report /// public class GetTopResourceConsumersSummaryRequest { @@ -39,7 +39,7 @@ public static readonly RequestType - /// Gets a Top Resource Consumers detailed summary + /// Gets the query for a detailed Top Resource Consumers report ///
public class GetTopResourceConsumersDetailedSummaryRequest { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs index 7fbeea4c79..ce9d373fbe 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTrackedQueryReport.cs @@ -21,7 +21,7 @@ public class GetTrackedQueriesReportParams } /// - /// Gets the report for a Forced Plan Queries summary + /// Gets the query for a Tracked Queries report /// public class GetTrackedQueriesReportRequest { diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs index d0dcd69e1e..31e4f14148 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -105,7 +105,7 @@ public static readonly RequestType - /// Gets the query for a forced plan query + /// Gets the query to look up a forced plan ///
public class GetForcedPlanRequest // there's also GetForcedPlanQueries (plural) in QSM; how is that not confusing... { From 68e5bf157434ded79b5612e121cac7663bbd3e79 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Fri, 18 Aug 2023 17:49:53 -0700 Subject: [PATCH 30/34] comment tweak --- .../QueryStore/Contracts/PlanSummaryReportParams.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs index 31e4f14148..02e3b76eec 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/PlanSummaryReportParams.cs @@ -105,7 +105,7 @@ public static readonly RequestType - /// Gets the query to look up a forced plan + /// Gets the query to view a forced plan ///
public class GetForcedPlanRequest // there's also GetForcedPlanQueries (plural) in QSM; how is that not confusing... { From 5c1e9256be105a352b8f16345f34a5f2dc6134ba Mon Sep 17 00:00:00 2001 From: Kim Santiago Date: Mon, 28 Aug 2023 17:03:03 -0700 Subject: [PATCH 31/34] fix tests failing in pipeline because of line endings not matching --- .../QueryStore/QueryStoreTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs index 76c1dc6db0..49e9f0ec4b 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs @@ -95,7 +95,7 @@ await service.HandleGetForcedPlanQueriesReportRequest(new GetForcedPlanQueriesRe }, request.Object); request.AssertSuccess(nameof(service.HandleGetForcedPlanQueriesReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetForcedPlanQueriesReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetForcedPlanQueriesReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); } [Test] @@ -110,7 +110,7 @@ await service.HandleGetTrackedQueriesReportRequest(new GetTrackedQueriesReportPa }, request.Object); request.AssertSuccess(nameof(service.HandleGetTrackedQueriesReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetTrackedQueriesReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetTrackedQueriesReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); } [Test] From 4bacb800abfc51b252c17ce648c6f85911f119fa Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Thu, 31 Aug 2023 12:01:53 -0700 Subject: [PATCH 32/34] removing unnecessary usings --- .../QueryStore/Contracts/GetForcedPlanQueriesReport.cs | 1 - .../QueryStore/Contracts/GetHighVariationQueriesReport.cs | 1 - .../QueryStore/Contracts/GetRegressedQueriesReport.cs | 1 - .../QueryStore/Contracts/GetTopResourceConsumersReport.cs | 1 - 4 files changed, 4 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs index d140f5b9f8..4e4ead5b0f 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetForcedPlanQueriesReport.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.ForcedPlanQueries; using Microsoft.SqlTools.Hosting.Protocol.Contracts; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs index 8419e59931..95e1234122 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetHighVariationQueriesReport.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.HighVariation; using Microsoft.SqlTools.Hosting.Protocol.Contracts; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs index 4de1fea54f..2f65c28d08 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetRegressedQueriesReport.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.RegressedQueries; using Microsoft.SqlTools.Hosting.Protocol.Contracts; diff --git a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs index 709c0f668d..6835c76b4d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/QueryStore/Contracts/GetTopResourceConsumersReport.cs @@ -3,7 +3,6 @@ // Licensed under the MIT license. See LICENSE file in the project root for full license information. // -using Microsoft.SqlServer.Management.QueryStoreModel.Common; using Microsoft.SqlServer.Management.QueryStoreModel.TopResourceConsumers; using Microsoft.SqlTools.Hosting.Protocol.Contracts; From 0f0778ddb435eaf681763c4f809649d494f91441 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Thu, 31 Aug 2023 13:54:38 -0700 Subject: [PATCH 33/34] Setting tests to generate queries in UTC for test stability --- .../QueryStore/QueryStoreBaselines.cs | 44 +++++++++---------- .../QueryStore/QueryStoreTests.cs | 8 +++- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs index 37637bd2a4..8e7a1394f5 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreBaselines.cs @@ -8,8 +8,8 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.QueryStore internal static class QueryStoreBaselines { public const string HandleGetTopResourceConsumersSummaryReportRequest = -@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; With wait_stats AS ( @@ -47,8 +47,8 @@ HAVING COUNT(distinct p.plan_id) >= 1 ORDER BY query_id DESC"; public const string HandleGetTopResourceConsumersDetailedSummaryReportRequest = -@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; With wait_stats AS ( @@ -185,8 +185,8 @@ HAVING MAX(CAST(p.is_forced_plan AS tinyint)) = 1 WHERE qt.query_sql_text LIKE ('%' + @QuerySearchText + '%')"; public const string HandleGetHighVariationQueriesSummaryReportRequest = -@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; With wait_stats AS ( @@ -225,8 +225,8 @@ HAVING COUNT(distinct p.plan_id) >= 1 AND SUM(ws.count_executions) > 1 ORDER BY query_id DESC"; public const string HandleGetHighVariationQueriesDetailedSummaryReportRequest = -@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; With wait_stats AS ( @@ -311,8 +311,8 @@ A.num_plans num_plans ORDER BY query_id DESC"; public const string HandleGetOverallResourceConsumptionReportRequest = -@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +@"DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; WITH DateGenerator AS ( @@ -375,10 +375,10 @@ GROUP BY DATEDIFF(hh, 0, rs.last_execution_time) OPTION (MAXRECURSION 0)"; public const string HandleGetRegressedQueriesSummaryReportRequest = -@"DECLARE @recent_start_time DATETIMEOFFSET = '2023-06-17T11:34:56.0000000-07:00'; -DECLARE @recent_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; -DECLARE @history_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @history_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +@"DECLARE @recent_start_time DATETIMEOFFSET = '2023-06-17T11:34:56.0000000+00:00'; +DECLARE @recent_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; +DECLARE @history_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @history_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; DECLARE @min_exec_count BIGINT = 1; WITH wait_stats AS @@ -465,10 +465,10 @@ WHERE query_wait_time_regr_perc_recent > 0 OPTION (MERGE JOIN)"; public const string HandleGetRegressedQueriesDetailedSummaryReportRequest = -@"DECLARE @recent_start_time DATETIMEOFFSET = '2023-06-17T11:34:56.0000000-07:00'; -DECLARE @recent_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; -DECLARE @history_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @history_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +@"DECLARE @recent_start_time DATETIMEOFFSET = '2023-06-17T11:34:56.0000000+00:00'; +DECLARE @recent_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; +DECLARE @history_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @history_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; DECLARE @min_exec_count BIGINT = 1; WITH @@ -710,8 +710,8 @@ HAVING COUNT(distinct p.plan_id) >= 1 public const string HandleGetPlanSummaryChartViewRequest = @"DECLARE @query_id BIGINT = 97; -DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; WITH wait_stats AS ( @@ -783,8 +783,8 @@ FROM bucketizer b public const string HandleGetPlanSummaryGridViewRequest = @"DECLARE @query_id BIGINT = 97; -DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000-07:00'; -DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000-07:00'; +DECLARE @interval_start_time DATETIMEOFFSET = '2023-06-10T12:34:56.0000000+00:00'; +DECLARE @interval_end_time DATETIMEOFFSET = '2023-06-17T12:34:56.0000000+00:00'; WITH wait_stats AS ( diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs index 76c1dc6db0..161de214ed 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs @@ -20,7 +20,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.QueryStore public class QueryStoreTests : TestBase { private const string TestConnectionOwnerUri = "FakeConnectionOwnerUri"; - private static DateTimeOffset TestWindowStart = DateTimeOffset.Parse("6/10/2023 12:34:56 PM -07:00"); + private static DateTimeOffset TestWindowStart = DateTimeOffset.Parse("6/10/2023 12:34:56 PM +0:00"); private static DateTimeOffset TestWindowEnd = TestWindowStart.AddDays(7); private static DateTimeOffset TestWindowRecentStart = TestWindowEnd.AddHours(-1); private static BasicTimeInterval TestTimeInterval => new BasicTimeInterval() @@ -35,6 +35,12 @@ public class QueryStoreTests : TestBase EndDateTimeInUtc = TestWindowEnd.ToString("O") }; + [SetUp] + public void Setup() + { + QueryStoreCommonConfiguration.DisplayTimeKind = DateTimeKind.Utc; + } + [Test] public async Task TopResourceConsumers() { From f5dd10539de4c2d0a69696972951a41c8b695aa1 Mon Sep 17 00:00:00 2001 From: Benjin Dubishar Date: Thu, 31 Aug 2023 16:11:14 -0700 Subject: [PATCH 34/34] Normalizing line endings --- .../QueryStore/QueryStoreTests.cs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs index 66f42a61a5..a762719041 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/QueryStore/QueryStoreTests.cs @@ -61,7 +61,7 @@ await service.HandleGetTopResourceConsumersSummaryReportRequest(new GetTopResour }, request.Object); request.AssertSuccess(nameof(service.HandleGetTopResourceConsumersSummaryReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetTopResourceConsumersSummaryReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetTopResourceConsumersSummaryReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); request = new(); await service.HandleGetTopResourceConsumersDetailedSummaryReportRequest(new GetTopResourceConsumersReportParams() @@ -78,7 +78,7 @@ await service.HandleGetTopResourceConsumersDetailedSummaryReportRequest(new GetT }, request.Object); request.AssertSuccess(nameof(service.HandleGetTopResourceConsumersDetailedSummaryReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetTopResourceConsumersDetailedSummaryReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetTopResourceConsumersDetailedSummaryReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); } [Test] @@ -139,7 +139,7 @@ await service.HandleGetHighVariationQueriesSummaryReportRequest(new GetHighVaria }, request.Object); request.AssertSuccess(nameof(service.HandleGetHighVariationQueriesSummaryReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetHighVariationQueriesSummaryReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetHighVariationQueriesSummaryReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); request = new(); await service.HandleGetHighVariationQueriesDetailedSummaryReportRequest(new GetHighVariationQueriesReportParams() @@ -156,7 +156,7 @@ await service.HandleGetHighVariationQueriesDetailedSummaryReportRequest(new GetH }, request.Object); request.AssertSuccess(nameof(service.HandleGetHighVariationQueriesDetailedSummaryReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetHighVariationQueriesDetailedSummaryReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetHighVariationQueriesDetailedSummaryReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); } [Test] @@ -178,7 +178,7 @@ await service.HandleGetOverallResourceConsumptionReportRequest(new GetOverallRes }, request.Object); request.AssertSuccess(nameof(service.HandleGetOverallResourceConsumptionReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetOverallResourceConsumptionReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetOverallResourceConsumptionReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); } [Test] @@ -201,7 +201,7 @@ await service.HandleGetRegressedQueriesSummaryReportRequest(new GetRegressedQuer }, request.Object); request.AssertSuccess(nameof(service.HandleGetRegressedQueriesSummaryReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetRegressedQueriesSummaryReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetRegressedQueriesSummaryReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); request = new(); await service.HandleGetRegressedQueriesDetailedSummaryReportRequest(new GetRegressedQueriesReportParams() @@ -218,7 +218,7 @@ await service.HandleGetRegressedQueriesDetailedSummaryReportRequest(new GetRegre }, request.Object); request.AssertSuccess(nameof(service.HandleGetRegressedQueriesDetailedSummaryReportRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetRegressedQueriesDetailedSummaryReportRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetRegressedQueriesDetailedSummaryReportRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); } [Test] @@ -238,7 +238,7 @@ await service.HandleGetPlanSummaryChartViewRequest(new GetPlanSummaryParams() }, request.Object); request.AssertSuccess(nameof(service.HandleGetPlanSummaryChartViewRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetPlanSummaryChartViewRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetPlanSummaryChartViewRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); request = new(); await service.HandleGetPlanSummaryGridViewRequest(new GetPlanSummaryGridViewParams() @@ -254,7 +254,7 @@ await service.HandleGetPlanSummaryGridViewRequest(new GetPlanSummaryGridViewPara }, request.Object); request.AssertSuccess(nameof(service.HandleGetPlanSummaryGridViewRequest)); - Assert.AreEqual(QueryStoreBaselines.HandleGetPlanSummaryGridViewRequest, request.Result.Query); + Assert.AreEqual(QueryStoreBaselines.HandleGetPlanSummaryGridViewRequest.ReplaceLineEndings(), request.Result.Query.ReplaceLineEndings()); } private QueryStoreService GetMock()