-
【功能模块】压缩功能。 【操作步骤&问题现象】1、 高斯DB在CREATE TABLE的时候,无法对每个字段设置不同的压缩算法及级别(只能表级,Greenplum可以字段级设置),是否高斯A会自动对不同类型的字段使用不同的最佳压缩算法 ? 2、 看过一些论文,列存库很大的一个优势,是延迟物化,很多场景下,压缩的数据是可以参与计算,最后才解压返回真实数据给用户,节省了I/O和内存资源,咨询高斯专家, 这个特性在高斯A是没有的,必须解压后参与计算 ,这个是否会作为后续的方向 ? 【截图信息】【日志信息】(可选,上传日志内容或者附件)
-
根据数据库的SQL执行机制以及大量的实践总结发现:通过一定的规则调整SQL语句, 在保证结果正确的基础上,能够提高SQL执行效率。1、 使用union all代替union union在合并两个集合时会执行去重操作,而union all则直接将两个结果集合并、 不执行去重。执行去重会消耗大量的时间,因此,在一些实际应用场景中,如果 通过业务逻辑已确认两个集合不存在重叠,可用union all替代union以便提升性 能。2、 join列增加非空过滤条件 若join列上的NULL值较多,则可以加上is not null过滤条件,以实现数据的提前过 滤,提高join效率。3、 not in转not exists not in语句需要使用nestloop anti join来实现,而not exists则可以通过hash anti join来实现。在join列不存在null值的情况下,not exists和not in等价。因此在确 保没有null值时,可以通过将not in转换为not exists,通过生成hash join来提升 查询效率。如下所示,如果t2.d2字段中没有null值(t2.d2字段在表定义中not null)查询可以修 改为 SELECT * FROM t1 WHERE NOT EXISTS (SELECT * FROM t2 WHERE t1.c1=t2.d2);产生的计划如下:● 选择hashagg。 查询中GROUP BY语句如果生成了groupagg+sort的plan性能会比较差,可以通过 加大work_mem的方法生成hashagg的plan,因为不用排序而提高性能。 ● 尝试将函数替换为case语句。 GaussDB A函数调用性能较低,如果出现过多的函数调用导致性能下降很多,可 以根据情况把可下推函数的函数改成CASE表达式。● 避免对索引使用函数或表达式运算。 对索引使用函数或表达式运算会停止使用索引转而执行全表扫描。● 尽量避免在where子句中使用!=或<>操作符、null值判断、or连接、参数隐式转 换。● 对复杂SQL语句进行拆分。 对于过于复杂并且不易通过以上方法调整性能的SQL可以考虑拆分的方法,把SQL 中某一部分拆分成独立的SQL并把执行结果存入临时表,拆分常见的场景包括但 不限于: – 作业中多个SQL有同样的子查询,并且子查询数据量较大。 – Plan cost计算不准,导致子查询hash bucket太小,比如实际数据1000W 行,hash bucket只有1000。 – 函数(如substr,to_number)导致大数据量子查询选择度计算不准。 – 多DN环境下对大表做broadcast的子查询。
-
【功能模块】百万级数据与亿级别数据更新【操作步骤&问题现象】1、采用哪种方式更新更高效2、更新的时候索引会影响更新效率吗【日志信息】因业务需要,每天大概有上百万的数据需要更新,主表是上亿的表,当前采用merge into这种方式,随着表的数据量越来越多,更新越来越慢,有没有好的方式
-
分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表 称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是 存储在分区上的。分区表和普通表相比具有以下优点:改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即 可。GaussDB A支持的分区表为范围分区表。范围分区表:将数据基于范围映射到每一个分区。这个范围是由创建分区表时指定的 分区键决定的。分区键经常采用日期,例如将销售数据按照月份进行分区。范围分区的两种创建方式:
-
局部聚簇(Partial Cluster Key)是列存表的一种技术。这种技术可以通过min/max稀 疏索引较快的实现基表扫描的filter过滤。Partial Cluster Key可以指定多列,但是一般 不建议超过2列。Partial Cluster Key的选取原则:受基表中的简单表达式约束。这种约束一般形如col op const,其中col为列名, op为操作符 =、>、>=、<=、<,const为常量值。尽量采用选择度比较高(过滤掉更多数据)的简单表达式中的列。尽量把选择度比较低的约束col放在Partial Cluster Key中的前面。尽量把枚举类型的列放在Partial Cluster Key中的前面。
-
针对GaussDB集群想进行一个关于磁盘IO达到100%的压力测试,官网上未找到相关的操作文档,想知道有什么简单的方法可以用来测试的吗?
-
DDL1、在GaussDB A中,建议DDL(建表、comments等)操作统一执行,在批 处理作业中尽量避免DDL操作。避免大量并发事务对性能的影响。2、在非日志表(unlogged table)使用完后,立即执行数据清理 (truncate)操作。因为在异常场景下,GaussDB A不保证非日志表(unlogged table)数据的安全性。3、临时表和非日志表的存储方式建议和基表相同。当基表为行存(列存) 表时,临时表和非日志表也推荐创建为行存(列存)表,可以避免行列混合关联 带来的高计算代价。4、索引字段的总长度不超过50字节。否则,索引大小会膨胀比较严重,带 来较大的存储开销,同时索引性能也会下降。5、不要使用DROP…CASCADE方式删除对象,除非已经明确对象间的依赖 关系,以免误删。数据加载和卸载1、在insert语句中显式给出插入的字段列表。例如: INSERT INTO task(name,id,comment) VALUES ('task1','100','第100个任务');2、在批量数据入库之后,或者数据增量达到一定阈值后,建议对表进行 analyze操作,防止统计信息不准确而导致的执行计划劣化。3、如果要清理表中的所有数据,建议使用truncate table方式,不要使用 delete table方式。delete table方式删除性能差,且不会释放那些已经删除了的 数据占用的磁盘空间。类型转换1、在需要数据类型转换(不同数据类型进行比较或转换)时,使用强制类 型转换,以防隐式类型转换结果与预期不符。2、在查询中,对常量要显式指定数据类型,不要试图依赖任何隐式的数据 类型转换。3、在ORACLE兼容模式下,在导入数据时,空字符串会自动转化为NULL。 如果需要保留空字符串需要新建兼容性为TD的数据库。查询操作1、除ETL程序外,应该尽量避免向客户端返回大量结果集的操作。如果结果 集过大,应考虑业务设计是否合理。2、使用事务方式执行DDL和DML操作。例如,truncate table、update table、delete table、drop table等操作,一旦执行提交就无法恢复。对于这类操 作,建议使用事务进行封装,必要时可以进行回滚。3、在查询编写时,建议明确列出查询涉及的所有字段,不建议使用 “SELECT *”这种写法。一方面基于性能考虑,尽量减少查询输出列;另一方面 避免增删字段对前端业务兼容性的影响。4、在访问表对象时带上schema前,可以避免因schema切换导致访问到 非预期的表。5、超过3张表或视图进行关联(特别是full join)时,执行代价难以估算。 建议使用WITH TABLE AS语句创建中间临时表的方式增加SQL语句的可读性。6、尽量避免使用笛卡尔积和Full join。这些操作会造成结果集的急剧膨胀, 同时其执行性能也很低。7、NULL值的比较只能使用IS NULL或者IS NOT NULL的方式判断,其他任 何形式的逻辑判断都返回NULL。例如:NULL<>NULL、NULL=NULL和NULL<>1 返回结果都是NULL,而不是期望的布尔值。8、需要统计表中所有记录数时,不要使用count(col)来替代count(*)。 count(*)会统计NULL值(真实行数),而count(col)不会统计。9、在执行count(col)时,将“值为NULL”的记录行计数为0。在执行 sum(col)时,当所有记录都为NULL时,终将返回NULL;当不全为NULL时, “值为NULL”的记录行将被计数为0。10、count(多个字段)时,多个字段名必须用圆括号括起来。例如, count( (col1,col2,col3) )。注意:通过多字段统计行数时,即使所选字段都为 NULL,该行也被计数,效果与count(*)一致。11、count(distinct col)用来计算该列不重复的非NULL的数量,NULL将不被 计数。12、count(distinct (col1,col2,...))用来统计多列的唯一值数量,当所有统计字 段都为NULL时,也会被计数,同时这些记录被认为是相同的。13、尽量避免标量子查询语句的出现。标量子查询是出现在select语句输出列 表中的子查询,在下面例子中,下划线部分即为一个标量子查询语句:SELECT id, (SELECT COUNT(*) FROM films f WHERE f.did = s.id) FROM staffs_p1 s;标量子查询往往会导致查询性能急剧劣化,在应用开发过程中,应当根据业务逻 辑,对标量子查询进行等价转换,将其写为表关联。14、在where子句中,应当对过滤条件进行排序,把选择读较小(筛选出的 记录数较少)的条件排在前面。15、where子句中的过滤条件,尽量符合单边规则。即把字段名放在比较条 件的一边,优化器在某些场景下会自动进行剪枝优化。形如col op expression, 其中col为表的一个列,op为‘=’、‘>’的等比较操作符,expression为不含列 名的表达式。例如, SELECT id, from_image_id, from_person_id, from_video_id FROM face_data WHERE current_timestamp(6) - time < '1 days'::interval;改写为: SELECT id, from_image_id, from_person_id, from_video_id FROM face_data where time > current_timestamp(6) - '1 days'::interval;16、尽量避免不必要的排序操作。排序需要耗费大量的内存及CPU,如果业 务逻辑许可,可以组合使用order by和limit,减小资源开销。GaussDB A默认按 照ASC & NULL LAST进行排序。17、使用ORDER BY子句进行排序时,显式指定排序方式(ASC/DESC), NULL的排序方式(NULL FIRST/NULL LAST)。18、不要单独依赖limit子句返回特定顺序的结果集。如果部分特定结果集, 可以将ORDER BY子句与Limit子句组合使用,必要时也可以使用offset跳过特定结 果。19、在保障业务逻辑准确的情况下,建议尽量使用UNION ALL来代替 UNION。20、如果过滤条件只有OR表达式,可以将OR表达式转化为UNION ALL以提 升性能。使用OR的SQL语句经常无法优化,导致执行速度慢。例如,将下面语句 SELECT * FROM scdc.pub_menu WHERE (cdp= 300 AND inline=301) OR (cdp= 301 AND inline=302) OR (cdp= 302 AND inline=301);转换为: SELECT * FROM scdc.pub_menu WHERE (cdp= 300 AND inline=301) union all SELECT * FROM scdc.pub_menu WHERE (cdp= 301 AND inline=302) union all SELECT * FROM tablename WHERE (cdp= 302 AND inline=301)21、当in(val1, val2, val3…)表达式中字段较多时,建议使用in (values (va11), (val2),(val3)…)语句进行替换。优化器会自动把in约束转换为非关联子查 询,从而提升查询性能。22、在关联字段不存在NULL值的情况下,使用(not) exist代替(not) in。例 如,在下面查询语句中,当T1.C1列不存在NULL值时,可以先为T1.C1字段添加 NOT NULL约束,再进行如下改写。SELECT * FROM T1 WHERE T1.C1 NOT IN (SELECT T2.C2 FROM T2);可以改写为: SELECT * FROM T1 WHERE NOT EXISTS (SELECT * FROM T1,T2 WHERE T1.C1=T2.C2);23、通过游标进行翻页查询,而不是使用LIMIT OFFSET语法,避免多次执行 带来的资源开销。游标必须在事务中使用,执行完后务必关闭游标并提交事务。
-
部署DWS集群时,coordinator个数规划有如下两种方式: 按节点推荐:节点数小于30,3个cn;节点数小于60,5个cn;节点数60以上,7个cn; 按并发推荐:100并发以内3个CN;200并发以内5个CN;200并发以上7个CN;单cn支持30~40并发;
-
【问题现象】 创建裸金属集群到86%时,失败,查询日志报BMS.0042【原因分析】 查询对应的创建实例的job是走到哪一步,发现已经到RdsInitInstanceTask,排除之前的规格问题,此时是数据库的安装,agent的安装但是报bms问题,应该是磁盘的问题 查看裸金属磁盘组,系统信息---》存储,具体如图所示,数据盘放在在Drive0 分析,BMS作为dws节点服务器,Drive0是安装系统,所以有问题【解决方案】 对raid组重新编排,如下,重新创建集群,创建成功
-
请问 GaussDB的执行计划也是和oracle一样是(从上到下,由右向左)吗。图片上这个执行计划的顺序是什么呢是11还是25呢如果是11的话为什么时间是13667(他是第一个时间不应该是最小的吗)如果是25的话 是通过什么确定的呢谢谢
-
后台超长会话清理GaussDB(DWS)即席访问或开发测试环境,经常遇到低效SQL长时间执行,占用大量系统资源导致系统运行效率变低。因此在排查系统资源占用过高,性能不足的场景时经常需要检查长时间未执行完的低效SQL予以清理,以释放系统资源提高性能。查询及清理语句-- 查询持续运行时间超过5小时的会话SELECT * FROM pg_stat_activity WHERE useName <> 'Ruby' and state <> 'idle' and current_timestamp - query_start > interval '5 hours';--会话清理SELECT PG_TERMINATE_BACKEND(pid) FROM pg_stat_activity WHERE useName <> 'Ruby' and state <> 'idle' and current_timestamp - query_start > interval '1 days';
-
数据倾斜排查 数据倾斜可通过PGXC_GET_TABLE_SKEWNESS系统表检查:SELECT * FROM PGXC_GET_TABLE_SKEWNESS ORDER BY SKEWRATIO DESC; 参考:倾斜率skewratio * DN 数 >0.1 可以判定为倾斜,大小超过5G的表需要处理。实际表数量较多,可参考skewratio> 0.1且大小超过1G,按照倾斜率倒序排列后再处理。 PGXC_GET_TABLE_SKEWNESS视图字段信息如下:名称类型描述schemanamename表所在的模式名。tablenamename表名。totalsizenumeric表的总大小,单位Byte。avgsizenumeric(1000,0)表大小平均值(totalsize/DN个数,该值为平均分布的理想情况下,表在各DN占用空间大小)。maxrationumeric(4,3)单DN表大小最大值占比(表在各DN占用空间的最大值/totalsize)。minrationumeric(4,3)单DN表大小最小值占比(表在各DN占用空间的最小值/totalsize)。skewsizebigint表分布倾斜值(单DN表大小最大值 - 单DN表大小最小值)。skewrationumeric(4,3)表分布倾斜率(skewsize/totalsize)。skewstddevnumeric(1000,0)表分布标准方差(在表大小一定的情况下,该值越大表明表的整体分布情况越倾斜)。hash列选取遵循:数据重复度低(如主键)、常用于group 、join的字段,不会被update的字段(分布列不支持update)。数据倾斜解决范例(更换hash 列) 修改范例 t1 表比如已经创建 需要修改分布列。 t1 表表结构 CREATE TABLE t1 ( c1 int, c2 int )DISTRIBUTE BY HASH(c1); 1. 创建新表,分布列使用c2 CREATE TABLE t1_new ( c1 int, c2 int )DISTRIBUTE BY HASH(c2); 上面可以参考这样写,会更简单 create table t1_new distribute by hash(c2) (like t1 including indexes); 2. 对原表进行 rename,防止数据继续修改。 alter table t1 rename to t1_old; 3. 数据放入新表中 insert into t1_new select * from t1_old; 4. 将新表名称修改为实际表名 alter table t1_new rename to t1; 5. 没问题后删除备份表 drop table t1_old;
-
【摘要】 INSERT INTOINSERT INTO用于向表中插入数据,遇到主键重复时会自动忽略当前写入数据,不做更新,作用等同于INSERT IGNORE INTO。语法 INSERT [IGNORE] INTO table_name [( column_name [, …] )] [VALUES] [(value_list[, …])] [query];参数IGNORE:可选参数,若系统中已...详见博客:https://bbs.huaweicloud.com/blogs/221542
-
活动主题:DWS王者挑战赛,携手开启征战之路!活动介绍: 为了让开发者朋友们能轻松学好用好数仓GaussDB(DWS),我们推出了数仓GaussDB(DWS)视频培训系列课程打卡活动,此为第二个系列课程,本系列共14节课程,从产品初级课程至进阶课程,更有高级工程师职业认证,全方位带您深入掌握数仓GaussDB(DWS)架构和技能。本次课程帮大家制定了打卡计划,参与数仓高级工程师必学课程,收获满满数仓技能,更有华为云定制机械键盘、双肩包、无线鼠标、旅行本套装等多重好礼等你来拿,活动即刻开启,凡在本主题帖中留言、参与打卡或者论坛互动的用户均可参与抽奖哦~互动方式:(盖楼、留言、转发、打卡、发帖、认证等多种互动方式)点我前往互动主题帖>>(互动一定要点击链接前往主题帖,本帖回复无效!!!)课程表:培训课程见主题帖中,打卡请前往>>活动时间:2月26日——4月30日评奖方式:互动奖*5(以上互动方式任选一种或多种参与)奖 品:华为云定制双肩包评奖规则:参与华为云社区互动即有机会抽取。 粉丝福利*2(通过转发朋友圈参与)奖 品:华为云定制旅行本(套装)评奖规则:转发此贴至微信朋友圈并在公众号后台回复朋友圈转发截图。钻石奖*3(完成所有课程的打卡)奖 品:华为云定制无线鼠标评奖规则:完成所有课程打卡的用户机会抽取;心得需是从当日课程中提炼出真实的学习感受。 王者奖*5(完成所有课程打卡且完成HCIP认证的用户有机会抽取)奖 品:华为云定制机械键盘评奖规则:完成所有课程打卡的用户完成HCIP认证有机会抽取;心得需是从当日课程中提炼出真实的学习感受。注意事项:· 使用他人截图、打卡心得经发现视为作弊;· 一日打卡/补签两节课视为作弊哦,大家一定要跟上进度,每日完成打卡;· 每个ID只能参与一次评选,同一ID不可重复中奖;· 本次回帖内容需满足华为云论坛发帖规范 https://bbs.huaweicloud.com/forum/thread-23077-1-1.html;· 盖楼用户未通过公众号后台反馈盖楼截图,则奖励顺延至下一有效楼层。· 本活动最终解释权归华为云数仓GaussDB(DWS)所有。扫码关注我哦,我在这里↓↓↓快来参与挑战,开启你的王者之路吧!数仓GaussDB(DWS)培训打卡系列1>>>:https://bbs.huaweicloud.com/forum/thread-104049-1-1.html【问题求助】>点我提问<【发帖互动】>点我发贴<
-
【功能模块】【操作步骤&问题现象】1、通过配置规划工具选择cmserver gtm部署在管控节点上互为主备 安装成功后为什么会在数据节点上 manager发现第三步manager配置集群时 模板安装填写配置 检测CMserver GTM 会自动改变成数据节点ip 可能跟选择套餐服务部署有关系【截图信息】【日志信息】(可选,上传日志内容或者附件)
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签