集群运维2:监控、SQL限流与索引优化 | 学习笔记(2)

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介: 快速学习集群运维2:监控、SQL限流与索引优化

开发者学堂课程【PolarDB-X 开源人才初级认证培训课程集群运维2:监控、SQL限流与索引优化学习笔记(二),与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/1075/detail/15544


集群运维2:监控、SQL 限流与索引优化


内容介绍:

一、 PolarDB-X 架构介绍

二、课程演示

三、如何在 PolarDB-X 中优化慢 SQL

四、 PolarDB-X SQL 限流

五、 SQL 执行的过程

六、数据库优化

七、 PolarDB-X SQL Advisor 基本原理

四、 PolarDB-X SQL 限流

首先是 PolarDB-X  SQL 限流,它是一个应急处理的手段。

举个例子,当 PolarDB-X 上已经正在运行了一个在线业务的时候某一天有一个新的业务上线,但是这个业务里面的话存在一些问题 SQL :写的不那么好,会占用过多的资源,导致系统的瓶颈这种情况下可能常规的手段是需要联系这个业务的开发方去跟他们去沟通,让他们去配合把这个问题 SQL 改掉或者说临时的回滚这样的一个过程,往往也是比较耗时的。对于已经在线的业务而言,其实是不太能够等待这一段时间的,他需要能够尽快的去做业务的恢复和止血。因此 PolarDB-X 提供了 SQL 限流这样的能力,它能够让我们快速的将问题 SQL 拦截在外,不再占用系统的任何资源来保证已有业务的稳定运行。同时我们 SQL 限流也支持了很丰富的 SQL 匹配方法。image.png

这边已经给出了 SQL 限流的一个语法,可以看到它支持多种的匹配方式第一个你可以看一下支持的针对某一个 database 的某一张具体的表来做限流,他就可以做到比如只针对某一张有问题的表去限流它关于这张表的 SQL ,其他表的 SQL 不会去另外也可以去按照用户名和执行的主机来去限。举个例子,假如的新业务是在某一台固定的机器上使用了一个新建的一个账号去访问的,这样便可以快速定位到这个新建的业务。当然如果你只想对 SELECT 或者 INSERT 这样的语句去做限流,这也支持的

除此之外,还针对 SQL 的内容提供了两种匹配的方式,一种是基于关键词key word的方式,它能够根据 SQL 里面的关键字去做规则匹配来对它进行限流另一种的话是基于 SQL 模板的方式,可能我的业务上是基于一个模板生成了不同的 SQL ,不同的用户进来产生的是不同的参数针对这一类的 SQL 都想把它先留住,那便可以通过模板 id 的方式去进行限流。分别给出了基于关键字和模板 id 的两个限流的语法。


五、SQL 执行的过程

既然做完了应急处理,接下来的事便是要对有问题的 SQL 进行一个分析,找出原因并对它进行优化。首先来看一条 SQL PolarDB-X 上执行的过程

它主要分成三层来看,首先是客户端会将业务 SQL 发到 PolarDB-X 的一个 CN ,会对其进行解析优化,然后生成执行计划并调度执行。对于中间可以下推的部分,会通过网络的方,直接推到每个 DN 节点上,去执行并收集返回的结果对于不可以下推的部分,我们会等 DN 的结果返回在CN 中进行计算,最终将结果返回到用户的客户端。在这个过程中我们主要关注的就是 CN DN  两部分的资源使用和执行的耗时。针对这几种场景,我们将可能存在换 SQL 的原因分成了这三类。image.png

1. 第一类的话是业务问题它可能包括比如数据存在明显的数据倾斜或者不合理的分片策略这种情况下就有可能出某一个分片里面的数据量会非常多,然后某些分片里数据非常少一旦某一个SQL落到了这个数据非常多的分片,那它可能就会占用比较多的查询时间,或者产生较大的数据扫描成为整个SQL执行的瓶颈点。这时候的话,其实可能就需要对这个表结构去进行优化和调整还有一种是比如说业务使用上的问题,类似刚刚实验里面看到基于k这个列进行查询,但它却缺少了一个全区二级索引,导致了很多不必要的分片扫描占用了较多的 CN ,比如 CN 的CPU资源这种情况下可能就需要进行一个 SQL 的优化,或者是创建一些索引来对这个问题进行优化还有一种情况是这个业务或者这个 SQL 本身就是需要返回过多的数据。举个例子,比如的业务上有一个报表查询,它本身就是需要去查询大量的数据来计算报表的结果,那这种情况下可能就会推荐比如说一个合理的限流规则,可能不用像刚才演示的那样直接拦截,但是可以去限定它的一个并发度,避免过多的 SQL 进来占用过多的资源。

2. 第二个问题就是系统的问题系统的问题导致的比如说业务发展过快,流量得到限速使整个目前的资源成为瓶颈这种情况下,可能就推荐按昨天的课程里面说的,通过谈心的扩展的方式来增加更多的机器,对问题进行一个优化另外一种的话比如 CN DN 之间的网络有抖动,导致了延迟变大那这种情况下就需要去检查系统的网络配置是否正确,或者说网络中间的一些组件是否存在问题。

3. 第三种是执行层面的问题因为业务上的一个 SQL 到了 PolarDB-X  CN 节点,会对它进行解析优化,生成相应的执行计划。在这个过程中,会根据统计信息选择合适的执行计划如果执行统计信息过期或者不是那么准确的话,就有可能出现会选错索引或者说选错 Join 的类型或者顺序等等,这样也会导致慢 SQL 。这种情况下,我们可能就需要对 SQL 进行进一步的分析优化或者进行改写,来优化这样的问题。


六、数据库优化

