南大通用GBase 8c 执行计划功能说明

原文链接:www.gbase.cn/community/p...

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

在数据库性能优化中,执行计划(Execution Plan) 是理解 SQL 查询行为的核心工具。它揭示了数据库优化器如何将 SQL 语句转化为具体的物理操作步骤。执行计划是数据库优化器根据 SQL 语句、表结构、统计信息等生成的执行路径方案。它描述了 SQL 查询的详细操作流程,包括:

  • 操作类型:如全表扫描、索引扫描、哈希连接等。
  • 操作顺序:各步骤的执行顺序和依赖关系。
  • 资源消耗:预估的行数(rows)、时间成本(cost)等。

在南大通用GBase 8c分布式场景下,执行计划可以帮助运维人员快速定位性能瓶颈,或者实现验证索引使用、优化器决策验证等效果。这篇文章将简述在GBase 8c数据库中的查询全周期,以及执行计划在其中的重要性。

1. 数据库查询周期

全周期应为:客户端→数据库连接→解析树→重写系统→规划器→执行器。过程中分为五个阶段:

第一阶段:通过客户端连接到GBase 8c 数据库。

第二阶段:将查询转换为称为解析树的中间格式。

第三阶段:重写系统/规则系统。它采用从第二阶段生成的解析树,并以规划器/优化器可以开始在其中工作的方式重新编写它。

第四阶段:规划阶段是最重要的阶段。在如何执行查询、使用什么索引、是否扫描较小的表以消除更多不必要的行等事项上做出规划。

第五阶段:执行器,也是最后一个阶段,将进行实际执行并返回结果。

对于每个收到的查询,GBase 8c都快速生成查询计划,并选择最合适的计划来匹配查询结构和数据的属性,提升查询性能。

2. 执行计划的获取

在GBase 8c中,主要通过EXPLAIN 命令获取执行计划。

2.1 基础语法

以下是几种常见的方式:

  • 显示SQL语句的执行计划,支持多种选项,对选项顺序无要求。
ini 复制代码
EXPLAIN [ ( option [, ...] ) ] statement;

其中选项option子句的语法为。

scss 复制代码
ANALYZE [ boolean ] | 
ANALYSE [ boolean ] | 
VERBOSE [ boolean ] |
COSTS [ boolean ] | 
CPU [ boolean ] | 
BUFFERS [ boolean ] | 
TIMING [ boolean ] | 
PLAN [ boolean ] |
FORMAT { TEXT | XML | JSON | YAML }
  • 显示SQL语句的执行计划,且要按顺序给出选项。
ini 复制代码
EXPLAIN { [ { ANALYZE | ANALYSE } ] [ VERBOSE ] | PERFORMANCE } statement;

其中参数说明

参数名 类型 含义 取值范围
statement ------ 指定要分析的SQL语句。 ------
ANALYZE、ANALYSE boolean 显示实际运行时间和其他统计数据。 TRUE(缺省值):显示实际运行时间和其他统计数据。FALSE:不显示。
VERBOSE boolean 显示有关计划的额外信息。 TRUE(缺省值):显示额外信息。FALSE:不显示。
COSTS boolean 包括每个规划节点的估计总成本,以及估计的行数和每行的宽度。 TRUE(缺省值):显示估计总成本和宽度。FALSE:不显示。
CPU boolean 打印CPU的使用情况的信息。 TRUE(缺省值):显示CPU的使用情况。FALSE:不显示。
BUFFERS boolean 包括缓冲区的使用情况的信息。 TRUE:显示缓冲区的使用情况。FALSE(缺省值):不显示。
TIMING boolean 包括实际的启动时间和花费在输出节点上的时间信息。 TRUE(缺省值):显示启动时间和花费在输出节点上的时间信息。FALSE:不显示。
PLAN boolean 是否将执行计划存储在plan_table中。当该选项开启时,会将执行计划存储在PLAN_TABLE中,不打印到当前屏幕,因此该选项为on时,不能与其他选项同时使用。 ON(缺省值):将执行计划存储在plan_table中,不打印到当前屏幕。执行成功返回EXPLAIN SUCCESS。OFF:不存储执行计划,将执行计划打印到当前屏幕。
FORMAT ------ 指定输出格式。 取值范围:TEXT、XML、JSON和YAML。默认值:TEXT。
PERFORMANCE ------ 使用此选项时,即打印执行中的所有相关信息。 ------

