典型SQL调优点-SQL自诊断
用户在执行查询或者执行INSERT/DELETE/UPDATE/CREATETABLEAS语句时,可能会遇到性能问题。这种情况下,通过查询gs_wlm_session_statistics,gs_wlm_session_history,gs_wlm_session_info视图的warning字段可
SQL调优指南-典型SQL调优点
典型SQL调优点SQL自诊断语句下推调优子查询调优统计信息调优算子级调优数据倾斜调优
审视和修改表定义-选择数据类型
高效数据类型,主要包括以下三方面:尽量使用执行效率比较高的数据类型一般来说整型数据运算(包括=、>、<、≧、≦、≠等常规的比较运算,以及groupby)的效率比字符串、浮点数要高。比如某客户场景中对列存表进行点查询,filter条件在一个numeric列上,执行时间为10+s;修改numeric为i
审视和修改表定义-使用分区表
分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点:改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。增强可用性:如果分区表的某个分区出
审视和修改表定义-使用局部聚簇
局部聚簇(PartialClusterKey)是列存下的一种技术。这种技术可以通过min/max稀疏索引较快的实现基表扫描的filter过滤。PartialClusterKey可以指定多列,但是一般不建议超过2列。PartialClusterKey的选取原则:受基表中的简单表达式约束。这种约束一般形
审视和修改表定义-选择分布列
Hash分布表的分布列选取至关重要,需要满足以下原则:列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。在满足第一条原则的情况下尽量不要选取存在常量filter的列。例如,表dwcjk相关的部分查询中出现dwcjk的列zqdh存在
审视和修改表定义-选择分布方式
复制表(Replication)方式将表中的全量数据在集群的每一个DN实例上保留一份。主要适用于记录集较小的表。这种存储方式的优点是每个DN上都有此表的全量数据,在join操作中可以避免数据重分布操作,从而减小网络开销,同时减少了plansegment(每个plansegment都会起对应的线程);
审视和修改表定义-选择存储模型
进行数据库设计时,表设计上的一些关键项将严重影响后续整库的查询性能。表设计对数据存储也有影响:好的表设计能够减少I/O操作及最小化内存使用,进而提升查询性能。表的存储模型选择是表定义的第一步。客户业务属性是表的存储模型的决定性因素,依据下面表格选择适合当前业务的存储模型。存储模型适用场景行存点查询(
审视和修改表定义-审视和修改表定义概述
在分布式框架下,数据分布在各个DN上。一个或者几个DN的数据存在一块物理存储设备上,好的表定义至少需要达到以下几个目标:表数据均匀分布在各个DN上,以防止单个DN对应的存储设备空间不足造成集群有效容量下降。选择合适分布列,避免数据分布倾斜可以实现该点。表Scan压力均匀分散在各个DN上,以避免单DN
SQL调优指南-审视和修改表定义
审视和修改表定义审视和修改表定义概述选择存储模型选择分布方式选择分布列使用局部聚簇使用分区表选择数据类型
SQL调优指南-更新统计信息
在数据库中,统计信息是规划器生成计划的源数据。没有收集统计信息或者统计信息陈旧往往会造成执行计划严重劣化,从而导致性能问题。背景信息ANALYZE语句可收集与数据库中表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC中。查询优化器会使用这些统计数据,以生成最有效的执行计划。建议在执行
SQL调优指南-调优流程
对慢SQL语句进行分析,通常包括以下步骤:操作步骤收集SQL中涉及到的所有表的统计信息。在数据库中,统计信息是规划器生成计划的源数据。没有收集统计信息或者统计信息陈旧往往会造成执行计划严重劣化,从而导致性能问题。从经验数据来看,10%左右性能问题是因为没有收集统计信息。具体请参见更新统计信息。通过查
SQL执行计划介绍-详解
如SQL执行计划概述节中所说,EXPLAIN会显示执行计划,但并不会实际执行SQL语句。EXPLAINANALYZE和EXPLAINPERFORMANCE两者都会实际执行SQL语句并返回执行信息。在这一节将详细解释执行计划及执行信息。执行计划以如下SQL语句为例:selectcjxh,count(1
SQL执行计划介绍-SQL执行计划
SQL执行计划是一个节点树,显示GaussDB200执行一条SQL语句时执行的详细步骤。每一个步骤为一个数据库运算符。使用EXPLAIN命令可以查看优化器为每个查询生成的具体执行计划。EXPLAIN给每个执行节点都输出一行,显示基本的节点类型和优化器为执行这个节点预计的开销值。如图1所示。图1SQL
SQL调优指南-Query执行流程
SQL引擎从接受SQL语句到执行SQL语句需要经历的步骤如图1和表1所示。其中,红色字体部分为DBA可以介入实施调优的环节。图1SQL引擎执行查询类SQL语句的流程表1SQL引擎执行查询类SQL语句的步骤说明步骤说明1、语法&词法解析按照约定的SQL语句规则,把输入的SQL语句从字符串转化为
性能调优-SQL调优指南
SQL调优指南SQL调优的唯一目的是“资源利用最大化”,即CPU、内存、磁盘IO、网络IO四种资源利用最大化。所有调优手段都是围绕资源使用开展的。所谓资源利用最大化是指SQL语句尽量高效,节省资源开销,以最小的代价实现最大的效益。比如做典型点查询的时候,可以用seqscan+filter(即读取每一
配置LLVM-LLVM使用建议
目前LLVM在数据库内核侧已默认打开,用户可结合上述的分析进行配置,总体建议如下:设置合理的work_mem,在允许的条件下尽可能设置较大的work_mem,如果出现大量下盘,则建议关闭LLVM动态编译优化(通过设置enable_codegen=off实现)。设置合理的codegen_cost_th
配置LLVM-其他因素对LLVM性能的影响
LLVM优化效果不仅依赖于数据库内部具体的实现,还与当前所选择的硬件环境等有关。表达式调用C-函数个数数据库内部针对表达式计算并未实现全codegen,即在整个表达式计算中部分表达式实现了codegen,部分直接调用原本的C代码。如果整个表达式计算中后者占据了主要部分,使用LLVM动态编译优化,可能
配置LLVM-LLVM适用场景与限制
适用场景支持LLVM的表达式查询语句中存在以下的表达式支持LLVM优化:Case…when…表达式In表达式Bool表达式(And/Or/Not)BooleanTest表达式(IS_NOT_KNOWN/IS_UNKNOWN/IS_TRUE/IS_NOT_TRUE/IS_FALSE/IS_NOT_FA
系统调优指南-配置LLVM
配置LLVMLLVM(LowLevelVirtualMachine)动态编译技术可以为每个查询生成定制化的机器码用于替换原本的通用函数。通过减少实际查询时冗余的条件逻辑判断、虚函数调用并提高数据局域性,从而达到提升查询整体性能的目的。由于LLVM需要消耗额外的时间预生成IR中间态表示并编译成机器码,