这边针对刚刚提到的几种慢 SQL 产生的原因给出了相应的一些处理方式。我给出了一个列表,可以主要包括对 SQL 改写以及创建索引对库表结构优化调整系统配置以及增加更多的硬件。image.png

将这几种方式通过金字塔的方式进行排布这个金字塔自下而上的话,它的优化成本是逐步提升的,但是随之而来的它的效果却反而是越来越差。可以看一下对于 SQL 级索引条约的话,对于我们而言其实并不需要花费过多的成本,却可以取得显著的效果但是对于像硬件这样的资源,可能需要像昨天演示那样,需要加一台机器,或者说搬迁数据,是一个比较耗时,也需要付出更多成本的一种优化手段这也是为什么当系统或者当数据库出现问题的时候,DBA 往往第一时间会先去看我们有没有 SQL ,然后分析这些 SQL 的执行计划,看看是否有调优或者说创建索引的可能。但是创建索引这件事其实也是非常依赖 DBA 的经验的,也是比较耗时的。


七、 PolarDB-X SQL Advisor 基本原理

image.png

针对这种情况,刚刚也是让 PolarDB-X 提供了一个自动化的索引推荐能力叫 Expain Advisor 。下面我将对 Expain Advisor 的实现原理做一个简单介绍。的过程可以理解大概分成三个部分

第一个部分是可索引列的分析就是我需要找出哪些列是可以添加索引的,这些可能就包括 while 条件里面的列 Join 条件里面或者说group bai里面的一些列。

举个例子可以看一下这边 Agg 这张表,它有两个列式可索引的,第一个 quantity ,它其实是我们while条件里面的一个列,比如说我while quantity<0.2这样的话这个列其实是可以作为我的一个索引候选项的那还有一个partkey其实是在 Join 里面起到了效果,它是我的一个 Join key同时对于 part 的表也是一样的分析方式,通过这样的第一步找到这一条SQL里面所有可以去创建索引列,然后去构建一个候选的索引的集合,这个候选索引的集合的构建其实是基于一个假设的我们认为对于一张表而言,它业务产生关键影响的索引数不会超过两个,只基于这样的一个假设,我们限定了就是我们的索引的长度,也就是组合索引的长度不超过二

在这个条件下将所有的条件索引进行枚举,就就可以生成一个叫 Candidate Index ,也就是我们所有候选索引的一个集合。接下来我们要做的在这些不同的索引集合里面找到那个最优的集合,把它推荐出来,那便是我们最优的索引推荐的结果。至于是怎么找到最优的索引集合,我们是这么做的image.png

PolarDB-X 的优化器其实是一个基于代价的优化器,对于每一条 SQL 的话都会估算出它的执行代价。在这种情况下,优化器还提供了一个叫 What if的一个能力什么是What if?就是告诉优化器有一个索引,但是却不是继续创建它这种情况下请你告诉我它的这条 SQL 的执行执行的代价是多少?那有了这样一个 What if 的能力,只需要将我刚刚构建出来的所有索引的候选集合,分别输入到我的优化器中,告诉他这个索引,如果有这条 SQL 它的一个执行代价是多少?第二个索引创建之后它的执行代价是多少只需要在这样的枚举中找到执行代价最小的索引组合便是我们的最终的推荐结果可以达到刚刚所说的推荐出一个最优索引的一个效果。这便是 PolarDB-X 索引推荐的基本原理

相关文章
|
5月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
405 52
|
4月前
|
运维 监控 中间件
Linux运维笔记 - 如何使用WGCLOUD监控交换机的流量
WGCLOUD是一款开源免费的通用主机监控工具,安装使用都非常简单,它可以监控主机、服务器的cpu、内存、磁盘、流量等数据,也可以监控数据库、中间件、网络设备
|
6月前
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
282 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
10月前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
922 3
|
6月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
SAE(Serverless应用引擎)是阿里云推出的全托管PaaS平台,致力于简化微服务应用开发与管理。为满足用户对可观测性和运维能力的更高需求,SAE引入Sidecar容器技术,实现日志采集、监控指标收集等功能扩展,且无需修改主应用代码。通过共享资源模式和独立资源模式,SAE平衡了资源灵活性与隔离性。同时,提供全链路运维能力,确保应用稳定性。未来,SAE将持续优化,支持更多场景,助力用户高效用云。
|
8月前
|
监控 运维
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
本文介绍如何设置和查看域名或证书监控。步骤1:根据证书状态选择新增域名或证书监控,线上部署推荐域名监控,未部署选择证书监控。步骤2:查询监控记录详情。步骤3:在详情页查看每日定时检测结果或手动测试。
HTTPS 证书自动化运维:https证书管理系统- 自动化监控
|
9月前
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
1215 3
|
10月前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
130 2
|
10月前
|
消息中间件 数据采集 运维
一份运维监控的终极秘籍!监控不到位,宕机两行泪
【10月更文挑战第25天】监控指标的采集分为基础监控和业务监控。基础监控涉及CPU、内存、磁盘等硬件和网络信息,而业务监控则关注服务运行状态。常见的监控数据采集方法包括日志、JMX、REST、OpenMetrics等。Google SRE提出的四个黄金指标——错误、延迟、流量和饱和度,为监控提供了重要指导。错误监控关注系统和业务错误;延迟监控关注服务响应时间;流量监控关注系统和服务的访问量;饱和度监控关注服务利用率。这些指标有助于及时发现和定位故障。
814 1
|
11月前
|
运维 Prometheus 监控
运维之眼:监控的艺术与实践
在信息技术飞速发展的今天,运维监控已成为保障系统稳定运行的关键。本文将探讨运维监控的重要性,介绍常用的监控工具和方法,并通过实际案例分析,展示如何有效地实施监控策略,以确保系统的高可用性和性能。