博客 > 巨杉Tech | SequoiaPerf工具快速定位慢查询

巨杉Tech | SequoiaPerf工具快速定位慢查询

 2020-05-28  SequoiaDB,工具

无论是应用开发者,还是经验丰富的 DBA 工程师,在使用数据库时,除了需要正确使用数据库的 SQL 语言开发程序外,在平时的工作里,还需要对数据库的运行状态、性能表现进行持续地关注。在数据库的维护工作中,保持数据库稳定、高效地运行,是至关重要的。而在线上系统中,数据库也会由于各种各样的原因,偶尔表现查询变慢、服务器资源吃紧等情况。这种时候,就需要 DBA 工程师对数据库进行问题的分析和定位。


SequoiaDB 作为一款分布式数据库,在海量数据存储后,能够充分利用分布式计算的技术优势,依然为应用提供高效的数据库服务。并且 SequoiaDB 在集群管理和慢查询分析场景,为用户提供了一整套图形化监控管理界面,方便用户快速地管理 SequoiaDB 数据库集群。


数据库慢查询分析


为什么会产生慢查询

数据库,无论是传统的关系型数据库,还是最新流行的分布式数据库,如果用户使用的 SQL 不当,或者错误开启/关闭数据库某些特殊功能,数据库服务性能就会受到明显的影响,对外表现就是慢查询突然剧增,最终导致应用服务受到影响。


如果用户要对数据库的慢查询进行分析,首先需要了解数据库的运行机制。

在数据库内部,从架构层面主要分为两大部分:

1. SQL 解析与访问计划生成:将数据库中标准的 SQL 语言解析成数据库内部的计算语言;访问计划生成,则是将一个复杂 SQL 的访问逻辑,根据数据库自身的机制,组合成一个新的访问计划。

2. 真实数据存储:在数据库的真实存储存储区中,又包含了索引数据和真实数据两个重点部分。数据库索引是为了提升数据查询效率的一种数据结构,真实数据则是数据库中保存的用户数据。


在一般的情况下,数据库出现慢查询,一般是以下情况导致:

  • SQL 编写不规范导致数据库生成了错误的访问计划,例如:应该采用NL Join 的场景,数据库却错误选用了 Hash Join 来进行关联访问;

  • 数据库访问没有使用索引查询,而是通过表扫描获取满足条件的记录;

  • 服务器资源紧张,导致数据库运行缓慢,例如:数据库请求瞬间激增,CPU 满负荷工作,服务器出现卡顿现象;


慢查询如何定位

从慢查询出现,到了解慢查询如何产生,那么对于一个在线运行的数据库系统,又应该如何定位导致当前数据库出现慢查询的原因呢?

在实际的生产环境中,一个数据库系统,必然保存着大量的数据表和提供着多种多种的数据服务。用户如何在复杂多变的数据库环境中,准确找到问题的原因?

  • 用户在对慢查询进行问题定位时,可以从以下几个维度进行信息收集;

  • 查看数据库自动收集的慢查询SQL 命令,分析其中是否存在SQL 调优的空间;

  • 查看数据库当前正在运行的SQL 命令,分析其中是否存在大量表扫描的操作;

  • 查看数据库当前正在运行的SQL 命令,分析其中是否存在需要占用大量服务器资源的操作;

  • 查看当前服务器的资源使用情况,是否存在某项资源紧张的现象;

用户只有正确收集了以上的信息,才能够从中分析出数据库出现慢查询的原因。


慢查询优化建议

当用户遇到数据库出现慢查询后,只要能够正确收集信息,分析出是什么具体的原因导致了数据库先出现慢查询,就是对症下药,有针对性的进行问题解决。例如,如果数据库出现慢查询是因为SQL 的访问计划不理想,可以通过合理调整SQL 语句从而让数据库生成一个更加合理的访问计划;如果导致慢查询的原因是因为某张表缺少索引,则对该表添加相应索引即可很好地解决慢查询的问题。



SequoiaDB 巨杉数据库架构


SequoiaDB 整体架构

SequoiaDB 采用的是计算和存储分离技术架构,整个数据库集群分为两大部分,计算实例节点和分布式存储引擎。在计算节点中,SequoiaDB 为用户提供丰富的计算实例,包括:MySQL计算实例、PostgreSQL计算实例、SparkSQL 计算实例、JSON计算实例、S3计算实例和 PosixFS 计算实例。

image.png


SequoiaDB 的分布式存储引擎中,又细分为三种角色节点:协调节点、编目节点和数据节点。

  • 协调节点

协调节点是分布式存储引擎中的路由节点,本身不保存数据,为计算实例节点提供存储引擎的连接和负载均衡服务;

  • 编目节点

