• [其他] 快照一直在创建中
    快照一直在创建中 版本:dws811.5排查步骤:1.登录rms库查看rds_cluster_backup  表 select * from rds_cluster_backup  where name='快照名字'  and clusterid='集群id'\G;搜索结果是快照状态还在执行中2.从步骤1中的查询结果中获取backupjobid    select * from taskmgr_task where job_id = '2c9081c082197ed101821e5d5e690097'\G;查看快照执行到哪一步了  是否有失败查询结果快照任务正常3.登录实例节点搜索 roach进程  看快照进程是否再跑若快照进程在跑;则快照仍在创建中;不想继续创建则可以强制停止备份进程。若快照进程不在;roach进程已经跑完了但是快照一直还在创建中的情况;这个应该是中间pod重启或者升级,导致job刚执行完上一个task,没有拉起来。进度卡住了  规避方法:job直接改成失败,快照也改成失败。taskmgr_job,rds_cluster_backup,清空rds_action  
  • [问题求助] GaussDB DWS现在是否支持udaf
    这两天做实验,想通过udaf方式来进行一些验证,发现DWS不支持udaf,是配置原因还是说本就没有实现呢
  • [其他] ECF配置RegionLB工步失败
    【HCS 810】ECF配置RegionLB失败具体报错日志:解决方法:fcd后台节点尝试ssh@ulb regionlbip,排查ulb账号密码是否过期或错误,密码过期将密码延期,延期后页面重试工步
  • [其他] DWS console面集群状态显示异常排查
    集群、节点状态上报流程:agent  -> monitor -> controller,DWS集群状态是由CmServer节点上报,每个节点都会上报本节点状态。1、登录实例,检查业务进程是否异常( cm_ctl query -Cvd),如果有异常,请优先处理业务异常;2、查看/home/Ruby/log/haagent目录下最新日志,如果包含"send msg success, msg type:8"日志,说明check到的状态发送成功,如果没有,则检查haagent进程是否有问题。可尝试重启haagent,root用户下用service haagent restart3、查看/home/Ruby/log/cloud-dws-checkstatus.log日志,是否报错4、登录monitor数据库,执行select instance_name,monitored,monitor_switch,status from instance_monitor where instance_name like            '%instance_name%';查询实例的状态信息,如果monitored,monitor_switch都是0,则说明该实例未被monitor监控,需要检查该节点是否处于关机或者冻结状态。5、登录monitor数据库,SELECT inst.id,inst.instance_orig_id,inst.cluster_id,inst.instance_name,inst.monitored,inst.monitor_switch,inst.STATUS,inst.manage_ip,inst.event_update_at,inst.is_cluster_status_reportor,inst.instance_type,inst.monitor_id,mon.ipFROM instance_monitor inst, monitor_info mon WHERE instance_name LIKE "%auto-eip1m--vDE-Qib7lel1STEhHEndlN8EMxbm%" AND inst.monitor_id = mon.id根据查出来的id去dbsminotor容器过滤查看 haagent-ecf.log6、dbsmonitor容器若无明显报错,打印疑似连接问题,可尝试重启容器
  • [其他] 增量快照失败:agent日志报错:NoSuchKey
    一.增量快照失败版本:hcs810 管控面版本812排查步骤:1. 前台获取集群快照idid2. 根据快照id获取快照的jobidselect * from rds_cluster_backup where clustered=’xxxxxx’;3. 进dwscontroller容器ossres-dws.log根据jobId查询过滤日志cat ossres-dws.log | grep jobid | grep ERROR获取报错信息看是因为什么原因失败的4. 如果grep ERROR报错中出现create backup failed instanceID:xxxxxxxxxx登录数据库获取实例select id,name from rds_instance where id='xxx';登录实例sh connectTool.sh -uecf -drms -h {8.96.87.29} -p7306 -n {"dws_dli-dws-cn-cn-3-1"} -t Standalone登录此实列切换Ruby用户/home/Ruby/log / cloud-dws-deploy.log5.查看日志发现NoSuchKey可能是OBS里文件不存在6.登录obs桶查看快照文件发现没有7.31号的快照;7.31号是全量快照,所以周一周二的增量快照无法创建成功;解决方法:重新创建全量快照
  • 创建集群问题处理思路
    1 关闭回滚参数参数修改方法:登录CDK,找到变更管理-服务升级,搜索dws  从实例名称中找到需要配置的DWS实例, 选中后点击下一步在打开的页面中找到搜索按钮,输入needDeleteCluster后点搜索,找到参数后选择编辑,将参数值改为false,后点下一步。在下一步的页面中点升级完成参数修改。更改参数后需delete之前controller的pod再重新get pod,如果Console有提示系统错误,请在后台将tomcat重启。dws 需要查询service om页面获得。kubectl get pod -n dwskubectl delete pod dwscontroller-7b6c69476-tchn9 -n dwskubectl get pod -n dws等待READY状态变为1/1。如下图实例:关闭回滚参数之后如果需要登录实例节点需要更改connectTool.sh脚本登录dwscontroller容器 到opsTool目录下 kubectl get pod -n dws-maintain --查有两个容器,是负载集群,都可以登录 dws-maintain 是空间名称不同版本也可能是dws kubectl exec -ti {pod name} bash -n dws-maintain -- pod为查询的容器名cd opsToolvi connectTool.sh找到如图第61行SQL="select manageIp,mngPK,mngPPh,rtPd,adminPd,host from rds_instance where status!=400 and name='"$INSTANCE_NAME"' and type='"$TYPE"'"将其注释掉在添加一行新sql:SQL="select manageIp,mngPK,mngPPh,rtPd,adminPd,host from rds_instance where name='"$INSTANCE_NAME"' and clusterid='集群id' "2 登录数据库查找jobid 登录master节点切换root用户进入dwsmaintaintool容器从容器进入数据库后台:mysql -u{db.username} -p{password} -D{dbname} -h{ip} -P{port}具体参数获取请参考dws登录指南 :登录进去rms数据库后查找在哪一步创建失败并获取jobid:select task.job_id,task.task_name,task.begin_time,task.listener_num,task.retry_num,task.execution_statusfrom rds_instance ins left jointaskmgr_task taskon ins.jobId=task.job_idleft JOINtaskmgr_job job ontask.job_id=job.job_idwhere ins.`name` like '%集群名称%'And task.execution_status='FAIL'order by task.job_id,task.begin_time;找到失败时间最早的jobid后:3 根据jobid查找报错去dwscontroller容器 查看ossres.dws.log,过滤关于jobid的报错信息,根据报错信息进一步了解是因为什么原因导致这一步失败。另外也可以登录实例节点去查看部署日志/home/Ruby/log / cloud-dws-deploy.log 如果日志为空,则是因为日志归档了/home/Ruby/archivelog解压对应时间的日志文件,进入解压文件查看cloud-dws-deploy.log 查找报错信息。
  • [其他] 快照问题排查
     快照排查思路快照残留清理问题需要部署快照清理脚本;来清理过期快照:部署清理脚本联系华为工程师1.1 登录dws后台数据库rms,获取失败快照的jobidSelect job_id,begin_time,job_def_name from taskmgr_job where job_def_name like 'ºckup%' order by Begin_time desc limit 5;根据失败快照的创建时间来看1.2 进dwscontroller容器ossres-dws.log根据jobId查询过滤日志cat ossres-dws.log | grep jobid | grep ERROR获取报错信息看是因为什么原因失败的  1.3 登录实例查看原因如果grep ERROR报错中出现create  backup  failed instanceID:xxxxxxxxxx登录数据库获取实例select id,name from rds_instance where id='xxx';登录实例sh connectTool.sh -uecf -drms -h {8.96.87.29} -p7306 -n {"dws_dli-dws-cn-cn-3-1"} -t Standalone登录此实列切换Ruby用户/home/Ruby/log / cloud-dws-deploy.log 如果日志为空,则是因为日志归档了/home/Ruby/archivelog解压对应时间的日志文件,进入解压文件查看cloud-dws-deploy.log 查找报错信息到DWS/manger/backup目录下查看快照日志线下集群的在$GAUSSLOG下看rouch-agent 日志常见问题:Agent日志中出现Error:121 InsufficientStorageSpace    报错则是obs存储空间不足 解决措施1Agent日志中出现Error: SignatureDocsNotMatch        obs签名不匹配  解决措施2解决措施:1.清理过期残留备份https://bbs.huaweicloud.com/forum/thread-121998-1-1.html2.找obs的人检查核对快照不可用案例:https://bbs.huaweicloud.com/forum/thread-184994-1-1.html
  • [生态空间] dws数据通过foreign table写入hdfs有问题
    如图,decimal类型的数据写入hdfs后,通过hive external表读取,两边类型一致(均为decimal)时,hive读取的值为NULL,当修改hive external数据类型为String时,读取到的值为7014XXXX,烦请专家予以解答。
  • [其他] DWS变更重大特性适用版本说明
     重大特性特性现状8.0.08.1.08.1.18.1.38.2.0变更分段扩容分三段:添加主机,扩容,数据重分布。每个节点失败可重入。无云形态差异。不支持不支持支持(8.1.1.200及以后)支持(所有版本)支持(所有版本)在线升级升级时长15分钟内,升级过程中在线,有10s内的业务闪断。无云形态差异不支持不支持支持(所有版本)(作为升级源版本)支持(所有版本)(作为升级源版本,目标版本)支持(所有版本)(作为升级源版本,目标版本)在线扩容完全在线。正在数据重分布的表禁止DDL操作。无云形态差异不支持不支持支持(所有版本)支持(所有版本)支持(所有版本)热补丁升级耗时10分钟以内,升级过程中业务完全在线,无闪断无云形态差异不支持不支持不支持支持(所有版本)支持(所有版本)CN在线加回console页面支持增加CN,一次只能增加一个CN。增量build需要锁集群,阻塞DDL业务,10分钟内。无云形态差异不支持不支持支持(所有版本)支持(所有版本)支持(所有版本)在线缩容完全在线。正在数据重分布的表禁止DDL操作。无云形态差异不支持不支持支持(所有版本)支持(所有版本)支持(所有版本)
  • [维护宝典] GaussDB(DWS) SQL语句性能优化案例
    问题现象多个表进行LEFT JOIN的查询,执行时间超过2小时,因超时被查杀,执行失败。可能原因SQL语句关联的表多,数据量大时执行速度慢。排查过程分析SQL语句,查看LEFT JOIN的表和条件,以下列出两个相同的表:经过对比发现T6和T62表为同一张表,并且关联条件完全相同,因此此处可以去掉一张表,不改变语句的执行结果。解决方法去掉T62表后,查询可以在2个小时内执行完成,问题得到解决。查询计划如下图所示:
  • [实践系列] 实际测试DWS中表的默认分布方式
    1. DWS中表的默认分布方式在DWS中表的默认分布方式由GUC参数:default_distribution_mode 来确定。2. 参数default_distribution_mode说明2.1 参数说明:用于设置表的默认分布方式。该参数仅8.1.2及以上版本支持。2.2 取值范围:roundrobin、hash2.2.1 roundrobin,创建表不指定分布方式时,按如下规则选取默认分布方式(1)若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。(2)若建表时不包含主键/唯一约束,则选取roundrobin分布。2.2.2 hash,创建表不指定分布方式时,按如下规则选取默认分布方式(1)若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。(2)若建表时不包含主键/唯一约束,但存在数据类型支持做分布列的列,则选取HASH分布,分布列为第一个数据类型支持做分布列的列。(3)若建表时不包含主键/唯一约束,也不存在数据类型支持做分布列的列,选取roundrobin分布3 特别说明新建8.1.2集群版本默认值为roundrobin,升级到8.1.2集群版本场景该参数的默认值为HASH。4. 实际测试select version(); -- 查看DWS集群版本PostgreSQL 9.2.4 (GaussDB 8.1.3 build 5b7fed87) compiled at 2022-08-09 19:22:07 commit 3629 last mr 5138 releaseshow default_distribution_mode; -- 查看默认值roundrobin4.1 测试roundrobin(1)不指定分布键,没有主键和唯一约束,选取ROUNDROBIN分布方式-- 不指定分布方式建表create table test_defid( id int, name varchar(10))with(orientation=column);-- 查看表结构select pg_get_tabledef('test_defid');-- 表结构语句CREATE TABLE test_defid ( id integer, name character varying(10))WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)DISTRIBUTE BY ROUNDROBINTO GROUP group_version1;(2)不指定分布键,有主键,则选取HASH分布,分布列为主键-- 不指定分布方式建表CREATE TABLE test_defid_par(id int,name varchar(10),PRIMARY key(id))with(orientation=column);-- 查看表结构select pg_get_tabledef('test_defid_par');-- 表结构如下CREATE TABLE test_defid_par ( id integer NOT NULL, name character varying(10))WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)DISTRIBUTE BY HASH(id)TO GROUP group_version1;ALTER TABLE test_defid_par ADD CONSTRAINT test_defid_par_pkey PRIMARY KEY (id);(3)不指定分布键,有唯一约束,则选取HASH分布,分布列为唯一约束的列-- 不指定分布方式建表CREATE TABLE test_defid_uni(u_id int,name varchar(10),unique(u_id))with(orientation=column);-- 查看表结构select pg_get_tabledef('test_defid_uni');-- 表结构如下CREATE TABLE test_defid_uni ( u_id integer, name character varying(10))WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)DISTRIBUTE BY HASH(u_id)TO GROUP group_version1;ALTER TABLE test_defid_uni ADD CONSTRAINT test_defid_uni_u_id_key UNIQUE (u_id);(4)同时指定主键和唯一约束,建表时必须手动指定分布键,且主键和唯一索引必须包含分布列,即必须同时是主键和唯一索引,还必须同时是分布键-- 指定分布键建表CREATE TABLE test_defid_priuni(u_id int,k_id int,h_id int,name varchar(10),unique(u_id,k_id),PRIMARY key(u_id,k_id))with(orientation=column)distribute by hash(u_id,k_id);4.2 测试HASH-- 设置取值为hashset default_distribution_mode = hash;-- 查看设置值show default_distribution_mode;hash(1)不指定分布键,有主键,则选取HASH分布,分布列为主键-- 不指定分布方式建表CREATE TABLE test_hdefid_pri(id int,name varchar(10),PRIMARY key(id))with(orientation=column);-- 查看表结构select pg_get_tabledef('test_hdefid_pri');-- 表结构如下SET search_path = public;CREATE TABLE test_hdefid_pri ( id integer NOT NULL, name character varying(10))WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)DISTRIBUTE BY HASH(id)TO GROUP group_version1;ALTER TABLE test_hdefid_pri ADD CONSTRAINT test_hdefid_pri_pkey PRIMARY KEY (id);(2)不指定分布键,有唯一约束,则选取HASH分布,分布列为唯一约束的列-- 不指定分布方式建表CREATE TABLE test_hdefid_uni(id int,name varchar(10),UNIQUE(id))with(orientation=column);-- 查看表结构select pg_get_tabledef('test_hdefid_uni');-- 表结构如下CREATE TABLE test_hdefid_uni ( id integer, name character varying(10))WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)DISTRIBUTE BY HASH(id)TO GROUP group_version1;ALTER TABLE test_hdefid_uni ADD CONSTRAINT test_hdefid_uni_id_key UNIQUE (id);(3)建表时不包含主键和分布键,但存在数据类型支持作为分布列的列,选取HASH分布,分布列为第一个数据类型支持做分布列的列。-- 不指定分布方式建表CREATE TABLE test_hdefid_type(t_id int,name varchar(10))with(orientation=column);-- 查看表结构select pg_get_tabledef('test_hdefid_type');-- 表结构如下SET search_path = public;CREATE TABLE test_hdefid_type ( t_id integer, name character varying(10))WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)DISTRIBUTE BY HASH(t_id)TO GROUP group_version1;(4)建表时不包含主键/唯一约束,也不存在数据类型支持做分布列的列,选取roundrobin分布-- 不指定分布方式建表CREATE TABLE test_hdefid_ntype(t_id json,name json)with(orientation=row);-- 查看表结构select pg_get_tabledef('test_hdefid_ntype');-- 表结构如下SET search_path = public;CREATE TABLE test_hdefid_ntype ( t_id json, name json)WITH (orientation=row, compression=no)DISTRIBUTE BY ROUNDROBINTO GROUP group_version1;
  • [维护宝典] 后台资源负载配置方法
     (1)build环境配置资源池,隔离HA和CL任务。 gs_guc reload -Z coordinator -Z datanode -N all -I all -c "enable_control_group=on" gs_guc set -Z coordinator -Z datanode -N all -I all -c "use_workload_manager=on" gs_guc set -Z coordinator -Z datanode -N all -I all -c "enable_backend_control=on" gs_guc set -Z coordinator -Z datanode -N all -I all -c "enable_vacuum_control=on"     cm_ctl stop && cm_ctl start  (2)创建class组 gs_ssh -c "gs_cgroup -c -S class_edw -s 60"       gs_ssh -c "gs_cgroup -c -S class_edw_lcsm -s 30"         (3)创建workload组 gs_ssh -c "gs_cgroup -c -S class_edw -G grp1 -g 99"    gs_ssh -c "gs_cgroup -c -S class_edw_lcsm -G grp2 -g 99"       (4)创建资源池 CREATE RESOURCE POOL resource_pool_class_edw WITH (control_group="class_edw:grp1"); CREATE RESOURCE POOL resource_pool_edw_lcsm WITH (control_group="class_edw_lcsm:grp2");  (5)创建用户绑定资源池 CREATE USER  mppedw  RESOURCE POOL 'resource_pool_ha_cl' PASSWORD 'Gauss_234'; CREATE USER  mppdas  RESOURCE POOL 'resource_pool_ha_test' PASSWORD 'Gauss_234'; (6)修改用户绑定资源池 ALTER USER edw  WITH RESOURCE POOL 'resource_pool_class_edw'; ALTER USER edw_lcsm WITH RESOURCE POOL 'resource_pool_edw_lcsm';  SELECT * FROM GS_WLM_USER_RESOURCE_INFO('ha_test'); SELECT * FROM gs_session_cpu_statistics;  (6)回退 将用户资源池设置回默认资源池 ALTER USER mppedw  WITH RESOURCE POOL 'default_pool'; ALTER USER mppdas  WITH RESOURCE POOL 'default_pool'; 删除原资源池 DROP RESOURCE POOL resource_pool_ha_test;  DROP RESOURCE POOL resource_pool_ha_cl; 删除class组 source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile gs_ssh -c "gs_cgroup -d -S class_edw   " gs_ssh -c "gs_cgroup -d -S resource_pool_ha_test "   查看资源池配置是否被集群加载的方法:因为配置了资源池后需要重启集群,所以用这个方法确认是否配置后重启了集群 select * from gs_wlm_cgroup_config;         
  • [其他] generate_series导致的执行不下推问题优化方案
    部分业务场景下存在记录或者维度扩展,这时候会使用函数generate_series生成序列号,作为维度扩展编号,但是在DWS里面类似generate_series这种多结果集函数会导致部分执行下推,导致性能劣化。本文主要是针对这种场景提出改写的优化思路预置条件CREATE TABLE tmf(proj_num text, du_id bigint, du_code bigint, du_name text, item_cnt int);CREATE TABLE ext(del_flag char, extension_value text);原始SQLSELECT tmf.proj_num, tmf.du_id, tmf.du_code, tmf.du_name, 'Scenario' AS extension_nameFROM tmf,(SELECT * FROM generate_series(1,( SELECT max(length(ext.extension_value || ',') - nvl(length(replace(ext.extension_value, ',','')), 0)) max_len FROM ext WHERE ext.del_flag = 'N')) AS LVL) seq WHERE seq.lvl <= tmf.item_cnt;优化后SQLSELECT tmf.proj_num, tmf.du_id, tmf.du_code, tmf.du_name, 'Scenario' AS extension_nameFROM tmf,( WITH RECURSIVE tmp(lvl) AS( SELECT max(length(ext.extension_value || ',') - nvl(length(replace(ext.extension_value, ',','')), 0)) max_len FROM ext WHERE ext.del_flag = 'N' UNION ALL SELECT lvl - 1 FROM tmp WHERE lvl - 1 > 0 ) SELECT * FROM tmp) seq WHERE seq.lvl <= tmf.item_cnt;优化前后SQL语句差异执行计划差异
  • [开发应用] 存储过程设置GUC参数
    DWS 8.1.1请问下能否在存储过程中通过set 设置guc参数,例如declarebeginset enable_nestloop=off;insert into xxx select xxx;end
  • [维护宝典] 如何根据脏页率来判断系统表需要vacuum full的方法
    1、对于单表脏页率,使用如下方法查询: select c.oid AS relid, n.nspname AS schemaname, c.relname, pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins,  pg_stat_get_tuples_updated(c.oid) AS n_tup_upd,  pg_stat_get_tuples_deleted(c.oid) AS n_tup_del, pg_stat_get_live_tuples(c.oid) AS n_live_tup,  pg_stat_get_dead_tuples(c.oid) AS n_dead_tup, cast( (n_dead_tup / (n_live_tup + n_dead_tup + 0.0001) * 100) AS numeric(5,2)) AS dirty_page_rate  from pg_class c  LEFT JOIN pg_namespace n ON n.oid = c.relnamespace where c.oid = (select 'public.t4'::regclass::oid); /* public为模式名,t4为表名 */ 2、查询指定系统中同时满足大于脏页率阈值和表数据阈值条件的表信息,方法如下: select * from pgxc_get_stat_dirty_tables(30,100000); 3、查询指定系统中同时满足大于脏页率阈值、表数据阈值、模式名条件的表信息,如下: select * from pgxc_get_stat_dirty_tables(30,100000,’mppedw’); /* mppedw为模式名 */ 说明:pgxc_get_stat_dirty_tables为630版本新增函数,用于获取各表的插入、更新、删除以及脏页率信息。 该函数用于指定入参(脏页率阈值、表数据阈值),查询指定系统中同时满足大于脏页率阈值和表数据阈值条件的表信息。其中,脏页率阈值建议设置为30,表数据阈值设置为100000。 对于高脏页率的系统表,建议在确认当前没有人操作该系统表时,再执行VACUUM FULL。建议对脏页率超过30%的非系统表执行VACUUM FULL,用户也可根据业务场景自行选择是否执行VACUUM FULL。
总条数:2746 到第 页
上滑加载中