SQL Server 2016 查询存储(Query Store)介绍

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介:

英文原文:

https://www.mssqltips.com/sqlservertip/4009/sql-server-2016-query-store-introduction/

 

问题

在所有新的SQL Server 2016数据库引擎特性中,查询存储是当前立即可用的很棒的新增性能调优工具。

 

解决方案

查询存储属性帮助跟踪查询计划、运行时统计信息和查询/执行计划历史。也帮助找出回归查询。你可以快速使用多个执行计划找到新的查询,识别无效执行计划和强制一个更好的计划。

我们将在所有示例中使用最新的SQL Server 2016 CTP 2.2版。

 

启用SQL Server 2016查询存储


查询存储可以使用新的“Query Store”数据库属性页启用和配置:

clip_image001


它也可以使用T-SQL启用。

1
2
ALTER  DATABASE  [DEMO_1]  SET  QUERY_STORE =  ON
GO

 

SQL 2016查询存储配置


一旦你对数据库启用了查询存储,你可以配置其他查询存储设置(可配置设置为粗体并高亮显示):

clip_image002


在每个属性上点击看到它的描述。你可以在这里找到关于每个配置选项的更详细信息。


查询存储配置也可以使用T-SQL修改:

1
2
3
4
5
6
7
8
9
ALTER  DATABASE  [DEMO_1]
SET  QUERY_STORE (OPERATION_MODE = READ_ONLY,
CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 367),
DATA_FLUSH_INTERVAL_SECONDS = 900,
INTERVAL_LENGTH_MINUTES = 60,
MAX_STORAGE_SIZE_MB = 100,
QUERY_CAPTURE_MODE = AUTO,
SIZE_BASED_CLEANUP_MODE = AUTO)
GO

 

SQL Server查询存储属性信息


让我们回顾在“Query Store”属性页可用的其他信息。


当前的磁盘使用(Current Disk Usage)


这部分在左边显示了数据库大小和查询存储使用,在右边显示了查询存储大小和使用:

clip_image003


注意到在“Query Store”页的“Purge Query Data”按钮。你可以使用这个按钮移除查询存储的内容或者使用一下的这些语句之一:

1
2
ALTER  DATABASE  [DEMO_1]  SET  QUERY_STORE CLEAR  ALL
GO
1
EXEC  sys.sp_query_store_flush_db


注意,sp_query_store_flush_db存储过程仍有些BUG,微软可能正在修复。

 

SQL Server查询存储系统对象和新的扩展事件


在SQL Server 2016 CTP 2.2中,有6个新的系统存储过程和7个目录视图与查询存储相关,可以运行如下查询找到:

1
2
SELECT  name , type_desc  FROM  sys.all_objects
WHERE  name  LIKE  '%query_store%'  or  name 'query_context_settings'

clip_image004

你可以从这里找到存储过程的描述:https://msdn.microsoft.com/en-us/library/dn818153.aspx,这里找到目录视图的描述:https://msdn.microsoft.com/en-us/library/dn818149.aspx


也有19个新的扩展事件:

query_store_background_task_persist_started – 如果查询存储数据持久化的后端任务开始执行时触发。

query_store_background_task_persist_finished – 如果查询存储数据持久化的后端任务成功完成时触发。

query_store_load_started – 当查询存储负载启动时触发。

query_store_db_data_structs_not_released – 当属性设置为OFF时查询存储数据结构未发布时触发。

query_store_db_diagnostics – 随着数据库级别的查询存储诊断而周期性触发。

query_store_db_settings_changed – 当查询存储设置被修改时触发。

query_store_db_whitelisting_changed – 当查询存储数据库白名单状态被修改时触发。

query_store_global_mem_obj_size_kb – 随着查询存储全局内存对象大小周期性触发。

query_store_size_retention_cleanup_started – 当大小保留策略清理任务启动时触发。

query_store_size_retention_cleanup_finished – 当大小保留策略清理任务完成时触发。

query_store_size_retention_cleanup_skipped – 当大小保留策略清理任务因为它的最小重复时间还没到而被跳过时触发。

query_store_size_retention_query_deleted – 当基于大小的保留策略从查询存储删除了一个查询时触发。

query_store_size_retention_plan_cost – 当对执行计划的驱逐消耗被计算时触发。

query_store_size_retention_query_cost – 当对执行计划的查询驱逐消耗被计算时触发。

query_store_generate_showplan_failure – 当查询存储因为showplan生成失败而存储查询计划失败时触发。

query_store_capture_policy_evaluate – 当对查询的捕获策略被评估时触发。

query_store_capture_policy_start_capture – 当一个UNDECIDED查询转换为CAPTURED时触发。

query_store_capture_policy_abort_capture – 当一个UNDECIDED查询转换为CAPTURED失败时触发。

query_store_schema_consistency_check_failure – 当查询存储架构一致性检查失败时触发。


SQL Server Management Studio(SSMS)查询存储属性


SSMS“Query Store”容器


在启用查询存储后数据库将会在SSMS中有新的“Query Store”容器:

clip_image005


你可以右击“Query Store”容器来查看可用选项:

clip_image006


或者你可以展开容器并使用查询存储SSMS面板:

clip_image007


资源消耗前几名(Top Resource Consumers)


大多数查询存储面板有类似的架构和显示选项。让我们在“Top Resource Consumers”面板示例中查看他们:

clip_image008


面板左侧的图表基于对纵坐标和横坐标选择的指标显示了总的统计数据。也有“Metric”(1)和“Statistics”(2)下拉列表。


