文章目录
GaussDB常见调优指南
本文通过学习华为云官方发布的GaussDB(DWS)性能调优手册,对常见调优方法进行总结和梳理。
一. Analyze 统计信息解析
前言
适用版本:【8.1.1 及以上】
本文简单介绍什么是统计信息、统计信息记录了什么、为什么要收集统计信息、怎么收集统计信息以及什么时候收集统计信息。
WHY:为什么需要统计信息
Query 执行流程
词法&语法解析
语义解析
查询重写
查询优化
查询执行CBO 模型
通过代价模型(Cost Model)和统计信息估算每种执行方式的代价,然后选择一种执行代价最优的执行方式。
WHAT:都有哪些统计信息
统计信息包括表记录条数、页面数、MCV(高频非 NULL 值)、HISTOGRAM(直方图)、CORRELATION 等。
WHERE:统计信息在哪里
统计信息存储在系统表 pg_class 和 pg_statistic 中。
HOW:如何生成统计信息
可以通过以下命令手动收集统计信息:
ANALYZE [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ];
也可以通过配置参数 default_statistics_target
提升统计信息质量,或开启 autoanalyze
自动收集统计信息。
WHEN:什么时候收集统计信息
大规模数据变化或查询新增数据时需要收集统计信息。
WHO:谁来收集统计信息
建议在业务开发过程中,根据数据变化量和查询特征主动对相关表做 Analyze。
总结
本文简单介绍了统计信息的含义及其在性能调优中的重要作用,详细说明了统计信息的内容、存储位置以及如何有效收集统计信息的方法。
二. Explain 分布式计划解析
前言
适用版本:【8.1.1 及以上】
本文介绍如何详细解读计划以及计划的执行过程,从中发现可能存在的性能瓶颈点及其产生的原因。
执行算子介绍
常用的执行算子包括:
- 扫描算子:SeqScan, Indexscan, IndexOnlyScan, BitmapScan, SubqueryScan, 等。
- 连接算子:NestLoop, MergeJoin, HashJoin。
- 物化算子:Material, Sort, Group, Agg, WindowAgg, Unique, Hash。
- 控制类算子:ModifyTable, Append, MergeAppend, RecursiveUnion, BitmapAnd, BitmapOr, 等。
- Stream 算子:Gather Stream, Redistribute Stream, Broadcast Stream。
Explain 用法
使用 explain 命令可以查看优化器为每个查询生成的具体执行计划。
示例计划解读
通过具体示例说明不同类型的计划和算子的资源消耗、耗时等信息。
总结
在调优过程中,熟练使用 Explain 并能分析各部分数据结果是非常重要的。
三. 性能调优总体策略详解
前言
适用版本:【8.1.1 及以上】
性能调优是应用迁移或开发过程中的关键步骤,需要贯穿于整个项目实施过程中。
GaussDB(DWS)执行架构及说明
GaussDB(DWS)是典型的 share-nothing 架构,主要由 CN(Coordinator)和 DN(DataNode)组成。
整体调优思路
调优过程包括数据模型建模、集群部署、表结构设计、SQL 语句优化等多个方面。
性能瓶颈诊断
GaussDB(DWS)提供了丰富的计划信息显示工具 Explain 和动态执行信息分析工具 Top SQL,用于诊断性能瓶颈。
性能原因分析
性能原因分析需要对数据库的执行实现原理有基本了解。GaussDB(DWS)基于代价生成计划,统计信息是计划准确的前提。
调优项实施
调优项包括系统级调优和语句级调优。
四. 性能调优之坏味道 SQL 识别
前言
适用版本:【8.1.1 及以上】
本文介绍如何识别和优化坏味道 SQL。
简单实例
通过具体实例说明坏味道 SQL 的识别方法。
识别 SQL 坏味道之自诊断视图
通过自诊断视图识别 SQL 坏味道。
发现正在运行的 SQL 的坏味道
利用 Top SQL 工具发现正在运行的 SQL 的坏味道。
总结
本文介绍了如何识别和优化坏味道 SQL,以提高数据库性能。
五. 性能调优之好味道表定义
前言
适用版本:【8.1.1 及以上】
本文介绍如何定义表结构以优化性能。
存储方式设计
选择合适的存储方式以提高性能。
数据分布方式设计
设计合理的数据分布方式以优化性能。
分布列设计
合理设计分布列以提高查询性能。
表分区设计
通过表分区设计优化性能。
字段设计
合理设计字段以提高性能。
约束设计
通过设计约束提高数据完整性和查询性能。
总结
本文介绍了如何通过合理设计表结构来优化性能。
六. 性能调优之 SQL 改写
前言
适用版本:【8.1.1 及以上】
本文介绍如何通过改写 SQL 提高性能。
不支持下推导致的坏味道
识别并优化不支持下推的 SQL。
不支持重分布导致的坏味道
识别并优化不支持重分布的 SQL。
数据类型转换导致的坏味道
避免不必要的数据类型转换。
全局性操作导致的坏味道
优化全局性操作以提高性能。
NestLoop 类低效运算导致的坏味道
避免使用低效的 NestLoop 连接。
冗余操作导致的坏味道
去除冗余操作以优化性能。
总结
本文介绍了如何通过改写 SQL 提高性能。
七. 性能调优之路径干预
前言
适用版本:【8.1.1 及以上】
本文介绍如何通过路径干预提高性能。
cost 模型选择
选择合适的 cost 模型以优化性能。
Scan 方式的选择
选择合适的扫描方式以提高性能。
关联方式的选择
选择合适的关联方式以优化性能。
Stream 方式的选择
选择合适的 Stream 方式以优化性能。
总结
本文介绍了如何通过路径干预提高性能。
八. 性能调优之 Plan hint 运用
前言
适用版本:【8.1.1 及以上】
本文介绍如何使用 Plan hint 提高性能。
Plan hint 的引入
介绍 Plan hint 的概念和使用方法。
Plan hint 的应用
通过具体示例说明 Plan hint 的应用方法。
总结
本文介绍了如何通过使用 Plan hint 提高性能。
九. 性能调优之 GUC 参数调优
前言
适用版本:【8.1.1 及以上】
本文介绍如何通过调整 GUC 参数提高性能。
优化器 GUC 参数调优
调整优化器相关的 GUC 参数以提高性能。
数据库全局 GUC 参数
调整数据库全局 GUC 参数以优化性能。
总结
本文介绍了如何通过调整 GUC 参数提高性能。
以上是 GaussDB(DWS)性能调优手册中常见的调优方法总结。通过合理使用这些调优方法,可以有效提高 GaussDB(DWS)的性能,提升系统的整体运行效率。