天天看点

SQL Server 2016新特性:Query Store 使用Query Store监控性能

SQL Server Query Store特性可以让你看到查询计划选择和性能。简化了性能调优,可以快速的发现因为查询计划的选择导致的性能的差别。Query Store自动历史的查询,计划和运行时的统计信息,保留这些可以用来检查。数据通过时间窗口来分隔数据,你可以看见数据库的使用模式,并且理解查询计划在服务中的变化。可以你使用ALTER DATABASE SET选项来配置Query Store。

启动Query Store

ALTER DATABASE AdventureWorks2012 SET QUERY_STORE = ON;

Query Store中的信息

特定查询的执行计划涉及到很多,比如统计信息变化,schema变化,索引的创建和删除等等。过程的执行计划只会保存最新的执行计划,计划也会因为内存压力来牺牲计划的cache。因为执行计划的变化导致性能问题也是比较多的。

因为每个查询都保留了多个执行计划,可以通过策略强制查询处理器使用特定的执行计划。Query Store的计划强制和查询hint的USE PLAN相似,不需要应用程序做任何修改。计划强制可以解决查询的计划修改导致的性能退化。

Wait Stats,是另外一个source用来调优SQL Server。对于长时间,wait stats是实例级别的,并不能回归到实际查询。在SQL Server 2017,在Query Store中增加另外一个维度来跟踪wait stats。

Query Store特性使用场景:

快速查找和通过强制到之前的查询计划,修复一个计划性能回归

时间窗口内查询的运行次数。

查看过去的x小时,top n查询

审计给定查询的查询计划

分析特定数据库的资源使用

等待resource的top n查询

理解特定查询和计划的wait nature

Query Store包含的三个Store:

plan store,用来保存执行计划信息

runtime stats store,保存执行的统计信息

wait stats store,保存wait stats

可以通过max_plans_per_query配置每个查询的保存的plan数量,为了提高性能写入这些store都是一部的,为了最小化空间的使用运行时的统计信息,按某个时间范围内聚合。

以下查询返回query store中的查询和计划:

SELECT Txt.query_text_id, Txt.query_sql_text, Pl.plan_id, Qry.* 

FROM sys.query_store_plan AS Pl 

JOIN sys.query_store_query AS Qry 

    ON Pl.query_id = Qry.query_id 

JOIN sys.query_store_query_text AS Txt 

    ON Qry.query_text_id = Txt.query_text_id ;

查找等待查询

    本文转自 Fanr_Zh 博客园博客,原文链接:http://www.cnblogs.com/Amaranthus/p/7808305.html,如需转载请自行联系原作者