• [性能调优] 【GaussDB产品】【更新功能】百万级数据与亿级别数据更新
    【功能模块】百万级数据与亿级别数据更新【操作步骤&问题现象】1、采用哪种方式更新更高效2、更新的时候索引会影响更新效率吗【日志信息】因业务需要,每天大概有上百万的数据需要更新,主表是上亿的表,当前采用merge into这种方式,随着表的数据量越来越多,更新越来越慢,有没有好的方式
  • [实践系列] DWS 分区表简介
    分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表 称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是 存储在分区上的。分区表和普通表相比具有以下优点:改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即 可。GaussDB A支持的分区表为范围分区表。范围分区表:将数据基于范围映射到每一个分区。这个范围是由创建分区表时指定的 分区键决定的。分区键经常采用日期,例如将销售数据按照月份进行分区。范围分区的两种创建方式:  
  • [实践系列] DWS 局部聚簇(Partial Cluster Key)选取规则
    局部聚簇(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 200 6.5.1 磁盘IO的压力测试
    针对GaussDB集群想进行一个关于磁盘IO达到100%的压力测试,官网上未找到相关的操作文档,想知道有什么简单的方法可以用来测试的吗?
  • [实践系列] DWS 开发过程中SQL编写建议
    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部署规划推荐规则
       部署DWS集群时,coordinator个数规划有如下两种方式:   按节点推荐:节点数小于30,3个cn;节点数小于60,5个cn;节点数60以上,7个cn;   按并发推荐:100并发以内3个CN;200并发以内5个CN;200并发以上7个CN;单cn支持30~40并发;
  • [其他] 【DWS】【安装】报DWS.6000,到86%时创建失败,执行到RdsInitInstanceTask
    【问题现象】      创建裸金属集群到86%时,失败,查询日志报BMS.0042【原因分析】     查询对应的创建实例的job是走到哪一步,发现已经到RdsInitInstanceTask,排除之前的规格问题,此时是数据库的安装,agent的安装但是报bms问题,应该是磁盘的问题    查看裸金属磁盘组,系统信息---》存储,具体如图所示,数据盘放在在Drive0               分析,BMS作为dws节点服务器,Drive0是安装系统,所以有问题【解决方案】     对raid组重新编排,如下,重新创建集群,创建成功
  • [性能调优] 【GaussDB产品】【执行计划】关于执行计划顺序问题
    请问 GaussDB的执行计划也是和oracle一样是(从上到下,由右向左)吗。图片上这个执行计划的顺序是什么呢是11还是25呢如果是11的话为什么时间是13667(他是第一个时间不应该是最小的吗)如果是25的话 是通过什么确定的呢谢谢
  • [实践系列] 【GaussDB(DWS)实践系列】低效SQL的排查和清理
     后台超长会话清理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';
  • [实践系列] 【GaussDB(DWS)实践系列】数据倾斜检查与修改方法
         数据倾斜排查 数据倾斜可通过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;                                
  • [迁移系列] ADB for mysql 【INSERT [IGNORE] INTO table_name】迁移 DWS 改写方法
    【摘要】 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【问题求助】>点我提问<【发帖互动】>点我发贴<
  • [环境搭建] GAUSSDB DWS 安装配置 cmserver gtm 安装问题
    【功能模块】【操作步骤&问题现象】1、通过配置规划工具选择cmserver gtm部署在管控节点上互为主备 安装成功后为什么会在数据节点上 manager发现第三步manager配置集群时 模板安装填写配置 检测CMserver GTM 会自动改变成数据节点ip  可能跟选择套餐服务部署有关系【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [运维管理] GaussDB A 8.0.0.5 部署安装LVS操作系统支持咨询
    【问题现象】GaussDB A 8.0.0.5当前针对集群节点是suse 12 sp3版本的操作系统直接安装LVS会报版本不支持。查看LVS支持的操作系统来看又说是支持该版本的。查看部署负载均衡章节说LVS部署就是将IPVS模块加到内核中,而在x86平台下,SUSE 11 sp1/sp2/sp3/sp4和SUSE 12 sp0/sp1/sp2/sp3内核中是不带ipvs模块的。针对现在的情况想知道:SUSE 12 SP3是否真的支持安装部署LVS。如果是支持的话,那就是说需要安装ipvs模块,那这个ipvs模块又该如何获取?
  • [性能调优] 列存表插入3000条数据,耗时30秒
    【功能模块】我们的ODS项目建立在gaussdb上,挡墙碰到一个性能问题:每半小时通过外表从hadoop同步数据到gaussdb 内表,再将内表的数据取最新变化数据插入到 列存的内部表,插入3000条数据,需要耗时30秒以上。这只是其中一张表的情况,大概同步了300张,差不多都是这个性能情况。如果改用行存表,插入会变快,但是会极大拖慢后续的跑批处理,而且因为是ODS项目,会频繁查询和统计贴源表。集群为:2个manager+6个数据节点。所以,请教各位老师的问题是:这个性能是否合理?有什么调优办法吗?【截图信息】
总条数:2746 到第 页
上滑加载中