SQL Server 急救包(First Responder Kit)入门教程

如果你的SQL Server数据库运行起来十分缓慢甚至逐渐停止了,恰巧又赶上了你的数据库管理员在休假,你又不知道该如何是好,那么这篇文章会帮助你从学习使用SQL Server急救包(SQL Server First Responder Kit)开始解决问题。这个开源项目包含了一系列能够帮助数据管理员或者临时数据管理员的脚本,能够修复和调整SQL Server实例至正常状态。

这些脚本以存储过程(stored procedures)的形式安装在你的服务器的“主”(master)数据库中。它们都以 “sp_” 为前缀,这能够保证它们在你所能看到任何一个数据库中都能被调用。

注意:SQL Server总是首先搜索主数据库中以 “sp_” 开头的存储过程,因此如果标准的存储过程,即特定数据库的存储过程使用那个前缀的话,会略微影响服务器的速度,因为它被放在了错误的位置。

sp_BlitzWho: 是谁引起了当前的问题?

当数据库出错的时候你首先应该使用这个工具。它会告诉你谁被连接了,它们正在执行什么,并且会告诉你它们拖慢数据库的程度。

如果你发现了一个需要被关闭的无响应的程序,你可以使用 “kill” 命令加上相关的会话 id 来杀掉它。

如果问题还没有解决,那么你可以试试sp_BlitzFirst。

sp_BlitzFirst: 你在等待什么?

sp_BlitzFirst工具能帮助你发现你的数据库在等待什么。在下面的例子中你能看到 #1 问题除了SQL Server消耗了太多的 CPU 时间之外,还有其他的许多问题。

除非你在一个开发者的机器上来测试脚本,否则这些诊断信息真的很不常见。常见的是你会发现一个或更多的 “等待状态(wait stats)” 问题。

在SQL Server中,所有可能减慢一条查询的速度的都被追踪为“等待状态(wait stats)”。它包括硬盘等待、网络I/O等待和列粒度上或表粒度上的锁等待以及等待CPU或者内存资源等等。输出列表中的链接会帮助你处理常见的等待类型,但是它能追踪上百种不同的等待类型,其中的一些影响系统性能的特定等待状态就不那么容易能找到相关信息了。

sp_Blitz: 这个数据库配置正确了吗?

当你第一次接管了一台数据库服务器时,你应该用到的工具就是sp_Blitz。这个工具能够以配置数据库的方式识别出一些常见的问题。每一个检查到的问题都包括如何解决这个问题的信息和一个优先级,这个优先级指明了该以怎样的顺序解决这个问题。

从上边的图片你能看到,有许多数据库长时间没有备份或者长时间没有进行崩溃检查。

它能检测到的问题还包括:

  • 不良配置,尤其是“由默认引起的错误(wrong by default)”,例如并行查询阀值(cost threshold for parallelism)的默认配置错误。

  • 危险文件位置,例如在系统盘上存储事务日志。

  • 非生产许可证(Non-production licenses)的使用。

  • 对数据库崩溃、内存不足等警告的忽略。

  • 通用安全设置错误,例如错误的数据库所有者权限。

sp_BlitzCache: 哪些条查询需要进行调整?

如果当前的问题都已经解决了,你就可以开始探索一些主动提高性能的方法了。一个叫做sp_BlitzCache的工具就是用于此的。这个工具用于监控SQL Server的查询计划缓存(query plan cache),它能监测哪些查询对数据库超时有最大的影响。它也能警告你一些查询中的常见问题,例如通过标量运算和隐式类型转换来进行列计算。

sp_BlitzFirst和sp_BlitzCache最主要的区别就是sp_BlitzFirst监测的是实时发生的事件。相反的是,sp_BlitzCache监测的是历史数据,它能帮你识别出一个趋势,因此它不需要你当场找出存在问题的查询操作。

sp_BlitzIndex: 我的索引都是怎么工作的?

如果性能问题看起来是系统性的,而不是针对特定的查询,你需要检查的下一个地方就是索引了。索引丢失会造成严重的性能问题是众所周知的,它会造成查询时间呈十倍、百倍甚至千倍的增长。

一个同样重要的问题是过多的索引。除了告诉你丢失的索引外,sp_BlitzIndex也会告诉你有可能在维护一个索引上花费的时间比使用它花费的时间还要长。不必要的索引维护不仅会减慢写入速度,还会产生除缓存以外的更多的数据,这些都会大大减慢不相关查询的速度。

SQL Server急救包最早由Brent Ozar Unlimited开发,现在它已经是通过MIT协议的一个开源项目了。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mybatis的$和#详解分析

MyBatis中#{}和${}的作用与区别_陈三千的博客-CSDN博客_mybatis${}有什么用 MyBatis中#{}和${}的作用与区别 MyBatis中#{}和${}的作用与区别_陈三千的博客-CSDN博客_mybatis${}有什么用 在mybatis中#和$的主要区别是:#传入的参数在SQL中显示为字符串,#方…

IE8浏览器缓存问题导致Ajax的GET请求只能执行一次的解决办法

转载自 IE8浏览器缓存问题导致Ajax的GET请求只能执行一次的解决办法 最近在测试兼容性问题的时候发现,使用Ajax的GET请求向后台获取响应结果时,如果是IE8浏览器,第一次发送请求时会得到正常的返回结果,然后当再去发送相同请求访…

springboot获取多个请求参数_springboot获取URL请求参数的多种方式

