• [问题求助] 【Gaussdb A 8005、DWS8.1】【topsql功能】topsql查看可不可以赋权给普通用户
    如标题:topsql查看可不可以赋权给普通用户,并且如果可以的话,需要怎么赋权?
  • [问题求助] GaussDB 8.0.0 数据库突然不能进行常规操作 DDL DML
    【功能模块】  GaussDB 使用【操作步骤&问题现象】1、登录数据库后执行 create table 语句 2、一直不能返回执行成功3、集群资源都是闲置状态 ,此集群是测试机,只有我自己在用。【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [问题求助] 【DWS产品】【cstore_buffers】参数服务于列表和HDFS表 ?
  • [问题求助] GaussDB A 8.0.0.5 数据库通过jdbc发送给客户端的数据性能是否有参数控制
    数据库通过jdbc发送给客户端的数据性能有没有参数控制?比如我查询163万条数据需要2s,全部发送给客户端需要25s,这个性能有没有参数控制?
  • [实践系列] GaussDB(DWS)实践系列-低效业务脚本检测指导
    华为云GaussDB(DWS)-低效业务脚本检测指导         为保障业务系统高效运行,降低额外的资源损耗,建议定期对运行在GaussDB(DWS)集群上的业务脚本进行排查,并及时对低效业务脚本进行识别和优化,避免系统运行卡顿或资源过度使用。因此,需要增强低效业务脚本的排查和校验,及时识别出耗时、高频等需优化的低效SQL,并进行整改,为生产业务运行增加一道防护网。一、 开启Active SQL统计1.    操作前准备在华为云管控面配置参数开启active SQL统计功能,数据库后台会自动记录业务SQL的相关运行信息,包括数据库名、访问IP、执行时间、执行计划等信息,定期查询active SQL统计视图获取SQL运行信息,针对执行时间较长且频次较高的SQL进行重点分析优化。登录华为云网址,进行Active SQL统计功能配置,网址链接:https://auth.huaweicloud.com/authui/login.html。搜索数据仓库服务GaussDB(DWS)服务。点击选择指定集群,跳转到对应页面进行配置。在参数修改页签设置enable_resource_record(开启资源监控记录归档功能)参数值为on,默认值为off。2.    统计视图介绍PGXC_WLM_SESSION_INFO视图显示在所有CN上执行作业结束后的负载管理记录(系统中运行的业务SQL每隔3分钟会被归档),该视图需管理员权限用户执行,普通用户没有权限。【备注】查询pgxc_wlm_session_info视图需登录到postgres数据库下。pgxc_wlm_session_info视图信息序号名称类型描述1datidoid连接后端的数据库OID。2dbnametext连接后端的数据库名称。3schemanametext模式名。4nodenametext语句执行的CN名称。5usernametext连接到后端的用户名。6application_nametext连接到后端的应用名。7client_addrinet连接到后端的客户端的IP地址。 如果此字段是null,它表明通过服务器机器上UNIX套接字连接客户端或者这是内部进程,如autovacuum。8client_hostnametext客户端的主机名,这个字段是通过client_addr的反向DNS查找得到。这个字段只有在启动log_hostname且使用IP连接时才非空。9client_portinteger客户端用于与后端通讯的TCP端口号,如果使用Unix套接字,则为-1。10query_bandtext用于标示作业类型,默认为空字符串。11block_timebigint语句执行前的阻塞时间,包含语句解析和优化时间,单位ms。12start_timetimestamp with time zone语句执行的开始时间。13finish_timetimestamp with time zone语句执行的结束时间。14durationbigint语句实际执行的时间,单位ms。15estimate_total_timebigint语句预估执行时间,单位ms。16statustext语句执行结束状态:正常为finished,异常为aborted。17abort_infotext语句执行结束状态为aborted时显示异常信息。18resource_pooltext用户使用的资源池。19control_grouptext语句所使用的Cgroup。20min_peak_memoryinteger语句在所有DN上的最小内存峰值,单位MB。21max_peak_memoryinteger语句在所有DN上的最大内存峰值,单位MB。22average_peak_memoryinteger语句执行过程中的内存使用平均值,单位MB。23memory_skew_percentinteger语句各DN间的内存使用倾斜率。24spill_infotext语句在所有DN上的下盘信息:None:所有DN均未下盘。All: 所有DN均下盘。[a:b]: 数量为b个DN中有a个DN下盘。25min_spill_sizeinteger若发生下盘,所有DN上下盘的最小数据量,单位MB,默认为0。26max_spill_sizeinteger若发生下盘,所有DN上下盘的最大数据量,单位MB,默认为0。27average_spill_sizeinteger若发生下盘,所有DN上下盘的平均数据量,单位MB,默认为0。28spill_skew_percentinteger若发生下盘,DN间下盘倾斜率。29min_dn_timebigint语句在所有DN上的最小执行时间,单位ms。30max_dn_timebigint语句在所有DN上的最大执行时间,单位ms。31average_dn_timebigint语句在所有DN上的平均执行时间,单位ms。32dntime_skew_percentinteger语句在各DN间的执行时间倾斜率。33min_cpu_timebigint语句在所有DN上的最小CPU时间,单位ms。34max_cpu_timebigint语句在所有DN上的最大CPU时间,单位ms。35total_cpu_timebigint语句在所有DN上的CPU总时间,单位ms。36cpu_skew_percentinteger语句在DN间的CPU时间倾斜率。37min_peak_iopsinteger语句在所有DN上的每秒最小IO峰值(列存单位是次/s,行存单位是万次/s)。38max_peak_iopsinteger语句在所有DN上的每秒最大IO峰值(列存单位是次/s,行存单位是万次/s)。39average_peak_iopsinteger语句在所有DN上的每秒平均IO峰值(列存单位是次/s,行存单位是万次/s)。40iops_skew_percentinteger语句在DN间的IO倾斜率。41warningtext主要显示如下几类告警信息以及SQL自诊断调优相关告警:1. Spill file size large than 256MB2. Broadcast size large than 100MB3. Early spill4. Spill times is greater than 35. Spill on memory adaptive6. Hash table conflict42queryidbigint语句执行使用的内部query id。43querytext执行的语句。44query_plantext语句的执行计划。45node_grouptext语句所属用户对应的逻辑集群。二、 低效SQL检测1、手工查询过滤过滤执行耗时长、高频的业务SQL,识别并进行优化,提升SQL执行效率。1.1检查SQL耗时         通过如下模板SQL获取检测期间总耗时最高的Top 20个SQL,进行统计分析,实际使用过程中可按照备注进行调整。select    sum(duration) as sum ,    round(avg(duration),2) as avg,       --保留小数点后2位有效数字    count(duration) as count,    substr(query,1,100) as sub_query    --根据SQL特征截取做聚合。from pgxc_wlm_session_infowhere start_time > '2021-08-19 05:38:11'  --语句开始执行时间and start_time < '2021-08-19 11:38:11'and username<> 'Ruby'     --排除掉系统用户and dbname = 'postgres'    -- postgres按需替换为指定数据库group by sub_query        -- 按照SQL语句汇聚order by sum desc         -- 根据sum倒排limit 20; 查询结果如下,图中:1.2检测高频SQL通过如下模板SQL获取检测期间执行频率最高的Top 20个SQL,进行统计分析,实际使用过程中可按照备注进行调整。select    sum(duration) as sum ,    round(avg(duration),2) as avg,    count(duration) as cnt,    substr(query,1,100) as sub_query    --根据SQL特征截取做聚合。from pgxc_wlm_session_infowhere start_time > '2021-08-19 05:38:11'  --语句开始执行时间and start_time < '2021-08-19 11:38:11'and username<> 'Ruby'     --排除掉系统用户and dbname = 'postgres'    -- postgres按需替换为指定数据库group by query     -- 按照SQL语句汇聚order by cnt desc  -- 根据cnt倒排limit 20; 2、函数过滤筛选GaussDB(DWS)是分布式数据库架构,适合大规模并行处理提升性能,在编写SQL过程中应尽量降低执行时不同节点间的数据流动,例如节点间数据的重分布或者广播,对应到执行计划中的stream算子和subplan算子(可以通过调整分布键,维度表改复制表,优化子查询等方式进行SQL优化改写)。2.1 脚本准备(1)筛选subplan算子登陆postgres数据库创建如下函数,统计执行计划中的subplan数量。CREATE OR REPLACE FUNCTION public.subplan_count(text) RETURNS integer LANGUAGE sql IMMUTABLE STRICT NOT FENCEDAS $function$    select ((length($1) - length(replace($1, 'SubPlan', '')) )::int / length('SubPlan'))::int$function$;(2)筛选Stream算子登陆postgres数据库创建如下函数,统计执行计划中的Stream算子数量。CREATE OR REPLACE FUNCTION public.stream_count(text) RETURNS integer LANGUAGE sql IMMUTABLE STRICT NOT FENCEDAS $function$    select ((length($1) - length(replace(replace($1, 'Streaming(type: B', ''), 'Streaming(type: R', ''))) / length('Streaming(type: B'))::int$function$;2.2 执行检查调用函数检查统计业务脚本中的subplan或Stream算子。登陆postgres数据库,执行如下SQL:selectsubstr(query,1,60) as sub_query,dbname,count(1) as count,round(avg(duration),2) as avg_duration,public.stream_count(query_plan) as stream_count,public.subplan_count(query_plan) as subplan_countfrom pgxc_wlm_session_infowhere start_time > '2021-08-19 05:38:11'  --语句开始执行时间and start_time < '2021-08-19 11:38:11'and username <> 'Ruby'--and dbname = 'postgres'    --按需替换为指定数据库,例如postgresgroup by 1,2,5,6having stream_count > 0 or subplan_count > 0order by stream_count desclimit 20;备注:结果集中dbname列统计对应数据库名,count列统计业务脚本调用频次,avg_duration列统计业务脚本的平均执行时间,stream_count列统计单条业务脚本的stream算子数量,subplan_count列统计单条业务脚本的subplan数量。基于以上的统计结果查询完整的业务SQL如下。查询模板:select query from pgxc_wlm_session_infowhere trim(query) like '%subquery%'and dbname = 'postgres'limit 1;例如,select query from pgxc_wlm_session_infowheretrim(query) like '% select * from EPAY_VW_PLAN_VOUCHER  where guid = $1 and prov%'and dbname = 'tran_province_cz' limit 1;2.3 结果分析理想情况下,执行检测脚本,Stream算子和subplan统计数量均为0。对于集群中运行的业务脚本,需要尽量消减Stream和Subplan总数,减少节点间数据的重分布和广播,从而提升整体运行效率。
  • [实践系列] GaussDB(DWS)实践系列-函数实现JSON类型解析
    GaussDB(DWS)实践-函数实现JSON类型解析       在项目交付中会遇到针对JSON类型解析的场景,例如key值获取value,当前GaussDB(DWS)不支持(需求已规划),针对该场景可参考本文方法实现,实际使用过程中可按照注释内容按需调整。 函数定义:DROP FUNCTION IF EXISTS public.jsonpars;CREATE OR REPLACE FUNCTION public.jsonpars( p_str IN TEXT,key_name IN TEXT )RETURN TEXTIMMUTABLEASDECLARE    p_str_tmp TEXT := '' ; --定义TEXT类型变量:p_str_tmp,缓存读取的json文件去除'['和']'字符    len_p_str_tmp_1 INTEGER := 0 ; --定义INTEGER类型变量:len_p_str_tmp_1,缓存读取的json文件的长度    str_tmp_1 TEXT ; --定义TEXT类型变量:str_tmp_1,缓存读取的json文件replace之后的内容    len_p_str_tmp_2 INTEGER := 0 ; --定义INTEGER类型变量:len_p_str_tmp_2,缓存读取的replace后的json文件的长度    comma_position INTEGER := 0 ; --定义INTEGER类型变量:comma_position,缓存逗号在选定文本字符串中位置    symbol_position INTEGER := 1 ; --定义INTEGER类型变量:symbol_position,缓存指定字符开始匹配起始位置    lbrace_position INTEGER := 0 ; --定义INTEGER类型变量:lbrace_position,缓存左大括号在选定文本字符串中位置    rbrace_position INTEGER := 0 ; --定义INTEGER类型变量:rbrace_position,缓存右大括号在选定文本字符串中位置    str_tmp_key_value TEXT := '' ; --定义TEXT类型变量:str_tmp_key_value,缓存解析出的"key":"value"单一值    TYPE ARRSTR IS VARRAY(1024) OF TEXT ; --定义TEXT类型数组类型:ARRSTR    array_value ARRSTR := ARRSTR() ; --定义ARRSTR类型的数组:array_value,缓存解析出的"key":"value"的所有值    array_cnt INTEGER := 1 ; --定义INTEGER类型变量:array_cnt,缓存数组下标变量值,初始值为1,(GaussDB 200的数组下标值从1开始)    lbrace_ajust_num INTEGER := 0 ; --定义INTEGER类型变量:lbrace_ajust_num,缓存左大括号在选定文本字符串中个数    rbrace_ajust_num INTEGER := 0 ; --定义INTEGER类型变量:rbrace_ajust_num,缓存右大括号在选定文本字符串中个数    change_position INTEGER := 0 ; --定义INTEGER类型变量:change_position,缓存指定读取右括号次数    array_loop_cnt INTEGER := 1 ; --定义INTEGER类型变量:array_loop_cnt,缓存读取数组下标值    colon_position INTEGER := 0 ; --定义INTEGER类型变量:colon_position,缓存"key":"value"值中的:所在位置    array_key_value TEXT := '' ; --定义TEXT类型变量:array_key_value,缓存从数组中取出的key值    array_value_value TEXT := '' ; --定义TEXT类型变量:array_value_value,缓存从数组中取出的value值    return_value TEXT := '' ; --定义TEXT类型变量:return_value,缓存返回值BEGIN    p_str_tmp := replace( replace( cast( p_str as TEXT ) , '[{' , '{' ) , '}]' , '}' ) ;    len_p_str_tmp_1 := LENGTH( p_str_tmp ) ;    str_tmp_1 := SUBSTR( p_str_tmp , 2 , ( len_p_str_tmp_1 - 2 ) ) ;    len_p_str_tmp_2 := LENGTH( str_tmp_1 ) ;    IF ( len_p_str_tmp_2 > 0 ) THEN        WHILE ( comma_position < len_p_str_tmp_2 ) LOOP            comma_position := INSTR( str_tmp_1 , ',' , symbol_position ) ;            lbrace_position := INSTR( str_tmp_1 , '{' , symbol_position ) ;            rbrace_position := INSTR( str_tmp_1 , '}' , symbol_position ) ;            IF ( comma_position = 0 ) THEN                comma_position := len_p_str_tmp_2 ;                str_tmp_key_value := substr( str_tmp_1 , symbol_position , ( len_p_str_tmp_2 - symbol_position + 1 ) ) ;                array_value.EXTEND ;                array_value( array_cnt ) := str_tmp_key_value ;                EXIT ;            ELSIF ( ( lbrace_position > 0 ) AND ( lbrace_position < comma_position ) AND ( comma_position < rbrace_position ) ) THEN                SELECT ( LENGTH( SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) ) - LENGTH( REPLACE( SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) , '{' , '' ) ) ) INTO lbrace_ajust_num ;                SELECT ( LENGTH( SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) ) - LENGTH( REPLACE( SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) , '}' , '' ) ) ) INTO rbrace_ajust_num ;                WHILE ( lbrace_ajust_num <> rbrace_ajust_num ) LOOP                    change_position := ( change_position + 1 ) ;                    rbrace_position := INSTR( str_tmp_1 , '}' , symbol_position , change_position ) ;                    SELECT ( LENGTH( SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) ) - LENGTH( REPLACE( SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) , '{' , '' ) ) ) INTO lbrace_ajust_num ;                    SELECT ( LENGTH( SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) ) - LENGTH( REPLACE( SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) , '}' , '' ) ) ) INTO rbrace_ajust_num ;                END LOOP ;                change_position := 0 ;                str_tmp_key_value := SUBSTR( str_tmp_1 , symbol_position , ( rbrace_position - symbol_position + 1 ) ) ;                symbol_position := ( rbrace_position + 2 ) ;                array_value.EXTEND ;                array_value( array_cnt ) := str_tmp_key_value ;                array_cnt := ( array_cnt + 1 ) ;            ELSE                str_tmp_key_value := SUBSTR( str_tmp_1 , symbol_position , ( comma_position - symbol_position ) ) ;                symbol_position := ( comma_position + 1 ) ;                array_value.EXTEND ;                array_value( array_cnt ) := str_tmp_key_value ;                array_cnt := ( array_cnt + 1 ) ;            END IF ;        END LOOP ;        FOR array_loop_cnt IN 1..array_value.count LOOP            colon_position := 0 ;            array_key_value := '' ;            array_value_value := '' ;            str_tmp_key_value := btrim( array_value( array_loop_cnt ) ) ; --去除开头和结尾的空格            colon_position := INSTR( str_tmp_key_value , TO_CHAR( ':' ), 1 , 1 ) ;            array_key_value := btrim( SUBSTR( str_tmp_key_value , 1 , ( colon_position - 1 ) ) ) ;            array_value_value := btrim( SUBSTR( str_tmp_key_value , ( colon_position + 1 ), LENGTH( str_tmp_key_value ) ) ) ;            IF( array_key_value = ( '"' || key_name || '"' ) ) THEN                return_value := array_value_value ;                RETURN return_value ;            END IF ;        END LOOP ;           END IF ;    RETURN return_value ;END ;/  测试用例:【用例1】select jsonpars('{"a":"info_a","b":{"c":"info_c","d":"info_d"}}','a');【用例2】select jsonpars('{"a":"info_a","b":{"c":"info_c","d":"info_d"}}','b'); 【用例3】select jsonpars(jsonpars('{"a":"info_a","b":{"c":"info_c","d":"info_d"}}','b'),'d'); 【用例4】select jsonpars(jsonpars('{"a":"info_a","b":{"c1":"info_c","c2":{"d1":"info_d1","d2":"info_d2"},"d":"info_d"}}','b'),'d'); 
  • [运维管理] 【DWS产品】如何获取 DWS 集群各项资源指标的使用率,以及单条SQL资源占用率
    如何获取 DWS 集群各项资源指标的使用率,比如集群当前CPU使用率达到多少,内存达到多少,IO占用率多少,网络速率多少?以及单条SQL运行时占用的这些指标资源如何获取?
  • [其他] 【8.0.3】DWS安装完成后不显示创建集群按钮
    1. 管控面版本 :    HCS 8.0.3 , 430版本。2. 问题现象:   DWS管控面安装完成后页面不显示创建集群按钮。3. 原因:    排查Console-static节点访问DWS管控面集群是否不通。console-static节点访问DWS注册在RegionLB(LVS)上的接口,然后再由LVS转发请求到管控面集群node节点。    一般情况下,需要查询LVS服务是否有异常。可通过访问MRS等服务查看其它服务界面按钮是否存在来判定。LVS服务异常时,需要重启其keepalived服务来修复。    LVS错误排查与操作可以参考以下wiki:    http://wiki.his.huawei.com/domains/126/wiki/4147/WIKI2021072700564
  • [其他] DWS安装完成后页面无法显示规格
    1. 管控面版本 :    HCS 8.0.3 , 430版本。2. 问题现象:   DWS管控面安装完成后页面不显示规格。3. 原因:    1. 排查rds_resspecattr表中对应的底层规格名称与创建的BMS规格是否一致:          a. SELECT * from rds_resspec where specCode='{实例规格名称}';  查出该实例规格对应的id。          b. SELECT * select * from rds_resspecattr where specId='{上一步查出的ID}';  查询当attrCode=flavor时value的值,该值是否与BMS规格名称一致,不一致,修改该字段为一致。              2. 排查该集群规格是否在该az设置开启。          a. SELECT id,code from rds_cluster_spec WHERE code='{集群规格名称}';          b. SELECT * from rds_spec_region WHERE cluster_spec_id='{上一步查出的id}';  找到zone字段显示的az与当前az一致的数据,查看该条数据中status字段是否为enable,如果为disable,手动刷成enable。      
  • [其他] 【8.0.3】DWS集群没有内网域名,查明为RdsCreatePrivateZoneTask失败。
    1. 管控面版本 :    HCS 8.0.3 , 430版本。2. 问题现象:   创建集群成功,但是没有访问集群的内网域名。3. 原因:    HCS中内网域名的创建需要依赖clouddns,该情况底座缺少clouddns服务或clouddns服务有异常。4. 解决方法:    如果没有安装clouddns,找底座人员安装。服务异常,联系底座人员定位即可。
  • [其他] 【总结】【性能】DWS系统级性能问题处理套路
    对于性能问题,这边习惯将其按照范围和影响分为单点性能问题和系统级性能问题,单点性能问题大多直接转变成单SQL调优,而系统级性能问题因其复杂性往往处理起来比较费时费力,在此根据历史性能问题的处理经验总结一份套路,旨在指导大家在碰到DWS性能问题时有法可依,主要包含问卷和三阶段排查两个部分。问卷主要为和客户快速确认性能慢的初步信息,用来快速排除低级的非数据库服务侧的问题,并大致明确问题范围和影响:维度目标确认项where(哪里慢)明确是否慢在数据库侧,即服务侧如何统计业务执行时间是否为DWS库内执行慢是否涉及上下游供数是否应用侧数据处理慢who(都谁慢)明确慢的业务范围及影响是否单SQL慢是否特定类SQL慢(例vacuum full)是否实时查询慢(例报表)是否数据入库慢(例insert)是否所有业务慢what(咋个慢法)明确性能对比基线与历史比与其他集群比(例测试集群比)与其他部署形态比(线上线下)与其他产品比(例oracle)与经验值比(例空表查询慢)Why(为何变慢)明确是否存在显在外部变化(如有反馈变更,则主要针对变化展开分析)是否本身为新业务是否近期有新业务上线是否近期业务调度发生变化是否近期业务数据量突增是否近期业务访问量突增(并发)是否近期服务变更(升级、扩容、巡检等)是否近期运行环境变更(安装服务、监控、杀毒软件等)When(慢的时间)明确问题触发规律(如果为偶发、定期慢,则需部署监控、探针)是否一直慢是否固定时间慢(高峰、跑批时)是否随机偶发慢在完成上面的问卷并明确问题范围和影响后,如果确定是整体业务性能都比历史慢且未识别出明显的业务变化,则开始后续三阶段排查。阶段一 集群健康度1、集群状态集群状态异常、不均衡均会影响业务的整体运行效率,所以确定集群状态正常和均衡是整体性能稳定的首要保证。Check项异常值说明Check方法Cluster stateUnavailable集群不可用影响业务整体进度cm_ctl query –CvDegraded降级的Deleted/Building状态影响集群均衡NormalCatchup状态影响IO资源的均衡BalancedNo主备倒换影响DN实例的均衡 处理方式:集群修复、集群均衡(主备切换)集群修复:https://bbs.huaweicloud.com/blogs/detail/198733主备切换:https://bbs.huaweicloud.com/forum/thread-140502-1-1.html2、可服务性在检查集群状态正常的情况下,还存在服务对外不可提供服务的可能,从而影响整体业务进度,最常见为某CN hang,所以通过建连、建表来快速确认CN、DN的基础可服务性。Check项异常值说明Check方法建连(连接CN\DN)连接hangCheck 客户端连接服务是否正常gsql连接建表(DDL)建表hangCheck CN与CN/DN间交互是否正常create table test_tbl(a int,b int,c varchar(100));drop table test_tbl; 处理方式:gstack保留hang实例进程栈后,重启或隔离CN/DN进行快速恢复单节点重启或隔离: https://bbs.huaweicloud.com/forum/thread-147714-1-1.html单实例重启或隔离: https://bbs.huaweicloud.com/forum/thread-147713-1-1.html多CN隔离:https://bbs.huaweicloud.com/forum/thread-147718-1-1.html3、资源瓶颈性能问题尤其是系统级性能问题大多伴随着某类系统资源(CPU/IO/内存/网络)的瓶颈,快速检查集群的整体资源使用情况有利于快速缩小问题范围。1、线下集群的资源使用情况使用FI Manger管理界面查看:2、公有云集群资源使用情况使用DWS-console管理界面查看:3、混合云集群资源使用情况可随机抽取CN/DN使用top/iostat/free初步排查资源使用情况。 处理方式:对整体的资源使用情况有大致的把握后继续进行后续排查,并在后续每个排查措施实施后,观察对应飙高资源是否回落。阶段二 业务状态1、烂SQL清理Check项异常值说明Check方法长时间执行的业务SQL执行时间超过阈值(根据实际场景确定,例如1h)长时间执行的sql大多会长期占用系统资源SELECT usename,coorname,now() - query_start AS runtime,substr(query, 1, 100) AS query,pid,query_id,waiting,enqueueFROM pgxc_stat_activityWHERE STATE = 'active'AND usename <> 'omm'AND usename <> 'Ruby'ORDER BY runtime DESC LIMIT 50;处理方式:和客户沟通对执行时间长的sql进行查杀,观察其他业务和资源恢复情况,若恢复则进入对被查杀SQL的调优环节,否则继续进行后续排查业务SQL查杀:https://bbs.huaweicloud.com/forum/thread-147712-1-1.html 2、业务阻塞点Check项异常值说明Check方法整体业务阻塞情况1)长时间wait某个节点2)长时间wait某类资源多次执行,观察是否长期停留 在wait特定对象的状态SELECT now(),wait_status,wait_event,count(*) AS cntFROM pgxc_thread_wait_statusWHERE wait_status <> 'wait cmd'AND wait_status <> 'synchronize quit'AND wait_status <> 'none'GROUP BY 1,2,3ORDER BY 4 DESC limit 50;其中等待状态含义参见:https://support.huaweicloud.com/devg2-dws/dws_0402_0863.html部分状态举例说明:wait node:等待其他CN/DN节点,可能为慢节点wait io:等待读写,可能为IO问题wait pooler:等待内部建连,可能为网络问题acquire lock:等锁,对相同表并发操作导致acquire lwlock:等轻量级锁,并发高导致内部问题1:针对IO、网络等资源方面的问题参考阶段三 系统状态中处理问题2:针对LOCK的问题参考:锁等待场景:https://bbs.huaweicloud.com/blogs/233114死锁的场景:https://bbs.huaweicloud.com/blogs/2288403、业务并发Check项异常值说明Check方法整体并发负载情况1)并发数长期维持高位2)各CN上业务分布不均执行多次,check整体负载及CN负载均衡SELECT usename,coorname,enqueue,count(*)FROM pgxc_stat_activityWHERE STATE = 'active'AND usename <> 'omm'AND usename <> 'Ruby'GROUP BY 1,2,3ORDER BY 4 desc;问题1:并发高(在前面明显的烂SQL已经清理的情况下)如伴随着cpu、内存等整体资源瓶颈,则需降低业务并发度并继续观察(并发值根据实际业务情况实测、压测最终明确):CN级并发调整(max_active_statements):https://bbs.huaweicloud.com/blogs/179009 用户级并发调整:https://bbs.huaweicloud.com/forum/thread-74904-1-1.html问题2:CN上分布不均(部分CN排队严重)线下建议部署LVS:https://bbs.huaweicloud.com/forum/thread-145807-1-1.html无法部署LVS和ELB的场景建议客户将应用业务分散到不同CN执行(应用指定)4、业务排队Check项异常值说明Check方法业务排队业务排队严重多次执行,Check排队情况及持续排队的缓解情况SELECT,usename,,resource_pool,enqueue,count(*)FROM public.pgxc_session_wlmstat()WHERE attribute != 'Internal'AND enqueue != 'None'AND status = 'pending'GROUP BY 1,2,3ORDER BY 4 DESC;说明:pgxc_session_wlmstat需手动创建,请参考https://bbs.huaweicloud.com/blogs/278874问题1:Global状态的排队多:触发全局max_active_statements阈值问题2:Respool状态的排队多:触发资源池内存、并发限额,评估该用户使用资源合理性触发资源池内存限额触发资源池max_active_statements限额触发资源池max_dop限额(仅针对简单语句)问题3:CentralQueue状态的排队多:触发全局内存max_dynamic_memory限制,评估内存参数设置及业务使用内存情况其中针对Global状态排队多问题:根据资源余量情况决策是否调大max_active_statements其中针对Respool及CentralQueue类问题参考https://bbs.huaweicloud.com/blogs/222017阶段三 系统状态这里所说系统状态主要指系统CPU、IO、内存、网络等系统资源使用情况,导致这些系统资源不足的场景非常之多,且之间互相影响。Check项Check方法异常值CPUtop整体或部分>80%内存top/free整体或部分>70%IOiostat/iotop>90%/长期100%网络ping/gsar/neststat重传、丢包严重1、资源高(cpu/io/mem)1)单节点资源瓶颈分针对DWS分布式场景,单节点资源瓶颈大多为硬件、OS故障、业务倾斜导致,主要进行以下排查:硬件、OS侧排查重点:排查bmc日志(常见IO问题如磁盘告警、磁盘读写策略、CPU节能模式)排查messages日志(例历史上出现过的主板故障导致CPU高)业务侧排查重点:排查存储倾斜:https://bbs.huaweicloud.com/blogs/183585排查计算倾斜:https://bbs.huaweicloud.com/blogs/254845排查Sharding业务(分布列作为过滤条件的点查)2)排除taishan问题泰山服务器有已知的网卡、内存等方面问题,需排查是否做过加固: https://support.huawei.com/enterprise/zh/bulletins-product/ENEWS20000077433)排除异常进程使用top/iotop等工具明确消耗资源的进程为gaussdb进程,历史上出现过杀毒软件、ssh进程、getClientInfo进程导致CPU飙高的情况。https://bbs.huaweicloud.com/forum/thread-74914-1-1.html4)抓top资源业务Top CPU消耗的业务抓取方法: https://bbs.huaweicloud.com/forum/thread-70939-1-1.htmlTop IO消耗的业务抓取方法:https://bbs.huaweicloud.com/forum/thread-149502-1-1.htmlTop内存消耗的业务抓取方法:https://bbs.huaweicloud.com/forum/thread-110215-1-1.html5)停业务或查杀查杀方法:https://bbs.huaweicloud.com/forum/thread-147712-1-1.html6)业务整改和调优针对单个业务导致的资源高,处理方法主要为SQL调优。针对批量业务导致的资源高,处理方法主要为SQL调优或限并发(前提SQL已最优)。2、网络慢通信是分布式场景下的基础建设,承担着各节点数据交互的使命,通信效率的高低会极大影响着查询等各类业务性能的好坏。网络慢大多体现在以下两点:1)客户端连接满、连接慢处理案例:https://bbs.huaweicloud.com/blogs/2394712)集群内节点建连慢、数据交互慢计划中Gather、Redistribute、Broadcast等通信算子耗时高等待视图中create conn、wait pooler等状态持续时间长通信性能问题处理方法及案例:https://bbs.huaweicloud.com/blogs/248843小结触发数据库性能问题的因素本就种类繁多,而在分布式场景更是这样,任何一个节点、环节、链路出现问题和瓶颈,都会因短板效应影响整个集群的性能,因此快速识别短板(阻塞点)、瓶颈点(系统资源)就成为关键,而前面说的三个阶段也是围绕这两个点进行。当然,也并不是所有场景都需要严格按照一二三的顺序来排查,可以根据实际情况调整排查顺序并且可能需要来回校验来互相印证,希望大家能灵活运用。引用自博文链接:https://bbs.huaweicloud.com/blogs/297384
  • [其他] DWS登录指南
    一、 容器登录1.      使用场景:1)      登录dwscontroller后台数据库   在运维容器使用mysql命令登录数据库         mysql -u{db.username} -p{password} -D{dbname} -h{ip} -P{port}2)      查看dwscontroller服务日志        和登录运维容器相同,登录namespace为dws的dwscontroller服务3)      登录DWS数据库节点       在运维容器使用connectTool.sh登录,3中操作步骤以此为例2.      操作前提:获取OC,CDK登录信息1)        获取oc域名和账号2)        获取cloudscope域名和op_cdk_sso账号密码3.        操作步骤:步骤一:找到虚拟机入口登录oc页面,选择ServiceOM,点击虚拟机步骤二:获取CDKmaster虚拟机IP在虚拟机页面搜索关键字EICommon获取到的虚拟机Ip即为CDK master节点ip地址{CDKMasterIP},步骤三:在cdk中找到dwscontroller服务使用op_cdk_sso用户登录cloudscope页面1)运维服务-->xxx-cdk2)进入服务管理-->服务查询,3)下拉条件:红色框起来的部分第一行的三个需要选择对应的region第二行:选择ei-dbs-xxx等ei开头的选择dws步骤四:获取Controller的mysql数据库连接信息db.urldb.username db.password在页面进入升级,在搜索框中搜索“db.”获取界面后台mysql数据库连接信息: db.password :获取db节点密码的密文,在步骤七使用AESTool.jar解密db.username :用户    db.driver:驱动,后面不用db.url:连接,获取ip,端口步骤五:登录步骤二获取的ip对应主机登录EICommonRegion-01/EICommonRegion-02/EICommonRegion-03其中一个密码从对应版本《华为云账号一览表》获取步骤六:登录运维容器在终端使用root用户登录cdk master节点后,执行以下命令可以进入dws-maintain容器: kubectl get pod -n dws-maintain   --查有两个容器,是负载集群,都可以登录kubectl exec -ti {pod name} bash -n dws-maintain    -- pod为查询的容器名cd opsTool    --cd到脚本目录下步骤七:解密步骤四获取的密码密文进入dws-maintain容器后,执行以下命令,解密dws密码:java -jar AESTool.jar2 { dbPasswordEncrypt}步骤八:执行connectTool.sh脚本登录节点进入dws-maintain容器后,可以执行以下命令登录dws实例节点,其中user字段在630及之前版本为root,在930及之后版本为ecf,若需要输入密码,则粘贴步骤七中密码即可: sh connectTool.sh -u{user} -drms -h{db ip} -p7306 -n {instance name} –tStandalone 参数说明:-u   用户名 对应db.username-d   数据库 对应db.url 中“jdbc:mariadb://170.75.4.205:7306/rms?autoReconnect=true”红色部分-h   连接ip  对应db.url 中“jdbc:mariadb://170.75.4.205:7306/rms?autoReconnect=true”红色部分 -p   端口   对应db.url 中“jdbc:mariadb://170.75.4.205:7306/rms?autoReconnect=true”红色部分-n   实例名称 对应mysql库中rds_instance.name       或者虚拟机—实例名     BMS—实例名称     oc资源监控---》数仓集群—》实例名称 二、            ServiceOM操作1.    使用场景:1)     实例做重启使用dws-maintain运维容器无法正常登录实例或运维容器中connectTool.sh的脚本异常,需要对实例做重启等操作2.    操作前提:获取OC页面域名和账号密码3.    操作步骤:步骤一:在serviceom找到对应虚拟机登录OC页面,进入serviceom,点击虚拟机,在搜索栏可以根据集群名搜索到对应dws实例。 步骤二:对主机操作重启等在页面右侧更多下拉框中可以选择对虚拟机做重启、强制停止、强制重启等操作,不需要登录。 三、            DWS节点拷贝文件到宿主机1.    使用场景1)     收集dws数据库节点日志2)     拷贝巡检报告3)     拷贝文件到实例上需要降步骤反方向操作进行2.    操作步骤步骤1. 获取登录信息1)注释脚本最后一行不删除ssh_key文件2)执行如下命令,使用 sh -x执行登录获取登录密码信息等sh -x connectTool.sh  -u ecf -drms -h10.157.242.233 -p7306 -n "bigdata-dws-01-dws-cn-cn-2-1" -t Standalone mngPPh=@3cDvX9YJmnN     ##@3cDvX9YJmnN 为Mike的密码 /opt/cloud/3rdComponent/opsTool/tmp/ssh_key Mike@100.73.186.53     ##后面用的此连接信息  步骤2. 拷贝文件到本地容器 scp -i /opt/cloud/3rdComponent/opsTool/tmp/ssh_key  Mike@100.74.180.41:/文件路径   容器中文件路径IP地址和密码为上一步查出来的信息。(备注:注意修改拷贝文件的权限) 步骤3. 从容器里拷到宿主机 kubectl cp dws-maintain/dwsmaintaintool-79bb8c479b-fhkcw:/opt/cloud/3rdComponent/opsTool/xxx路径 /xxx路径步骤4. 使用putt或者winSCP从宿主机把文件拷出 
  • [问题求助] 【香港启德】【DWS访问权限】菜单添加logo报错
    【功能模块】ROMA数据源管理【操作步骤&问题现象】添加数据源-->测试连接连接失败,原因:The address cannot be accessed. Please check if the server IP and port are correct and are blocked by the firewall. [注意:失败原因只显示20秒,请先复制到文本文件中]数据库主机:dws-ap1-sunacfc_dev数据库库名:data_service_db_ktspioc账户:data_db_ktspioc本地IP:10.100.12.78/1.85.33.122【截图信息】
  • [开发应用] GaussDB A 8.0.0.0 GaussDB对接mybatis平台是否支持
    我们在使用GaussDB+springboot 整合过程中发现GaussDB无法兼容mybatis平台,想知道GaussDB有没有相关的整合方案?类似于postgresql的。使用JDBC进行连接数据库的时候报错:数据库连接的认证配置如下:使用的是gsjdbc200.jar驱动
  • [生态空间] GaussDB A 8.0.0.5 数据库通过jdbc发送给客户端的数据性能是否有参数控制
    数据库通过jdbc发送给客户端的数据性能有没有参数控制?比如我查询163万条数据需要2s,全部发送给客户端需要25s,这个性能有没有参数控制?
总条数:2746 到第 页
上滑加载中