SQL Server - SQL Server 2016新特性之 --- Query Store
前言
SQL Server 2016引入新的查询语句性能监控、调试和优化工具/功能 -- Query Store。以前我们发现一条查询语句性能突然下降,我们要去找出问题的所在往往需要通过调用一些DMV(比如sys.dm_exec_query_stats, sys.dm_exec_sql_text和sys.dm_exec_query_plan)来获取查询计划的一些信息,比如XML格式的执行计划,查询语句的代码,执行了多少次以及一些资源和时间的的使用消耗情况。然后根据这些信息来判断这条语句是否存在性能问题。问题在于但一条语句出现了性能下降,我们可能需要和过去的信息进行一个比较,才能知道性能是否下降了。比如一条语句如果过去花了1秒,现在3-5秒,我们可能第一眼会认定它是没有问题的,但是其实它性能是下降了的。所以我还需要一个任务去定时收集这些资料。比如下面这条语句就是用来收集这些信息的。
SELECT s2.dbid, (SELECT TOP 1 SUBSTRING(s2.text,statement_start_offset / 2+1 , ( (CASE WHEN statement_end_offset = -1 THEN (LEN(CONVERT(nvarchar(max),s2.text)) * 2) ELSE statement_end_offset END) - statement_start_offset) / 2+1)) AS sql_statement,s3.query_plan,execution_count, plan_generation_num, last_execution_time, total_worker_time, last_worker_time, min_worker_time, max_worker_time, total_physical_reads, last_physical_reads, min_physical_reads, max_physical_reads, total_logical_writes, last_logical_writes, min_logical_writes, max_logical_writes FROM sys.dm_exec_query_stats AS s1 CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2 CROSS APPLY sys.dm_exec_query_plan(plan_handle) AS s3
SQL Server 2016引入了Query Store来自动收集数据库的查询计划和相关的一些性能信息,还提供了4种不同类型的报表可以来查看收集的数据。不通过报表,我们也可以通过一些新增的DMV来查询收集好的数据。
那么究竟Query Store可以在哪些方面帮到我们?
1)快速定位查询语句的查询计划性能回退,找出哪些查询语句最近因为查询计划的改变出现性能回退?这当中可能是因为删除了某条索引、过去某个时间点有大量的数据涌入数据表中而统计数据没有及时得以更新、或者最近代码发现了改变等原因。
2)获知查询在某段时间内的资源使用/占用情况以及执行次数。有时语句本身可能执行计划没有回退的情况出现,但是由于语句本身写法问题或者缺乏合理的索引,导致语句的执行非常消耗资源,对于SQL Server整体的性能或者服务器的性能造成很大的印象。作为DBA本身也需要及时去定位这些类型的语句,最后得出一些解决办法。
3)获知数据库过去某段时间内的整体查询工作负荷,包括承受的并发查询压力(量级),资源消耗情况。
架构
Query Store存储分两部分,一部分是用于存储编译好的执行计划的Plan Store,另一部分用于存储语句执行执行过程中的一些统计数据。这些数据先是驻留在内存,随后会根据你设定好的时间间隔写入到数据库的主文件组中。
因为Query Store也需要背面的线程来定时写入数据,所以启用Query Store大概会付出3-5%的性能代价。间隔越短,性能的代价越大。间隔大了,由于SQL Server重启导致丢失收集好在内存中但是还没有写入磁盘的那些数据的损失就越大。
Query Store在访问收集好的数据时是会先查看数据是否是否已经在内存中,这样就必须去磁盘找了。只有不在内存中才去磁盘找。它会先调用一个叫QUERY_STORE_RUNTIME_STATS_IN_MEM的表函数去访问内存中的数据,同时访问plan_persist_runtime_stats这张表去访问磁盘的数据。
启用Query Store功能
通过代码启用Query Store
ALTER DATABASE XXXXX SET QUERY_STORE = ON;ALTER DATABASE XXXXX SET QUERY_STORE(MAX_STORAGE_SIZE_MB = 250,SIZE_BASED_CLEANUP_MODE = AUTO,CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30));
上面括号中的选项对应的GUI上选项列表
内置Query Store报表
这大概是Query Store最有用的功能。通过报表的形式和已经定制好的性能调优类型的报表来让用户知道过去一段时间内的数据情况。
目前一共提供了4种类型的报表,分别的:回归的查询,总体资源的使用,前几个资源使用的查询,跟踪的查询。
Query Store相关的DMV
- sys.database_query_store_options (Transact-SQL) -- query store的一些数据库配置的选项和值
- sys.query_context_settings (Transact-SQL)
- sys.query_store_plan (Transact-SQL)
- sys.query_store_query (Transact-SQL)
- sys.query_store_query_text (Transact-SQL)
- sys.query_store_runtime_stats (Transact-SQL)
- sys.query_store_runtime_stats_interval (Transact-SQL)
他们的关系
select * from sys.query_store_query qsq joinsys.query_context_settings qcs on qsq.context_settings_id = qcs.context_settings_id joinsys.query_store_query_text qst on qst.query_text_id = qsq.query_text_id joinsys.query_store_plan qsp on qsp.query_id = qsq.query_id joinsys.query_store_runtime_stats qsrs on qsrs.plan_id = qsp.plan_id joinsys.query_store_runtime_stats_interval qsrsi on qsrsi.runtime_stats_interval_id = qsrs.runtime_stats_interval_id
参考:
SQL Server 2016:通过Query Store定位回归缺陷
The SQL Server 2016 Query Store: Overview and Architecture
转载于:https://www.cnblogs.com/jenrrychen/p/6131570.html
SQL Server - SQL Server 2016新特性之 --- Query Store相关推荐
- SQL Server 2016新特性:Query Store
使用Query Store监控性能 SQL Server Query Store特性可以让你看到查询计划选择和性能.简化了性能调优,可以快速的发现因为查询计划的选择导致的性能的差别.Query Sto ...
- SQL Server 2016新特性:列存储索引新特性
SQL Server 2016新特性:列存储索引新特性 行存储表可以有一个可更新的列存储索引,之前非聚集的列存储索引是只读的. 非聚集的列存储索引支持筛选条件. 在内存优化表中可以有一个列存储索引,可 ...
- AlwaysOn 2016 新特性和提升
AlwaysOn 2016 新特性和提升 AlwaysOn可用性组作为SQL Server 2012的新特性被引入,它增强了数据库镜像和故障转移集群技术,提供了高可用和灾难恢复. 在SQL Serve ...
- SQL Server 2016新特性:Live Query Statistics
SSMS可以提供可以查看正在执行的计划.live query plan可以查看一个查询的执行过程,从一个查询计划操作到另外一个查询计划操作.live query plan提供了整体的查询运行进度和操作 ...
- SQL Server 2019 (15.x) 新特性概要
2019.11.4 SQL Server 2019发布,趁热打铁了解下2019的新特性.下面整理一些个人感觉重要的或者工作上能用到的新特性,有删减,完整版参考 SQL Server 2019 中的新增 ...
- SqlServer 2016新特性 —— automatic seeding (自动种子设定)究竟是什么
在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性组中的次要副本的唯一方法是手动执行备份.复制和还原.SQL Server 2016 引入了 ...
- Windows Server 2008十大新特性
一.自修复NTFS文件系统 从DOS时×××始,文件系统出错就意味着相应的卷必须下线修复,而在WS2K8中,一个新的系统服务会在后台默默工作,检测文件系统错误,并且可以在无需关闭服务器的状态下自动将其 ...
- Windows Server 2003 网络互访新特性
网络共享资源的各种访问方法: 容易的方法:通过网上邻居 便捷的方法:映射网络驱动器 直接的方法:通过UNC路径 ...
- SQL Server 2005新特性之使用with关键字解决递归父子关系
1. 引言 现实项目中经常遇到需要处理递归父子关系的问题,如果把层次关系分开,放在多个表里通过主外键关系联接,最明显的问题就是扩展起来不方便,对于这种情况,一般我们会创建一个使用自连接的表来存放数据. ...
最新文章
- [Java 基础]方法
- SAP Cloud for Customer的CTI呼叫中心解决方案
- ecshop 广告设置
- php匿名类的应用场景,【modernPHP专题(9)】匿名类
- 解决IDEA不能编译XML文件
- orm2 中文文档 4.3 extendsTo(一对一关系)
- 电学 —— 库仑定律
- 7.4 集合及其内置方法
- 【胸片分割】基于matlab GUI最小误差法胸片分割系统【含Matlab源码 1065期】
- Java中如何使某个类的对象唯一性,只能创建一个对象
- 【C语言】冒泡排序法
- 直播源列表转换php,电视直播源列表制作、转换工具Telelist(可以DPL、M3U、TXT等互转)...
- mysql安装教程 2018_sql server 2018下载
- 将win10的屏幕颜色调成护眼色豆沙绿
- php chm中文手册201502月更新
- 【redux------状态管理库】
- 启明创投邝子平谈禾赛上市:做硬科技领域长线投资人
- php 时区对应的地区,PHP 输出的各个时区对应的时差表
- 危险漫步一个月赚多少钱?
- 右击我的电脑--管理--计算机管理,在我的电脑上点右键-管理打不开了?
热门文章
- 全球10大受欢迎的顶级编程语言与薪资水平
- vue.js是什么框架?有什么优势?
- oracle 定时器时间分区_Oracle数据库之oracle按时间分区以及自动分区
- c语言中去掉最小值,2020-07-12(C语言)从顺序表中删除具有最小值的元素(假设唯一)并由函数返回被删除元素的值。空出的位置由最后一个元素填补,若顺序表为空则显示出错信息并退出运行。...
- Node.js设置CORS跨域请求中多域名白名单的方法
- 水晶报表 mysql_水晶报表CrystalReport2008使用JDBC连接MySQL数据库-详细步骤
- C语言 const、volatile、const volatile限定符理解
- merkle tree(hash tree)
- tornado异步请求响应速度的实例测试
- 表单+文件上传+音频+iframe