1、直接把表单的参数写在Controller相应的方法的形参中,适用于get方式提交,不适用于post方式提交。/*** 1.直接把表单的参数写在Controller相应的方法的形参中* param username* param password* return*/RequestMapping("/addUser1")public S…

Mysql常用语法总结

Mysql常用语法总结如下: #连接mysql数据库(Dos下面) mysql -u root -p 123 #创建数据库 create database myschool; #创建表 drop table student create table student ( id int comment 编号, name CHAR(10) comment 姓名 )charset utf8drop table if exis…

基数排序+推导过程

图解 代码实现 package com.atguigu.sort;import java.util.Arrays;/*** 创建人 wdl* 创建时间 2021/3/22* 描述*/ public class RadixSort {public static void main(String[] args) {//53, 3, 542, 748, 14, 214int arr[] {53, 3, 542, 748, 14, 214};radixSort(arr);}//基…

Xamarin的坑 - 绑定(一) - 拿微信iOS SDK 简单说起

编者语:Xamarin 并入微软快一年了,在国内推广还是慢,主要有两个方面,Xamarin在国内的本地化不足真正在国内的解决方案基本上没有,第二就是和本土的一些主要SDK接入案例基本上也没有。上述原因令不少企业放弃使用这个很…

JS刷新页面的几种方法

转载自 JS刷新页面的几种方法 Javascript刷新页面的几种方法: 1 history.go(0) 2 location.reload() 3 locationlocation 4 location.assign(location) 5 document.execCommand(‘Refresh‘) 6 window.navigate(location) 7 location.replace(location) …

16岁应该遵循什么_成人学习一般遵循的规律

成人学习一般遵循的规律第一阶段是激发起对过去的经历的回忆,让学习者回头想想自己以前做了些什么,是在什么情况下运用什么方法做的;第二阶段,启发学习者对这些经历进行反思,检讨这些经历的成功与失败之所在&#xff0…

stream进行分组统计

// //groupingBy分组 // Map<Integer, Long> map houseList.stream().collect(Collectors.groupingBy(House::getBuildId, Collectors.counting())); // //控制台输出map // map.forEach((k,v)->{ // System.out.println("k"k",v"v)…

js实现页面跳转重定向的几种方式

转载自 js实现页面跳转重定向的几种方式 这篇文章主要介绍js实现页面跳转重定向的几种方式,需要的朋友可以参考下 第一种&#xff1a; <script language"javascript"type"text/javascript"> window.location.href"http://shanghepinpai.c…

二分查找+思路分析

思路分析 代码实现 package com.atguigu.search;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ //注意&#xff1a;使用二分查找的前提是&#xff0c;该数组是有序的 public class BinarySearch {public static void main(String[] args) {int arr[]{1,8,10,89,1000,1234};int…

SQLServer On Linux Package List on CentOS

问题引出 “鸟儿啊&#xff0c;到底SQLServer on Linux肚里装了多少东西&#xff0c;在我们的CentOS系统安装了哪些物理文件呢&#xff1f;”&#xff0c;老鸟这天火急火燎的问道。“这个啊&#xff1f;让本鸟帮你一探究竟。”&#xff0c;菜鸟耐心回答道。 问题分析 菜鸟一边想…

开发环境 Minio 添加桶的操作流程-页面操作

命令操作 d开发环境 Minio 添加桶的操作流程_摇曳的精灵的博客-CSDN博客_minio创建桶 页面操作

python 可视化数据库_python实现地址分布可视化

当你知道某些详细地址信息&#xff0c;该如何利用。本文通过调用百度地图接口&#xff0c;实现用户可视化展示&#xff0c;便于更清楚地了解用户。注册百度地图开放平台帐号Python调用通过http调用接口格式如下&#xff1a;全选复制放进笔记http://api.map.baidu.com/geocoder/…

冬至快乐

男生关注会更帅&#xff0c;女生关注会更美&#xff01;冬至冬至到&#xff0c;吃水饺&#xff0c;颗颗都有年味道。头常挠&#xff0c;口常笑&#xff0c;睿智快乐常围绕。摇摇头&#xff0c;晃晃脑&#xff0c;轻松健康直到腰。扭扭臂&#xff0c;捏捏脚&#xff0c;健康到底…

JavaScript原生添加移除class的方法

转载自 JavaScript原生添加移除class的方法 1.JavaScript原生移除class方法 window.onload function () {var stamp document.getElementById("btGetCode"); //根据id查找到该标签removeClass(stamp, "can-code"); //调…

二分查找(一次查找多个相同的值)

package com.atguigu.search;import java.util.ArrayList; import java.util.List;/*** 创建人 wdl* 创建时间 2021/3/23* 描述*/ //注意&#xff1a;使用二分查找的前提是&#xff0c;该数组是有序的 public class BinarySearch {public static void main(String[] args) {int…

介绍Portable PDB

为了调试编译的应用程序&#xff0c;有必要将IL代码或二进制的机器代码与源代码行进行匹配。虽然数据可以嵌入在应用程序中&#xff0c;但这会显著增加EXE或DLL文件的大小。取而代之的是&#xff0c;通常会使用单独的“symbols”文件。在Windows平台上&#xff0c;这被称为PDB或…

RedisGeo实现增删改查 java计算指定坐标最近的距离并排序

利用Redis的Geo功能实现查找附近的位 - 云社区 - 腾讯云 package com.easy.hotel.pms.util;import com.easy.hotel.common.data.tenant.TenantContextHolder; import com.easy.hotel.pms.mapper.CommunityMapper; import com.easy.hotel.pms.service.impl.CommunityServiceImpl…