最近发现还有老外看我的东西, 我就纳闷了,这中文您......., 好吧精神可嘉。话归正题,与MYSQL,PG 不同的SQL SERVER 其实在慢查询排查中一直是没有什么日志的,而通过DMV 或者工具来查询总觉得和其他两种数据库比较是有一定缺陷的。

但是从SQL SERVER 2016 开始SQL SERVER 也意识到这点,添加了一个功能。如何打开和使用follow me.

1 打开 SSMS (别说不知道什么是SSMS) SQL SERVER management studio

2 点击你要记录慢查询日志的数据库-- 右键属性-- 查询存储 (query stone)

SQL SERVER 2016  query history Store 排查慢SQL 与DBA 未来_SQL

可以调整的参数,其实不多,大致可以注意一下

Query stone capture mode 

size base cleanup mode 

都可以设置为自动

同时可以设置一下相关数据的保存时间等等,大致看看就明白了,这里就不多讲了。在信息收集的频率和间隔上也可以进行相关的设计。

在设置完毕后,其实数据库就可以进行信息的收集了。

SQL SERVER 2016  query history Store 排查慢SQL 与DBA 未来_数据库_02

其中提供了几种查询方式

1 回归查询

2 总体资源使用情况

3 使用资源排名的方式

4 带有强制执行计划的方式

5 具有高度差异的查询

6 跟踪查询

从最简单的问题排查来说,首先我们可能关注的是慢查询

而慢查询有几种方式体现

1  查询时间长

2  使用物理I/O 多

3  内存占用多少

而SQL SERVER 2016 提供的功能具有所有的维度和角度来进行分析和问题的查找。

SQL SERVER 2016  query history Store 排查慢SQL 与DBA 未来_数据库_03

更强大的功能是可以根据历史来进行查询数据的分析和查询

通过这项技术可以解决什么样的问题

1  系统上线后或测试中遇到的语句性能问题

2  语句在执行中发生的执行计划的变换

3  语句执行中使用的性能百分比

4  查找缺失的索引的问题

5  快速分析目前服务器中的语句性能维度

以下举例

1  系统上线后1个小时发生严重的性能问题,运维报告CPU 被大量占用但具体那条语句造成的问题无法找到。

方法:

点击总体资源使用,我们找到CPU时间

举例

SQL SERVER 2016  query history Store 排查慢SQL 与DBA 未来_SQL_04

直接去点击我们上面图中占用CPU时间最多的矩形即可,点击后立即我们就可以发现到这条语句缺少索引。

SQL SERVER 2016  query history Store 排查慢SQL 与DBA 未来_数据库_05

问题2 系统已经运行了一段时间有人告知说目前系统运行缓慢,我们需要收集部分高性能语句的在不同时间段的执行次数的差距以及性能

SQL SERVER 2016  query history Store 排查慢SQL 与DBA 未来_慢查询_06

上面的语句是一个简单的查询语句并且走了主键,但为什么他标识为有差距较大的语句我们可以,将鼠标挪移到右边有图的地方,将鼠标放置到圆点的地方。

从下图,可以清晰的看出,一条同样的语句,查询的时间可以从0.06ms 到

1888.51ms 之间的差距。而这就是我们需要关注的一些潜在或已经凸显的问题的现象。

SQL SERVER 2016  query history Store 排查慢SQL 与DBA 未来_SQL_07

甚至可以通过某些语句来知晓业务上的逻辑和繁忙的程度。

从上面的功能我们可以深深的感受到,类似  SQL SERVER 这样的商业数据库越来越完善,这样的数据库在一些公司里面可能越来越不需要更多的DBA ,and What 's a surprise today , the Email was from Easthome

SQL SERVER 2016  query history Store 排查慢SQL 与DBA 未来_数据库_08