什么是SQL性能调优?

数据库管理员 (DBA) 就像赛车技师。构建和优化高性能车辆需要进行细微的微调和对细节的关注。这里的调整和那里的调整可以将你的单圈时间缩短几分之一秒。当然,那几分之一秒可以决定你是赢还是输。作为 DBA,您有责任微调您的 SQL 查询,使它们具有额外的功能。即使是速度上的微小改进也可能使您领先于竞争对手,并使您成为客户(或老板)眼中的赢家。

什么是SQL性能调优?-南华中天

虽然 SQL 性能调优不是一夜之间成为专家的事情,但在您作为云 DBA 起步时,有一些准则需要遵循。本指南将为您提供一个基本框架,供您发展技能和知识库。您将学习一些重要的交易技巧,例如如何分桶思考和对相关指标进行分组。还包括数据库维护任务的一般清单和 SQL 调优软件的免费演示。

1、什么是SQL性能调优?

明确定义什么是 SQL 性能调优并了解您要实现的目标可能会有所帮助。SQL 性能调优是改进在数据库中执行的查询的过程,目的是尽可能高效和快速地返回所需的结果。可能有几十种方法可以返回相同的结果,而 SQL 性能调优就是找到最快/成本最低的一种。

SQL 调优中没有万灵药。在一种情况下可能是最佳实践的方法不适用于另一种情况。并非所有数据库在用途(思考 OLTP 与 OLAP/数据仓库)或大小(思考 gigs 与 teras)方面都是平等的。这是一个不断测试和记录结果,然后再次测试的过程。

在执行性能调优任务时,重要的是:

  1. 分桶思考
  2. 关注相关指标
  3. 随着时间的推移衡量结果
  4. 定期维护数据库

2. 分桶思考

当面临数据库性能调优任务时,可能很难决定从哪里开始。您可能还不知道数据库的哪个方面需要注意。在谈论在云中管理数据库时,您可能不得不考虑一些在本地数据库时不必担心的事情。

制定行动计划的最佳方式是分桶思考。查看您的数据库,就像机械师分析刚进店的汽车一样。一次查看所有内容并不是很有帮助,因此机械师会根据问题的功能和位置来查看问题。是暂停的问题吗?引擎?还是需要身体锻炼?您可以将这些称为汽车维修的“桶”。

在数据库性能调优方面,将潜在问题分成不同的桶意味着根据共性组织一切。对于数据库和调整 SQL,桶可以被认为是:

  • 资源(物理或虚拟)
  • 索引/数据模型
  • 查询结构
  • 并发(阻塞——多个线程请求锁定同一数据库资源)

从那里,您可以深入到其他“桶”以确定问题的根源。以资源为例,因为如果您的数据库位于云中,这可能是您必须更加关注的一件事。以下是在考虑使 SQL 语句运行得更好时要考虑的一些资源类别:

  • 记忆
  • 磁盘 I/O(容量和延迟)
  • 中央处理器
  • 网络

相同的进一步细分可用于其他“存储桶”,但我们不会深入研究这些“存储桶”,因为在考虑内部部署与云时它们不会发生重大变化。

3.关注相关指标

当您测试您的查询并微调您的数据库时,您将跟踪特定指标以便绘制随时间改进的图表。这些指标可能包括:

  • 等待状态(数据库花时间为最终用户执行查询)
  • CPU 利用率和信号等待
  • 提交响应时间
  • SQL语句编译
  • 交易吞吐量
  • 内存压力(闩锁争用和数据快速冲出内存)
  • 磁盘 I/O 延迟
  • 网络带宽和使用情况(这对于支持云中的数据库尤为重要)

使用等待状态作为用于关联的指标的指南。如果您的数据库将所有时间都花在磁盘读取上,那么查看内存压力(为什么它总是不得不返回到磁盘?)和磁盘性能(读取延迟)作为相关指标来查看这些特定资源是否导致性能问题. 另一个很好的例子是阻塞。如果您的数据库将所有时间都花在等待释放锁上,则您无法关联 CPU、内存、磁盘或网络争用或压力。

