【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

  • 2017-02-15
  • 本文字数:1779 字

    阅读完需:约 6 分钟

如果你的 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 协议的一个开源项目了。

查看英文原文: Getting Started with the SQL Server First Responder Kit


感谢刘志勇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-02-15 18:002766

评论

发布
暂无评论
发现更多内容

持续集成容器篇:Docker与自动化打包

Docker 架构 持续集成 jenkins 持续交付

融云 IM +RTC 重磅优惠上线!15 天免费体验,1 年服务买一赠一

融云 RongCloud

融云获 CSDN 技术影响力之星评选「年度技术品牌奖」

融云 RongCloud

写给后端开发工程师的H5前端开发知识

得物技术

前端 Web 可视化 后端开发 交互

千字带你了解什么是 RPC 协议

踏雪痕

RPC 3月程序媛福利 3月月更

iuap助力澳洋集团打造主数据管理平台

用友BIP

用友 用友iuap

一文详解Redis键过期策略

华为云开发者联盟

redis key 惰性删除 定期删除 键过期

如何捕获和分析 JavaScript Error

喀拉峻

前端

使用基于 WebRTC 的 JavaScript API 在浏览器环境里调用本机摄像头

Jerry Wang

JavaScript 前端 WebRTC 摄像头 3月月更

兴业+民生上岸面试经验分享

暖蓝笔记

3月程序媛福利 3月月更

Java基础重要面试题(二)

逆锋起笔

java面试 java基础 3月月更

ICT的圣杯(二):数字生活的另类想象

脑极体

虎符交易所Hoo研究院:元宇宙中的Decentraland是什么?

区块链前沿News

元宇宙 Hoo虎符 虎符研究院

中小企业如何搭建在线客服中心?

小炮

对微博系统中“微博评论”的高性能高可用计算架构的一点思考

晨亮

「架构实战营」

如何设计良好的技术项目文档结构

老张

项目管理 交付质量

Python 递归函数返回值为 None 的解决办法

AlwaysBeta

Python 递归

Nacos源码分析(一)之线程池的巧妙设计,可以薅到自己的项目里

刘祥

SpringCloud Alibaba

如何在 Python 中反转字符串?

Ethereal

创建 Node.js 视频流应用之后端

devpoint

node.js Video Express 3月月更

智能问答机器人

DS小龙哥

智能问答机器人 3月月更 智能对话机器人

手绘流程图,教你WSL2与Docker容器无缝互相迁移

华为云开发者联盟

Docker 容器 WSL2 迁移

使用bds搭建我的世界官方基岩版服务器(windows篇)

Daimon

在线MySQL,SQL Server建表语句生成JSON测试数据工具

入门小站

工具

聊聊 Pulsar:编译 Pulsar 源码并搭建源码环境

老周聊架构

云原生 Apache Pulsar 3月月更

CVE-2022-22947 远程代码执行漏洞复现分析

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

图解|从根儿上理解MySQL的索引

蝉沐风

MySQL 索引 B+树

网络协议之:socket协议详解之Unix domain Socket

程序那些事

socket Netty 程序那些事 3月月更

实用机器学习笔记二十八:迁移学习

打工人!

学习笔记 迁移学习 机器学习算法 3月月更

从读写角度,带你了解数仓的IO基本框架

华为云开发者联盟

io GaussDB(DWS) IO框架 行存 列存

欧拉的奇异之旅·共赴开源时代

白洞计划

SQL Server 急救包(First Responder Kit)入门教程_语言 & 开发_Jonathan Allen_InfoQ精选文章