今年开始一直在持续优化公司一个老项目中的SQL Server数据库,主要暴露出来的问题是查询非常缓慢,之前一些的文章中也提到过,趁着疫情没有结束,系统流量不高做一些持续性的优化,其实之前就陆陆续续的做了好多,今天主要介绍一位真真的大神和他工具给我提供的帮助。
Brent Ozar大神是微软的SQL Server Master级别专家,提供独立的SQL Server数据库优化咨询,多年的SQL DBA的经验,他的个人网站https://www.brentozar.com/ 上有大量的关于SQL Server优化的经验和原理级别的阐述,同时大神在油管上也有自己的个人频道和在线调优的视频和原则。英文站点和无字幕英文视频适合有一定程度小伙伴一起研究和瞻仰大神的风采。
今天说的First ResponseKit就是大神开发的一些列存储过程和脚本用来定位。
https://www.sqlskills.com/help/accidental-dba/ 通过这个链接找到大神的github,下载脚本就可以了安装了,可以再新建的数据库中安装。
1)sp_BlitzWho: 是谁引起了当前的问题?
当数据库出错的时候你首先应该使用这个工具。它会告诉你谁被连接了,它们正在执行什么,并且会告诉你它们拖慢数据库的程度。
主要是:
1.Execution plans:执行计划
3.Degrees of parallelism 并发度
4.And a lot more useful stuff for query performance tuners'
执行计划可以单击打开哦,这个主要是在SQL Server性能警报或者用户抱怨发生时候用来看下当前是谁引起的问题。
2)sp_BlitzFirst: 你在等待什么?
sp_BlitzFirst工具能帮助你发现你的数据库在等待什么。在下面的例子中你能看到 #1 问题除了SQL Server消耗了太多的 CPU 时间之外,还有其他的许多问题。
3)sp_Blitz: 这个数据库配置正确了吗?
当你第一次接管了一台数据库服务器时,你应该用到的工具就是sp_Blitz。这个工具能够以配置数据库的方式识别出一些常见的问题。每一个检查到的问题都包括如何解决这个问题的信息和一个优先级,这个优先级指明了该以怎样的顺序解决这个问题。
4)sp_BlitzCache: 哪些条查询需要进行调整?
如果当前的问题都已经解决了,你就可以开始探索一些主动提高性能的方法了。一个叫做sp_BlitzCache的工具就是用于此的。这个工具用于监控SQL Server的查询计划缓存(query plan cache),它能监测哪些查询对数据库超时有最大的影响。它也能警告你一些查询中的常见问题,例如通过标量运算和隐式类型转换来进行列计算。
sp_BlitzFirst和sp_BlitzCache最主要的区别就是sp_BlitzFirst监测的是实时发生的事件。相反的是,sp_BlitzCache监测的是历史数据,它能帮你识别出一个趋势,因此它不需要你当场找出存在问题的查询操作。
个人非常推崇这个工具:可以用来从执行计划的缓存中找到执行计划的问题,索引缺失,不合理的SQL语句和服务器配置等。
use dba
exec dbo.sp_BlitzCache
这里会有两个结果集合,一个是显示根据不同参数排名的前十的性能消耗(CPU、内存)和他的执行时间、当时执行计划和问题,
下面是一个汇总,链接了作者的网站和解决这些问题的常见思路。
5) sp_BlitzIndex: 我的索引都是怎么工作的?
如果性能问题看起来是系统性的,而不是针对特定的查询,你需要检查的下一个地方就是索引了。索引丢失会造成严重的性能问题是众所周知的,它会造成查询时间呈十倍、百倍甚至千倍的增长。
一个同样重要的问题是过多的索引。除了告诉你丢失的索引外,sp_BlitzIndex也会告诉你有可能在维护一个索引上花费的时间比使用它花费的时间还要长。不必要的索引维护不仅会减慢写入速度,还会产生除缓存以外的更多的数据,这些都会大大减慢不相关查询的速度。
本文为Lokie.Wang原创文章,转载无需和我联系,但请注明来自lokie博客http://lokie.wang