示例:EXPLAIN SELECT * FROM employees WHERE salary > 10000;

上述示例仅输出展示优化器预估的执行步骤,但不实际执行查询。

示例:EXPLAIN ANALYZE SELECT * FROM employees WHERE salary > 10000;

添加 ANALYZE 选项会真实执行查询,并反馈实际耗时和行数:

2.2 执行计划解读

以下是一个典型的执行计划示例:

ini 复制代码
QUERY PLAN
---------------------------------------------------------------------
Seq Scan on employees  (cost=0.00..25.88 rows=500 width=56)
 Filter: (salary > 10000)
 Buffers: shared hit=5

解读:

Seq Scan 表示全表扫描。

cost表示成本,格式为 启动成本..总成本,单位是抽象的计算单位。

rows表示优化器估算的返回行数。

width表示数据宽度,每行的平均字节数。

Filter理解为过滤器,就是在扫描时应用的过滤条件。

Buffers意为缓存,示例中shared hit=5 表示从缓存读取了 5 个块。

2.3 常见的操作类型

Seq Scan:全表扫描,逐行读取数据。无可用索引或小表查询

Index Scan:通过索引定位数据,再回表查询。等值查询或范围查询。

Index Only Scan:仅扫描索引,无需回表。查询列全部包含在索引中。

Hash Join:使用哈希表实现表连接。大表连接,内存充足。

Nested Loop:嵌套循环连接,适合小数据集。小表驱动大表。

Sort:排序操作,可能使用内存或磁盘临时文件。ORDER BY 或 GROUP BY。

2.4 执行计划优化策略

1)索引优化

避免全表扫描:为高频过滤字段添加索引。

覆盖索引:包含查询所需的所有列,减少回表开销。

复合索引:根据查询条件顺序创建多列索引。

2)统计信息更新

优化器依赖统计信息生成计划,需定期更新

3)参数调优

work_mem:增加内存分配,避免排序和哈希操作写磁盘。

shared_buffers:增加数据库缓存

执行计划是数据库性能优化的"地图",通过分析 GBase 8c 的执行计划,可以精准定位慢查询的根源。本文通过基础概念解析、案例和优化策略,展示了从获取计划到解决问题的完整链路。实际应用中需结合统计信息、硬件资源和业务需求,持续迭代优化方案。掌握执行计划的解读能力,是每一位数据库开发者和运维人员的必备技能。

原文链接:www.gbase.cn/community/p...

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

相关推荐
迷茫运维路28 分钟前
MySQL5.7主从延迟高排查优化思路
数据库·主从延时高
菜鸟学Python1 小时前
Python web框架王者 Django 5.0发布:20周年了!
前端·数据库·python·django·sqlite
小云数据库服务专线1 小时前
GaussDB 查看会话连接数
数据库·gaussdb
墨迹的陌离2 小时前
【Linux】重生之从零开始学习运维之Mysql
linux·运维·服务器·数据库·学习·mysql
BigBigHang3 小时前
【docker】DM8达梦数据库的docker-compose以及一些启动踩坑
数据库·docker·容器
m0_720245014 小时前
QT(四)基本组件
数据库·qt·microsoft
Databend4 小时前
使用 Databend Cloud 归档 OceanBase 数据数据库
数据库
fei飛fei飞5 小时前
数据库事务中的陷阱:脏读、幻读与不可重复读
数据库
FINE!(正在努力!)5 小时前
关于sql面试积累
数据库·sql
看天走路吃雪糕5 小时前
墨者:SQL过滤字符后手工绕过漏洞测试(万能口令)
数据库·sql·sql注入·墨者学院·万能口令