• [POC&交付] DWS集群和脚本性能调优总结
     0. 统计信息 -- 统计信息是动态调优的核心信息输入,统计信息准确与否,至关重要 0.1 低效算子 -- NEST LOOP 0.2 不下推分析 优化器在分布式框架下有三种执行计划优化策略 * 下推语句执行计划:CN发送查询语句到DN直接执行,执行结果返回给CN。(DN间无需数据交换场景)执行计划中包含__REMOTE_FQS_QUERY__,   表明语句走了FQS(Fast Query Shipping),代表这种场景下,直接下发语句到Datanode执行,而不是在Coordinator上生成执行计划,这种表示该语句无需Datanode间数据交互  特征:Data Node Scan on *_REMOTE_FQS_QUERY_* 例如: create table t1(a int,b int) distribute by (a); create table t2(a int,b int) distribute by (a); explain verbose select t1.* from t1  join t2 on t1.a = t2.a; -- t1和t2 都是分布表,t1.a 和 t2.a都是其分布列,join能匹配到的数据都在同一个DN上,因此DN间不需要数据交换,原语句直接下发到DN上执行即可。 -- 此种语句在CH上打印的执行计划信息较少,可直接在DN上打印详细执行信息  * 分布式计划:CN生成计划树,发送计划树给DN执行;DN执行完成后,将结果返回给CN。  特征:Streaming (type:GATHER)  broadcast : 全表广播。全表数据量的数据向所有DN传输  redistribute : 重分布。不多于全表数据量的数据向所有DN传输。性能优于 broadcast  gather :聚合流。聚合流将数据从多个查询片段聚合到一个。 * 不下推执行计划:CN承担大量计算任务,导致性能劣化。优化器将部分查询(多为基表扫描语句,DN只扫描、不计算,不过滤)下推到DN执行,将获取到的中间结果返回给CN,CN再执行计划剩余的部分。  特征:Data Node Scan + _REMOTE_XXX   0.3   --优化思路和手段 1.扫描慢 1.1 建立单字段分区或多字段分区 -- 逻辑上的一张表根据某种方案分成几张物理块进行存储,这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。 -- 目前行存表、列存表仅支持范围分区和列表分区。(8.1.3) -- 有限地支持唯一约束和主键约束,即唯一约束和主键约束的约束键必须包含所有分区键。 -- VACUUM和ANALYZE只会对主表起作用,要想分析分区表,需要分别分析每个分区表。 -- 数据迁移到分区表后建议禁用主表,如果主表未执行vacuum操作,那么执行计划会全表扫描主表,非常耗时。 •查看分区表信息,可使用系统表dba_tab_partitions。 select * from dba_tab_partitions where table_name='tpcds.customer_address'  select table_name,partition_name from dba_tab_partitions where table_name = 'web_returns_p1';   --单子段分区 partition by range(followup_create_time)(     partition p1 START('2022-01-01') END ('2022-06-30') EVERY (INTERVAL '1 day')   )   partition by range(order_date)(     partition p1 START('2022-01-01'::TIMESATMP(0)) END ('2022-06-30'::TIMESTAMP(0)) EVERY (INTERVAL '3 months')) )    -- 多字段分区(多字段分区不能使用START END 来指定分区)  WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)  DISTRIBUTE BY HASH(imsi)  PARTITION BY RANGE (idperiodo, idcalendario)  (           PARTITION p_20201231 VALUES LESS THAN (202101, 20210101) TABLESPACE pg_default,           PARTITION p_20210101 VALUES LESS THAN (202101, 20210102) TABLESPACE pg_default )  -- 查询分区表指定分区 select * from table_name partition('partition_name');  1.1 行存表:建立btree保序索引  -- 涉及排序场景建立btree索引,目前行存btree索引保持排序,列存不保存排序结果。但是建立索引后,因为要排序,所以表在插入、更新时会有一定的性能影响。 CREATE INDEX dws_tt_flink_eos_wide_01 ON dws_tt_flink_eos_wide USING btree(followup_create_time) local;  1.2 列存表建立PCK(Partial Cluster Key(局部聚簇));局部聚簇存储,列存表导入数据时按照指定的列(单列或多列),进行局部排序。 -- 一个表只能建立一个PCK -- 一个PCK可以包含多列,但是不建议超过两列 -- 建议在查询中的简单表达式的过滤条件上建立PCK;如column >,=,< 常量。 -- 在满足上面条件的情况下,选择distinct值比较少的列建立PCK CREATE TABLE tpcds.warehouse_t21 (     W_WAREHOUSE_SK            INTEGER         NOT NULL,     PRIMARY KEY (column_name1,column_name2),     PARTIAL CLUSTER KEY(column_name1,column_name2) ) WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)  DISTRIBUTE BY REPLICATION;     2.表结构 orientation不支持修改。行列存储方式一旦建立,不能修改 行存表: -- 点查询场景(大基表单表过滤查询,返回结果少,基于索引的简单查询,比如btree排序索引) -- 增删改较多的场景,并发增删改;实时数据接入等 -- 行存表压缩功能暂未商用,如需使用请联系技术支持工程师。 列存表: -- 多表关联的统计分析类场景 -- 即席查询(查询条件列不确定,行存无法确定索引) -- 多表关联查询、聚合、分组查询等,访问大量行,少数列的场景。  数据类型: -- 数据类型合理 变长可以变为定长的一律改为定长;变长在方便的同时,肯定会影响性能。 -- 多个表间存在逻辑关系时,表示同一含义字段使用相同类型。字符串字段尽量使用变长数据类型。不建议使用定长数据类型。 text,carchar  --> char(8) numeric(12,0) --> bigint  2.1分布键选择合理 (不同DN间相差5%以上即可认为倾斜,10%以上必须调整分布列) -- ◾当指定DISTRIBUTE BY HASH (column_name)参数时,创建主键和唯一索引必须包含分布键。 -- 查询数据分布: select table_skewness('table_name'); -- 不指定分布方式时,默认第一个字段为分布键,进行hash分布 -- 通常选取表的主键作为分布列 -- 选择查询中关联条件作为分布列,以便Join任务可以下推到DN执行,且减少DN间的通信数据量。 -- 复杂查询场景下,尽量不要选取存在常量等值过滤的列,避免剪枝后扫描集中在部分DN上。 -- 点查询场景下,则应该尽量选取WHERE条件中的等值过滤条件列作为分布列。  --修改表的分布键:原理是系统新建一个表进行替换 alter table schema_name.table_name distribute by hash(new_column);  -- 参数:default_distribution_mode -- 参数说明:用于设置表的默认分布方式。该参数仅8.1.2及以上版本支持。 -- 参数类型:USERSET -- 取值范围:枚举类型 -- •roundrobin,创建表不指定分布方式时,按如下规则选取默认分布方式:1.若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。若建表时不包含主键/唯一约束,则选取ROUNDROBIN分布。 -- •hash,创建表不指定分布方式时,按如下规则选取默认分布方式: --    1.若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。 --    2.若建表时不包含主键/唯一约束,但存在数据类型支持作分布列的列,则选取HASH分布,分布列为第一个数据类型支持作分布列的列。 --    3.若建表时不包含主键/唯一约束,也不存在数据类型支持作分布列的列,选取ROUNDROBIN分布。 默认值:roundrobin 新建8.1.2集群版本默认值为roundrobin,升级到8.1.2集群版本场景该参数的默认值为hash。  2.2 维度小表建立复制表  ,列存(数据量10万以下) CREATE TABLE tpcds.warehouse_t21 (     W_WAREHOUSE_SK            INTEGER               NOT NULL ) WITH (orientation=column, compression=low, colversion=2.0, enable_delta=false)  DISTRIBUTE BY REPLICATION;  2.3 列存表涉及更新,开启delta,不过在实时更新频繁时,还是搞不定,比如RDS服务实时导入数据的表,只能为行存表。 CREATE TABLE tpcds.warehouse_t21 (     W_WAREHOUSE_SK            INTEGER               NOT NULL ) WITH (orientation=column, compression=low, colversion=2.0, enable_delta=on)  DISTRIBUTE BY REPLICATION;  2.4 行存表强制打开向量化(GUC控制台参数),执行计划走列存向量 set enable_force_vector_engine=on;  -- 干预执行计划:best_agg_plan -- Stream执行框架分为如下三种计划形态: -- hashagg+gather(redistribute)+hashagg -- redistribute+hashagg(+gather) -- hashagg+redistribute+hashagg(+gather) -- GaussDB(DWS)提供了guc参数best_agg_plan来干预执行计划,强制其生成上述对应的执行计划,此参数取值范围为0,1,2,3 -- •取值为1时,强制生成第一种计划。 -- •取值为2时,如果group by列可以重分布,强制生成第二种计划,否则生成第一种计划。 -- •取值为3时,如果group by列可以重分布,强制生成第三种计划,否则生成第一种计划。 -- •取值为0时,优化器会根据以上三种计划的估算代价选择最优的一种计划生成。  3.模糊匹配 -- 建立全文索引 create index index_name on table_name using gin(to_tsvector(col_name)); select * from table_name where to_tsvector(col_name) @@ plainto_tsquery('某公司') ---- where             to_tsvector('zhparser',ef.remark ) @@ to_tsquery('%hiphi%')            --  ef.remark  like '%hiphi%'  -- 列值多值列 -- 列存多值列效率方面比行存全文搜索快很多,特别是列越多搜索效率越高。10列值的比3列值的效率高很多,3列值比单列值的效率要高。  4.查询数据库大小(已用空间) select datname,pg_size_pretty(pg_database_size(datname)) from pg_database;  10.查询指定表占用的磁盘存储空间 select pg_size_pretty(pg_relation_size('schema_name.table_name'));  •pg_table_size(regclass) -- 描述:指定的表使用的磁盘空间,不计索引(但是包含TOAST,自由空间映射和可见性映射)。 返回值类型:bigint  •pg_total_relation_size(regclass) -- 描述:指定的表使用的总磁盘空间,包括所有的索引和TOAST数据。 返回值类型:bigint  •pg_relation_size(text) -- 描述:指定名称的表或者索引使用的磁盘空间。表名字可以用模式名修饰。 返回值类型:bigint   5.改写SQL 5.1 not in -——> not exists   6.query_dop:多线程并行算法,实现核心算子并行计算; Initial DOP: 7   -- 初始DOP   Avail(CPU/IO)/Max core: (7.92/8.00)/8.00        -- 语句可用CPU/IO/最大核数 CPU/IO/Task util: 1.00/0.00/0                   -- 当前最大CPU/IO/DN作业个数 Running/Active/Max statement: 160/0/21474836     --当前DN正在运行作业数/进入CN作业数/允许最大作业数(ma) Final Max DOP: 6   -- 最终DOP  7.数据库float数据类型,小数点前面的0不显示 oracle兼容的不显示小数点前的0,mysql兼容的显示; -- 创建兼容ORA格式的数据库: CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'ORA'; -- DBCOMPATIBILITY [ = ] compatibilty_type;指定兼容的数据库的类型。取值范围:ORA、TD、MySQL。分别表示兼容Oracle、Teradata和MySQL数据库。若不指定该参数,默认为ORA。  8.清空表: 推荐使用truncate  操作,因为truncate操作会物理的清空数据表,并将其占用的空间归还给操作系统。  replace into: Insert or overwrite:主键存在,则删除原纪录插入新的记录;主键不存在,则插入记录  9. 查询指定用户当前后台正在执行的语句: select query_id,query from pgxc_stat_activity where usename='dbadmin' and state='active';  11.查询指定表的建表语句、存储倾斜率 select pg_get_tabledef('schema_name.table_name'); select table_skewness('schema_name.table_name');  12.内网域名可以走负载均衡,公网域名不可以(内网域名dns解析是会自带负载均衡的)  13.多IP配置实现负载均衡     (1)支持多ip端口配置形式,jdbc自动实现了负载均衡,多ip端口配置形式是采取随机访问+failover的方式,这个过程系统会自动忽略不可达IP,以","隔开,例如jdbc:postgresql://10.10.0.13:8000,10.10.0.14:8000/database     详情参见 https://support.huaweicloud.com/devg-813-dws/dws_04_0093.html     (2)开源JDBC配置:配置多ip时必须要配置loadBalanceHosts=true&targetServerType=any     (3)DWS的JDBC配置了多IP之后是强制负载均衡的,无需配置,配置了也不会报错  14.行存表不走bitmap索引,走顺序索引。默认值ON enable_bitmapscan=off  15.查询DN参数设置 EXECUTE DIRECT ON(dn_6001_6002) 'select name,setting from pg_settings where name=''comm_max_datanode''; '; EXECUTE DIRECT ON(dn_6001_6002) 'select name,setting from pg_settings where name=''comm_max_stream''; ';  16.控制选择重分布列的策略。 agg_redistribute_enhancement 参数说明:当进行Agg操作时,如果包含多个group by列且均不为分布列,进行重分布时会选择某一group by列进行重分布。本参数控制选择重分布列的策略。 取值范围:布尔型 •on表示会选择估算distinct值最多的一个可重分布列作为重分布列。 •off表示会选择第一个可重分布列为重分布列。 默认值:off  17.关于快照 (1)手动打的快照,删除集群后,快照会保留 (2)集群自动备份的快照,集群删除后,快照也会删除  18.数据库兼容行为配置项 (1)behavior_compat_options 参数说明:数据库兼容性行为配置项,该参数的值由若干个配置项用逗号隔开构成。 -- MYSQL 修改表分布键之前加这个:MySQL兼容模式下,控制CREATE TABLE ... LIKE语法是否为INCLUDING_ALL模式。 disable_including_all_mysql; -- ORACLE 兼容模式是否显示浮点数的 0 display_leading_zero; -- MySQL兼容模式下,设置此参数,控制locate,strpos,instr字符串函数入参大小写不敏感。 case_insensitive -- MySQL兼容模式下,除数为0时,控制除法或取余操作是否报错。(该配置项仅8.1.3.2及以上集群版本支持。) -- 设置此选项时,除法或取余操作中除数为0时,返回NULL。 enable_division_by_zero_mysql  19.开集群时存储大小计划: (1)集群总的实际存储容量大于客户实际需要的60%,要有40%的空余留给系统(安装集群、存储日志、元数据信息等)  20.列存表压缩级别的压缩比例 (1)以往测试经验:(低:1:3)、(中:1:5~1:6)、(高:1:8~1:9)  21.复制表 (1)不仅仅是小表,最好是不经常修改记录,不新增记录的维度表、静态表。  22•设置所处的时区。 SET  TIMEZONE = 'Asia/Beijing' ; -- 查看支持的所有时区 select * from PG_TIMEZONE_NAMES Asia/Beijing                     | CST    | 08:00:00   | f --查询数据库当前时区 show timezone; --设置时区 SET  TIMEZONE = 'Asia/Beijing'; --时间字段 时间字段格式最好选择 timestamp without zone;  23.购买集群注意集群版本  24.创建数据库兼容模式 create database yd_test1 with encoding 'utf-8' dbcompatibility 'MYSQL' template template0; (1)sql server:推荐TD数据库兼容模式,时间格式一致,区分空和null  25.转义反斜杠,测试这个目前只能如此转义。参数 standard_conforming_strings DWS好像没生效 (1)现在的postgresql基本上都是postgresql9之后的版本,反斜杠已经变成了普通字符.当然,如果你需要使用反斜杠转义可以在需要转义的字符串前面加上E(E就是Escape)  postgres=# select E'\'a\'';  ?column? ----------  'a' (1 row)  postgres=# show standard_conforming_strings;  standard_conforming_strings -----------------------------  on   26.集群资源实时监控 resource_track_cost 、 resource_track_duration 两个参数一起控制,一般resource_track_cost用默认值,然后resource_track_duration设置时长就可以了~ 具体的你也可以看看参数的详细描述  show enable_resource_track;      -- on show enable_resource_record;     -- on show resource_track_level;       -- query show resource_track_cost;        -- 0 show resource_track_duration;    -- 10  27.查询表存储倾斜率 select table_skewness('public.cpu1');  28.查询集群DN和CN节点 SELECT node_name,node_host FROM pgxc_node WHERE node_type='D'; SELECT node_name,node_host FROM pgxc_node WHERE node_type='C';  29.到执行后台进程的CN节点取消后台进程 SELECT pgxc_terminate_query(query_id);  30.查询分区表指定分区的记录数 --验证分区数据 SELECT count(*) FROM CPU1 PARTITION (default_part_1);  SELECT count(*) FROM CPU1 PARTITION (default_part_2);   31.查询后台进程 select coorname,query_id,query from pgxc_stat_activity where usename='dbadmin' and state='active';  32.指定表join顺序:  /*+ leading(("u" "uw" "ue" "ubl" "up")) */  33.指定表走的扫描索引:索引一次只能指定一个,但是可以多次指定 /*+ indexscan("u" "companyId") indexscan("ue" userextras_userid_index) */  34.join 的列上建立索引  35. 生成执行计划时间较长 set join_collapse_limit=4 
  • [集群&DWS] GaussDB(DWS) 创建dws集群失败,RdsCreatePortTask 创建端口失败
    【问题现象】集群创建在50%失败登录后台rms库,查看任务流,RdsCreatePortTask任务FAIL查看后台日志:Failed to get user agency token ; Get mo token by agency failed :场景一code :500 nova异常信息  :场景二getMOtokenByAgency httpCode:400 :场景三:DWSAccessVPC”【失败原因】   场景一:      管控面安装好,发放集群后,用户修改了租户信息,导致管控面数据库rms存储的租户信息和实际不一致   场景二:      规格配置时“可添加业务网络数量”配置不合理,应按指导设置为8 场景三:    没有创建委托“DWSAccessVPC”【修复措施】  场景一:查询租户id:select tenantId from rds_instance where name like '%集群名称%'根据租户id查询租户信息(realDomainName)和实际的租户进行对比:select * from rds_resttenant where readDomainId =#id# 查看租户名根据租户id更新realDomainName:update rds_restTenant set realDomainName='xxxx' where readDomainId='yy';  场景二:     在serviceOM修改规格,"可添加业务网络数量",按指导设置为8,重新下发集群 场景三:    首页--》系统--》委托管理--》删除委托“DWSAccessVPC”,如果删除失败,需要IAM协助处理    如果页面上无DWSAccessVPC”,则联系manageone侧1. 登录MO后台数据库,删除指定domainId下边的DWSAccessVPC委托。2. 点击一个已经创建好的集群名称,进入集群详情页面。3. 点击创建弹性公网IP,待页面弹出创建委托时,点击确认就好,不需要继续绑定弹性IP。4. 重新创建集群。
  • [生态空间] GAUSS-02187 -- Write to replicated table returneddifferent results from the Datanodes 可能出现的原因怎么解决?
    如题,在今天在查看数据库schema大小的时候,两套集群一个可以正常查询出结果,另一个报错如下图:这个问题该怎么排查呢?以下是查询sql:SELECT schema_name,      pg_size_pretty(sum(table_size)::bigint) as "disk space",     round((sum(table_size) / pg_database_size(current_database())) * 100,2)         as "percent(%)" FROM (      SELECT pg_catalog.pg_namespace.nspname as schema_name,          pg_total_relation_size(pg_catalog.pg_class.oid) as table_size      FROM   pg_catalog.pg_class          JOIN pg_catalog.pg_namespace               ON relnamespace = pg_catalog.pg_namespace.oid ) t GROUP BY schema_name ORDER BY "percent(%)" desc;
  • [生态空间] DWS autovacuum 触发条件怎么通过参数控制
    根据DWS产品文档中描述,涉及autovacuum 功能的参数有以下这些,请问autovacuum 触发条件是怎么计算的,如果要调整,降低触发阈值,怎么调整autovacuum                      ; autovacuum_mode                 ; autovacuum_max_workers          ; autovacuum_naptime              ; autovacuum_vacuum_threshold     ; autovacuum_vacuum_scale_factor  ; 
  • [开发应用] GaussDB(dws)跨用户执行存储过程所需要的最小权限
    GaussDB(dws)数据库中有多个用户,现在需要使用A用户来调用B用户的存储过程任务。其中B用户的存储过程中涉及对B用户下某张表分区的增删操作,请问A用户能够调用B用户这个存储过程所需要的最小权限是什么?谢谢!!!
  • [其他] dws管控面升级到820后,性能监控不显示
    【问题现象】dws管控面升级到820后,性能监控不显示【问题版本】dws820【排查步骤】1.登录dms数据库;查看指标上报最新时间发现部分指标上报时间不对select to_char(to_timestamp(max_ctime / 1000), 'YYYY-MM-DD HH24:MI:SS'), *from dms_mtc_max_ctimewhere cluster_id = 'c47a0fa2-96ca-4f0b-b479-5801a145698b' order by max_ctime asc;数据每天都会采集的如果时间不是最新的时间;那就有问题2.登录dms-collection查看dms-collection.log日志搜索报错发现插入数据的sql执行失败3.登录dms数据库执行报错的sql;报错:inserted partition key does not map to any partition此版本dms应用了分区表提高sql执行效率,由于dms依赖的数据库版本不支持自动分区函数;只能调用定时任务来创建分区;报错显示:插入的分区键没有映射到任何分区【恢复方法】:检查表的分区;\d+ 表名发现表分区没有继续创建;导致数据插入失败修复表分区:Select * from QRTZ_TRIGGERS WHERE JOB_GROUP = 'increasePartJob' ;UPDATE QRTZ_TRIGGERS SET TRIGGER_STATE = 'WAITING'WHERE TRIGGER_NAME = 'increasePartJob';完成重启dms-collection容器【根因】DMS 使用的存储数据库存在内核缺陷 930版本的分区表特性创建分区会触发内核事务ID上涨无法回收的问题 后续需要执行规避指南 将分区表回退为普通版【规避方法】1.登录dms数据库主节点判断方法:ip a 有浮动ip就是主节点2.将 的sql文件上传到opsadmin账户的tmp目录下chmod 777 文件名切换到dbadmin的目录下gsql -p 8635 -U dbadmin -WManager@123 -d dms -f 路径文件名获取回退sql文件请联系华为工程师
  • [开发应用] GaussDB(DWS)用户密码如何设置永久有效
    GaussDB(DWS)用户密码如何设置永久有效,需要执行的具体代码是什么?谢谢!!!
  • [运维管理] GaussDB(dws)不同用户间执行存储过程需要哪些权限
    GaussDB(dws)数据库中有多个用户,现在需要使用A用户来调用B用户的存储过程任务。B用户的存储过程创建时会默认赋EXECUTE权限给A用户。但A用户执行B用户下的存储过程时,其中分区处理的部分会报错:删除分区会报错:must be owner of relation B用户。truncate分区数据时会报错:permission denied for relation B用户。请问:1、使用A用户来调用B用户的存储过程时,存储过程中的代码执行用户不应该是B用户么?2、通过A用户来调用B用户的存储过程来对表分区进行操作时,都需要满足哪些权限?谢谢!!!B用户的存储过程中有分区处理的逻辑如下:
  • [SQL] gaussdb(DWS)业务咨询之正则匹配中文字符
    问题背景1.业务咨询数据库如何进行中文字符匹配 2.正则匹配中文字符不正确问题原因业务数据库字符集编码使用的是sql_ascii导致排查过程postgres=# SELECT regexp_substr('冀A12345','(^[冀]{1}[A-Z]{1}[0-9]{5}$)'); regexp_substr --------------- (1 row) postgres=# show server_encoding; server_encoding ----------------- SQL_ASCII (1 row) postgres=# \c utf8_db utf8_db=# SELECT regexp_substr('冀A12345','(^[冀]{1}[A-Z]{1}[0-9]{5}$)'); regexp_substr --------------- 冀A12345 (1 row) utf8_db=# show server_encoding; server_encoding ----------------- UTF8 (1 row) 可以看到数据库字符集编码为 SQL_ASCII会导致中文匹配不到解决方案目前只支持创建数据库的时候指定字符集,如果数据库已经指定了字符集需要重新创建数据库 【数据库创建时字符集选择需慎重】
  • [开发应用] 存储过程分析困难
    DWS版本: 8.1.1问题现状:客户环境重度使用存储过程,且存储过程逻辑复杂,动辄上千行代码,部分存储过程甚至需要跑10+小时。因为存储过程没法像单条语句那样可以通过explain查看执行计划进行分析调优;当集群卡顿出现卡顿时,无法明显判断是否由于存储过程内部刚好执行到了某条烂SQL导致,问题定位困难。请问下DWS是否有方法可定位当前存储过程执行到哪条语句,比如系统表、系统视图、后台日志等途径?或者针对以上痛点,是否有更好的解决方案(例如开发人员在存储过程编码时在每个关键业务处理环节加一句写日志表的操作,用于记录每个步骤的完成时间)?
  • [开发应用] DWS资源负载管理-资源池active_statements疑问
    基本信息 DWS版本: 8.1.1;静态负载管理请问下资源池的并发控制参数active_statements是针对单CN还是全局的?
  • [其他] terminating connection due to administrator command
    【问题描述】:执行sql语句经常报报:terminating connection due to administrator command【排查过程】:通过查看报错的cn日志,日志显示报错时间点,pg_terminate_backend查杀的线程是一个启动包,此线程第一次执行的时候,出现了断连的情况Connection reset by peer,无法接收到远端的请求包,同时日志中显示session unused timeout,超时中断了这个线程,这个请求包没有接收完,就调用了pg_terminate_backend函数来kill掉这个线程,一直执行这个操作,日志里面也报了很多这个错,通过执行以下两个方法观察1. 网络流量的通信参数comm_usable_memory设置不合理(根据产品文档计算应是3.5G,目前设置值为2000M),需调整2. 调整session_timeout参数通过查看线程号,调整观察后,问题再次出现。再次查看查杀线程源头,发现是DRS服务查杀了DWS的线程拉drs的人确认,是他们一个已知问题,查杀错误导致的【问题根因】:DRS服务已知问题,DRS服务会回收链接,回收链接同时会调用pg_terminate_backend(pid)查杀函数,查杀函数线程是DWS服务这边的【解决办法】:已联系DWS服务的人,drs的修改相关参数规避
  • [其他] 集群连续几天只读
    【问题描述】:业务连续几天报错(只读、DN内存不足),请帮忙看下日志,找到引起故障的SQL第一张截图 报只读错误,第二章截图 DN内存不足,请查看对应时间点日志,能否找出引发问题的SQL【排查过程】:1.排查20号和23号各触发一次只读,每次都是一个节点的同一个磁盘;2.该磁盘CN目录占用较大,GS_WLM_SESSION_INFO表和该表的附属toast表占用1.1T,导致比正常节点磁盘使用率高33%左右;3.分析当时触发只读的日志,当时下盘的语句有怀疑点,对比两次的语句不太一致,正在和业务进一步确认;【解决办法】:1.计划清理GS_WLM_SESSION_INFO表数据,关闭topsql;2.已truncate GS_WLM_SESSION_INFO表,关闭topsql,磁盘,空间已下降3.和业务沟通,后续推动收编至813;
  • [生态空间] GaussDB 8009集群如果各个节点NTP都配置为第三方服务器ntp会有什么影响?(正常是OMS配置第三方NTP,节点向OMS同步时钟)
    GaussDB 8009集群如果各个节点NTP都配置为第三方服务器ntp会有什么影响?(正常是OMS配置第三方NTP,节点向OMS同步时钟)
  • [其他] GaussDB(DWS)业务报错之Failed to connect ** control channel disconnect
    问题现象1.业务执行语句报错ERROR:dn_6001_6002:Failed to connect dn_6003_6004,detail:1047 control channel disconnect 2.报错涉及的DN未重启,且执行带stream算子语句必现问题原因集群参数comm_max_stream不一致导致(CN之间参数要保持一致,DN之间参数要保持一致DN包括主备从)CN和DN之间可以不一致,建议参数请查看产品文档comm_max_stream参数设置。排查过程1.业务语句报错,后台查看DN未发生重启 2.业务创建表正常,业务执行语句带stream算子时就会出现报错。简单的select * from limit 1;也正常执行。 3.使用命令批量检查gs_guc check -Z coordinator -Z datanode -N all -I all -c "comm_max_stream" 4.如果第三步检查DN或CN参数完全一样则需后台进一步确认,查看正常DN和报错DN的comm_max_stream参数不一致。解决方法以下命令按实际进行修改参数设置 设置CN参数的命令 gs_guc set -Z coordinator -N all -I all -c "comm_max_stream=指定值" 设置DN参数的命令 gs_guc set -Z datanode -N all -I all -c "comm_max_stream=指定值" 参数comm_max_stream修改后需要重启集群
总条数:2749 到第 页
上滑加载中