2025-11-10
SQLSERVER
00

目录

查询存储(Query Store)
启用查询存储
表结构和测试数据
Products表结构:
插入测试数据:
查看查询存储数据
结论

在SQL Server中,查询存储(Query Store)是一个强大的性能监控和调优工具,它能够跟踪并存储不同时间点的查询执行统计信息和历史计划。自动调优功能则能够自动识别潜在的性能问题,并在某些情况下自动修正问题。在本文中,我们将探讨查询存储的使用,以及如何利用自动调优功能来优化SQL Server性能。

查询存储(Query Store)

查询存储收集关于查询执行的数据,包括运行时间统计信息、执行计划等。这些信息有助于识别性能问题并分析查询执行的历史趋势。

启用查询存储

首先,我们需要启用Query Store功能。这可以在数据库级别通过SSMS或使用T-SQL来完成。

SQL
ALTER DATABASE [SalesDB] SET QUERY_STORE = ON;

查询存储可能没有启用,或者没有收集到任何数据。您可以通过以下查询来检查查询存储是否启用:

C#
SELECT actual_state_desc, desired_state_desc, current_storage_size_mb, max_storage_size_mb FROM sys.database_query_store_options;

表结构和测试数据

假设我们有一个名为Products的表,以下是表的结构和一些测试数据。

Products表结构:

SQL
CREATE TABLE Products ( ProductID INT IDENTITY PRIMARY KEY, ProductName NVARCHAR(100), Price MONEY, Quantity INT );

image.png

插入测试数据:

SQL
INSERT INTO Products (ProductName, Price, Quantity) VALUES ('Laptop', 1200.00, 10), ('Smartphone', 800.00, 20), ('Tablet', 600.00, 15), ('Monitor', 300.00, 20), ('Keyboard', 50.00, 50);

查看查询存储数据

通过查询存储,我们可以查看特定查询的历史性能数据。

SQL
SELECT qs.query_id, qs.query_hash, qt.query_sql_text, qrs.count_executions, qrs.avg_duration, qrs.avg_cpu_time, qrs.avg_logical_io_reads, qrs.avg_logical_io_writes FROM sys.query_store_query AS qs INNER JOIN sys.query_store_query_text AS qt ON qs.query_text_id = qt.query_text_id INNER JOIN sys.query_store_plan AS qp ON qs.query_id = qp.query_id INNER JOIN sys.query_store_runtime_stats AS qrs ON qp.plan_id = qrs.plan_id WHERE qt.query_sql_text LIKE '%Products%' ORDER BY qrs.avg_duration DESC;

image.png

这个查询将返回与Products表相关的查询的执行统计信息。

结论

查询存储和自动调优是SQL Server中两个强大的工具,它们可以帮助数据库管理员和开发人员监控、分析和优化数据库查询性能。通过合理地使用这些工具,我们可以确保数据库系统的高效运行,并在发生性能问题时迅速采取行动。自动调优功能进一步简化了性能优化过程,使得数据库能够自我适应并自动应用最佳实践。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!