编目节点是分布式存储引擎的元数据节点,主要保存分布式存储引擎中的集群拓扑结构、数据表切分规则等重要数据;

  • 数据节点

数据节点是分布式存储引擎保存真实业务数据的角色节点。它为用户提供了高可用的数据存储能力和横向扩容的弹性扩展能力。


SequoiaDB 如何定位慢查询

用户在使用 SequoiaDB 中,如果遇到了慢查询,问题定位的方式也是遵循同样的原则:

  • 查看数据库出现慢查询的 SQL,是否存在 SQL 调优的空间;

  • 查看慢查询的 SQL,是否正确执行了索引查询;

  • 查看当前数据库中正在运行的命令,是否存在占用大量资源的请求;

  • 查看服务器的资源使用情况,是否某项资源紧张而造成数据库性能下降。

在 SequoiaDB 中,已经完整地为用户提供了慢 SQL 的收集和归档,同样的 SequoiaDB 也为用户提供了 EXPLAIN 方法,能够方便用户快速查看每个 SQL 具体的访问计划。

SequoiaDB 对于 SQL 计算实例在访问底层的分布式存储引擎时,为用户提供了SNAPSHOT 快照查询接口,方便用户即时查看底层分布式存储引擎中的数据检索方法。对于服务器的资源使用情况,用户可以通过 SNAPSHOT 快照进行查看,同时也可以通过 SAC 图形化管理工具进行查阅。

image.png


SequoiaPerf 介绍


在 SequoiaDB 数据库集群中,用户可以通过数据库提供的丰富接口,获得数据库当前运行的所有信息,对于慢查询问题定位,是有极大的帮助的。但如果让用户单纯地通过命令行方式查看数据库的相关信息,对新手用户可能会觉得比较复杂。

在 SequoiaDB 过去的版本中,SAC 服务为用户提供了数据库集群的图形化监控和管理功能。但是在原有的 SAC 图形化管理界面中,用户无法通过一个统一的界面,方便地对数据库集群的慢查询进行快速查看和问题定位。SequoiaPerf 的出现,能够很好满足复杂线上业务的快速问题定位。用户可以通过一个统一的页面,根据实时收集、展现的信息,通过简单点击,即可获取每个慢查询的具体执行信息,大大加速了问题的分析和问题解决的速度。



SequoiaPerf 慢查询分析

用户在通过 SequoiaPerf 对 SequoiaDB 数据库集群进行慢查询分析时,可以直接通过“Slow Query”页面查看数据库集群近期,都有哪些SQL是超出设置的查询时间阈值的。


当用户需要对具体的 SQL 进行慢查询细致检查时,可以直接点击列表中的“Time Spent”列的信息,获取当前 SQL 的运行情况。

image.png

用户也可以通过点击列表中“QueryText”列的信息,获取该SQL命令在 SequoiaDB 分布式存储引擎中的相应执行方法。

image.png

用户在 SequoiaDB 分布式存储引擎的执行页面中,可以继续点击列表中“Time Spent”一栏的信息,获取存储引擎中各个数据节点详细的执行信息。

image.png


SequoiaPerf 介绍

SequoiaPerf 除了能够协助用户对慢查询快速定位分析,还能够帮助用户全面监控SequoiaDB 数据集群。在 SequoiaPerf 的首页上,用户可以对 SequoiaDB 数据库集群运行情况做一个宏观的浏览,快速查阅当前集群的运行情况。

image.png

在SequoiaPerf的服务器资源页面上,用户可以了解服务器更加详细的信息。

image.png

例如服务器磁盘的I/O使用情况,可以通过放大图表获得更加详细的数据。同时用户也可以通过页面右上角的时间栏,选择查看近期一段时间的资源使用情况。

image.png

在 SequoiaPerf 监控界面中,用户可以对 SequoiaDB 的MySQL计算实例节点进行监控,用户可以通过监控界面,获得 MySQL 计算实例节点的详细信息。

image.png

总结


SequoiaDB 巨杉数据库,目前已经被广泛应用于银行、证券、保险、互联网等多个领域,线上的业务系统也种类繁多,有 OLTP 交易类型的业务系统,有存储了海量数据的数据中台业务系统,也有承载了全企业所有的非结构化数据的非结构化数据平台。


SequoiaPerf 工具的推出,能够让用户更好地对数据库集群进行监控和管理。用户能够在一个简单的页面中,就能够完成数据库集群慢查询的分析,大大提升了集群运维管理的便捷程度。


准备开始体验 SequoiaDB 巨杉数据库?