在性能指标方面,数据库分析工具是您最好的朋友。Database Performance Analyzer中的仪表板功能提供了一个有价值的窗口,用于了解指标如何相互关联。多维性能分析为您提供了正确的上下文,因此您可以从多个角度查看数据并三角测量性能问题的根本原因。多维视图为您提供所需的人物、内容、时间、地点和原因的答案。

使用SolarWinds ® SQL Sentry,DBA 可以通过快速查看实时和历史事件及性能数据,更深入地了解整个 Microsoft 数据资产。SQL Sentry还可以显示执行计划图、查询历史记录等,因此您可以快速找到并修复可能有问题的查询。

4. 随着时间的推移衡量结果

要了解您的 SQL 查询的执行情况,您需要随时间跟踪您的指标。在几周甚至几个月的时间里收集数据将使您对数据库的整体性能有一个全面的了解。这将帮助您查看总体情况,而不是单个事件的快照。它可以帮助您回答以下问题:“我现在的表现是否比以往更差?” 凭借随时间绘制性能图表的能力,可以将其用作基准来确定任何给定时间范围内的性能是否超出正常范围。一个例子可能是将月末活动与上个月末而不是上周进行比较。

5.数据库维护任务

数据库维护对于 SQL 调优至关重要,因为此任务使您能够发现潜在问题并解决您可能从未意识到的问题。维护任务可能因环境而异,但建议执行一些常见或一般任务。

在进入具体的维护任务之前,这里有几个每个 DBA 都应该熟悉的首字母缩略词:

  • SLA – 服务水平协议(您和企业最终用户达成的协议)
  • RPO – 恢复点目标
  • RTO – 恢复时间目标
  • MTTI – Mean Time To Innocence(证明问题不在于数据库所花费的时间)

请牢记这些首字母缩略词,以下是您作为 DBA 需要执行日常维护的主要领域:

1. 备份——这需要以符合 RPO/RTO/SLA 目标的方式完成,但它会因系统而异。一种可能的方法是在工作时间进行每周完整备份、每日差异/增量备份和每小时事务日志备份(对于 SQL Server®)。这将为您提供相当数量的保护,但并不适用于所有系统。

例如,一个 30PB 的数据库不太可能需要每周进行完整备份。另外,了解恢复到昨天、上周、上个月或去年需要多长时间也很重要。您需要制定恢复计划并使您的备份符合该计划。

记住,如果你不能调整你的数据库环境,你可能不会得到加薪,但如果你不能保证你可以恢复,你将没有工作。

2. 索引维护——您的索引需要经常检查,最有可能每天检查一次。但是,您可能不想每晚都重建索引。同样,这取决于系统和重建所需的时间长度。索引中的碎片级别可能导致更新统计信息或重新组织索引比重建索引更好。

3. 更新统计数据——理想情况下需要每天检查统计数据。这些检查取决于系统、更新统计信息的时间长度、数据库对象(表和索引)中的变动量,以及下次运行时将被迫重新编译的查询。

4. 腐败检查——你应该把检查腐败作为首要任务,至少每月一次。

5. 捕获配置详细信息——对于数据库和服务器,您希望每天获取配置设置的详细信息,并在进行更改时进行跟踪。您可以扩展它以捕获其他内容,例如创建或删除的登录/用户、这些用户的权限等。详细程度取决于每个 DBA 的勤奋程度,以及他们保持低 MTTI 的愿望。

6.有用的资源

除了维护任务清单之外,这里还有一些有用的资源可以帮助您作为数据库管理员进行开发:

  • 对于 SQL 查询调优,请查看此12 步指南
  • 要编写更好的 SQL 查询,请深入阅读T-SQL 查询一书
  • 免费试用数据库性能分析器
  • SQL Server 性能调优的 3 个有用技巧
  • 下载SQL Sentry 的免费试用版

结论

如您所见,作为云 DBA 包含许多与传统 DBA 相同的关注点和活动。我们可以使用许多与过去相同的工具和方法来解决性能问题。云和未来的 DBA 可能需要对技术有更广泛的理解。因此,摆脱那些网络技能,让你的头脑进入云端。