无论是应用开发者,还是经验丰富的 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 计算实例。
SequoiaDB 的分布式存储引擎中,又细分为三种角色节点:协调节点、编目节点和数据节点。
协调节点
协调节点是分布式存储引擎中的路由节点,本身不保存数据,为计算实例节点提供存储引擎的连接和负载均衡服务;
编目节点
编目节点是分布式存储引擎的元数据节点,主要保存分布式存储引擎中的集群拓扑结构、数据表切分规则等重要数据;
数据节点
数据节点是分布式存储引擎保存真实业务数据的角色节点。它为用户提供了高可用的数据存储能力和横向扩容的弹性扩展能力。
SequoiaDB 如何定位慢查询
用户在使用 SequoiaDB 中,如果遇到了慢查询,问题定位的方式也是遵循同样的原则:
查看数据库出现慢查询的 SQL,是否存在 SQL 调优的空间;
查看慢查询的 SQL,是否正确执行了索引查询;
查看当前数据库中正在运行的命令,是否存在占用大量资源的请求;
查看服务器的资源使用情况,是否某项资源紧张而造成数据库性能下降。
在 SequoiaDB 中,已经完整地为用户提供了慢 SQL 的收集和归档,同样的 SequoiaDB 也为用户提供了 EXPLAIN 方法,能够方便用户快速查看每个 SQL 具体的访问计划。
SequoiaDB 对于 SQL 计算实例在访问底层的分布式存储引擎时,为用户提供了SNAPSHOT 快照查询接口,方便用户即时查看底层分布式存储引擎中的数据检索方法。对于服务器的资源使用情况,用户可以通过 SNAPSHOT 快照进行查看,同时也可以通过 SAC 图形化管理工具进行查阅。
SequoiaPerf 介绍
在 SequoiaDB 数据库集群中,用户可以通过数据库提供的丰富接口,获得数据库当前运行的所有信息,对于慢查询问题定位,是有极大的帮助的。但如果让用户单纯地通过命令行方式查看数据库的相关信息,对新手用户可能会觉得比较复杂。
在 SequoiaDB 过去的版本中,SAC 服务为用户提供了数据库集群的图形化监控和管理功能。但是在原有的 SAC 图形化管理界面中,用户无法通过一个统一的界面,方便地对数据库集群的慢查询进行快速查看和问题定位。SequoiaPerf 的出现,能够很好满足复杂线上业务的快速问题定位。用户可以通过一个统一的页面,根据实时收集、展现的信息,通过简单点击,即可获取每个慢查询的具体执行信息,大大加速了问题的分析和问题解决的速度。
SequoiaPerf 慢查询分析
用户在通过 SequoiaPerf 对 SequoiaDB 数据库集群进行慢查询分析时,可以直接通过“Slow Query”页面查看数据库集群近期,都有哪些SQL是超出设置的查询时间阈值的。
当用户需要对具体的 SQL 进行慢查询细致检查时,可以直接点击列表中的“Time Spent”列的信息,获取当前 SQL 的运行情况。
用户也可以通过点击列表中“QueryText”列的信息,获取该SQL命令在 SequoiaDB 分布式存储引擎中的相应执行方法。
用户在 SequoiaDB 分布式存储引擎的执行页面中,可以继续点击列表中“Time Spent”一栏的信息,获取存储引擎中各个数据节点详细的执行信息。
SequoiaPerf 介绍
SequoiaPerf 除了能够协助用户对慢查询快速定位分析,还能够帮助用户全面监控SequoiaDB 数据集群。在 SequoiaPerf 的首页上,用户可以对 SequoiaDB 数据库集群运行情况做一个宏观的浏览,快速查阅当前集群的运行情况。
在SequoiaPerf的服务器资源页面上,用户可以了解服务器更加详细的信息。
例如服务器磁盘的I/O使用情况,可以通过放大图表获得更加详细的数据。同时用户也可以通过页面右上角的时间栏,选择查看近期一段时间的资源使用情况。
在 SequoiaPerf 监控界面中,用户可以对 SequoiaDB 的MySQL计算实例节点进行监控,用户可以通过监控界面,获得 MySQL 计算实例节点的详细信息。
总结
SequoiaDB 巨杉数据库,目前已经被广泛应用于银行、证券、保险、互联网等多个领域,线上的业务系统也种类繁多,有 OLTP 交易类型的业务系统,有存储了海量数据的数据中台业务系统,也有承载了全企业所有的非结构化数据的非结构化数据平台。
SequoiaPerf 工具的推出,能够让用户更好地对数据库集群进行监控和管理。用户能够在一个简单的页面中,就能够完成数据库集群慢查询的分析,大大提升了集群运维管理的便捷程度。