【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

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:002668

评论

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

【C语言】goto 关键字

謓泽

11月月更

软件测试 | 接口自动化你不懂?听HttpRunner的作者怎么说

测试人

软件测试 自动化测试 接口测试 接口自动化 HttpRunner

房产|1-10月全国房地产开发投资数据解读

前嗅大数据

千万级学生管理系统设计试卷存储方案

Geek_92ba6f

DTSE Tech Talk | 第11期:深入浅出畅谈华为云低时延直播技术

华为云开发者联盟

云计算 后端 华为云

node.js的path路径模块和http模块

急需上岸的小谢

11月月更

打开时空隧道,重演云栖72小时云世界

阿里云视频云

阿里云 云栖大会

EventBridge 生态实践:融合 SLS 构建一体化日志服务

阿里巴巴云原生

阿里云 云原生 EventBridge

Ernie-SimCSE对比学习在内容反作弊上应用

百度Geek说

人工智能 AI技术 企业号十月 PK 榜

解析 RocketMQ 多样消费功能-消息过滤

阿里巴巴云原生

阿里云 RocketMQ 云原生

HUAWEI DevEco Studio 3.1版本发布,配套ArkTS声明式开发全面升级

HarmonyOS开发者

HarmonyOS

张文歆:思维需碰撞,才有更大的“火花”|对话 Doris

SelectDB

开源 职场 成长 学习路线 开源治理

特种设备如何管理?不同岗位视角职责解析

PreMaint

设备管理 特种设备

关于HTTPDNS,你知道多少?

移动研发平台EMAS

阿里云 网络 HTTP #EMAS

软件测试校招面试题 | 实习生和应届生有什么区别?

测试人

面试 软件测试 自动化测试 测试开发 实习

node.js的模块化与npm

急需上岸的小谢

11月月更

探知数字化研发4 - 底座篇

薛飞

数字化研发 数字化底座

IM通讯协议专题学习(二):快速理解Protobuf的背景、原理、使用、优缺点

JackJiang

分布式锁

急需上岸的小谢

11月月更

洞见科技姚明:隐私计算行业将会发展为多层级多领域的数据智能流通网络

洞见科技

战略合作再升级!合合信息与腾讯云联合推出海外智能风控方案

科技热闻

初步探索GraalVM--云原生时代JVM黑科技

京东科技开发者

Java lua jdk 云原生 GraalVM

kubernetes下jenkins实战maven项目编译构建

程序员欣宸

DevOps jenkins 11月月更

视频清晰度优化指南

得物技术

深度学习 算法 H.265 视频质量 图像超分

一文带你回顾操作系统的内存知识点

华为云开发者联盟

操作系统 开发 内存 华为云

加密算法是什么?有哪几种类型?有什么用?

行云管家

加密算法

有奖报名|StarRocks 获开源热力值增速第一,有你的贡献

StarRocks

数据库

StarRocks 与 DataPipeline 完成兼容性互认证,携手共建数据基础设施生态

StarRocks

数据库

精彩议程更新,从云原生到 Serverless 的思考和收获,邀你共同见证丨PingCAP DevCon 2022

PingCAP

TiDB

Awesome MegEngineer 英雄招募帖,开源社区专属权益等你来领

MegEngineBot

深度学习 开源 MegEngine 开发者福利

HMS Core手语服务荣获2022中国互联网大会“特别推荐案例”:助力建设数字社会

HMS Core

手语 HMS Core

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