面板右侧图表(叫做“Plan Summary”)基于选择的“Metric”(1)和“Statistic”(2)显示了选择的高亮显示的查询(在图表左侧的绿色按钮)的统计信息。对右侧图表选择的“Statistic”成为了一个纵坐标。


左侧图表的刷新按钮将会刷新所有图表。右侧图表的相同按钮将只会刷新右侧图表。


注意到我们选择了带有多个面板的查询用以回顾(左侧图表的“num plans”纵坐标)。右侧图表以不同的颜色显示了每个面板。


你可以将鼠标移过(3)左侧或右侧图表的对象,并看到对特定的query_id或plan_id看到详细的统计信息。


详细信息将根据选择的指标而不同:

clip_image009


在右侧图表中泡的大小(4)依赖于总的执行次数。


当你在面板的底部点击不同的面板((3)或(4)),将会对特定的plan_id显示执行计划。


注意到一些标题是动态的。面板的名称(6)将会是“Top Resource Consumers [db_name]”。在我们的示例中头部是:“Top 25 Top Resource Consumers During the last hour for database qstore_test”。标题的这些部分是动态的:

l (7) -- “Top 25” – 配置值(下面我们将回顾配置选项)

l (8) -- “last hour” – 配置值

l (9) -- “qstore_test” – 被监控数据库名


让我们回顾“Top Resource Consumers”面板的下拉菜单:

clip_image010


(1) 可用指标:

l CPU Time

l Duration(默认)

l Execution Count

l Logical Reads

l Logical Writes

l Memory Consumption

l Physical Reads


(2) 左侧图表 – 纵坐标:

l “exec count”—执行次数总计

l “num plans”—执行计划数量

l 第三个默认选项是动态的,它基于选择的指标(1)和统计(3)。显示格式是“[statistic][metric]”。

例如:“avg logical reads”。


注意,当“Execution count”指标被选择,然后只有两个选项可用:“exec count”和“num plans”。


(3) 统计:

l Avg(默认)

l Max

l Min

l Std Dev

l Total


(4) 左侧图表 – 横坐标:

l “query id”(默认值)

l “exec count”

l 第三个选项是动态的,它基于选择的指标(1)和统计(3)。显示格式是“[statistic][metric]”。例如:“total logical reads”。注意,当“Execution count”指标被选择,然后只有两个选项可用:“exec count”和“num plans”。


(5) 右侧图表(“Plan Summary”)的纵坐标基于左侧图表中选择的“Statistics”而改变:

l Avg(默认值)

l Max

l Min

l Std Dev


注意,如果在左侧图表“Total”统计被选择,那右侧图表的坐标被设置为“Avg”。这会在最终版本中修改。


(6) 如果你有更小的屏幕分辨率,一些图标会被隐藏。


让我们在右侧图表点击“Grid”和标题旁边的“Vertical View”并回顾可用按钮:

clip_image011


从图表到单元格修改“Plan Summary”允许我们以表格格式对每个计划显示统计信息。


“Track Query”(1)按钮将会打开“Tracked Queries”面板。我们将会在下一步回顾该按钮。


“View Query”(2)将会带着查询的T-SQL脚本打开新的SSMS窗口。

clip_image012


图表左侧的“Detailed Grid”(3)将会显示带有所有统计信息的前几名查询的列表(显示了更多列):

clip_image013


在左侧图表的“Grid”按钮显示了前几名查询的列表,但列数量会被限制并且显示的列依赖选择的统计信息和指标:

clip_image014


“Configure”按钮(5)允许你统一在一个面板中配置该面板:

l Metric

l Statistics

l Time interval

l 返回多少记录

l Display Time format

clip_image015


这里是“Time Interval”的选项:

clip_image016


如果你有一个带有多个执行计划的查询,你可以在左侧图表点击“Compare Plans”按钮并且并排看到这些面板:

clip_image017

clip_image018


“Force plan”按钮在左侧图表的执行计划部分的下面是可用的。我们将下一步回顾它。


注意:本文基于SQL Server 2016 CTP 2.2而写。一些截屏和行为可能会在最终版本中改变。


接下来


l 很快回来阅读查询存储使用的示例的下一篇文章。

下载最新的SQL Server 2016评估板。

l 阅读SQL Server 2016联机帮助文档

l 阅读如何使用查询存储监控性能















本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1736705,如需转载请自行联系原作者


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
15天前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
26天前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
86 10
|
20天前
|
SQL 关系型数据库 MySQL
|
2月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
2月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
|
2月前
|
SQL Java 数据库连接
如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
【10月更文挑战第6天】在代码与逻辑交织的世界中,我从一名数据库新手出发,通过不断探索与实践,最终成为熟练掌握JDBC的开发者。这段旅程充满挑战与惊喜,从建立数据库连接到执行SQL语句,再到理解事务管理和批处理等高级功能,每一步都让我对JDBC有了更深的认识。示例代码展示了如何使用`DriverManager.getConnection()`连接数据库,并利用`PreparedStatement`执行参数化查询,有效防止SQL注入。
107 5
|
1月前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
31 0
|
2月前
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
|
2月前
|
SQL 监控 关系型数据库
使用SQL语句查询操作耗时的技巧与方法
在数据库管理和优化过程中,了解SQL查询操作的耗时是至关重要的
|
2月前
|
SQL
创建分组总计查询的SQL技巧与方法
在SQL中,创建分组总计查询(也称为聚合查询)是一项非常基础且重要的技能