• [其他] 【8.0.3】【Insight】【日志收集】serviceOM数仓界面收集DWS日志,报错500 Internal ERROR
    1. 管控面版本 :     HCS 8.0.3 , 430版本。2. 问题现象:    使用serviceOM数据仓库服务页面收集实例日志,右上角报错500,接口返回如下。3. 原因:    DWS安装过程中,工步存在BUG,Insight数据库中的namespace表里,ak,sk相关信息没有录入,需要手动录入。4. 解决方法:    根据dwscontroller的参数的logCollect.obsBucket,logCollect.userAK,logCollect.userSK的值分别更新insight数据库的logcollect_obs_bucket,logcollect_user_ak,logcollect_user_sk值即可。
  • [运维管理] GaussDB A 用户权限问题
    GaussDB A 集群上有两个用户ods和ifrs17。正常这两个用户是互不关联的,在业务测试中发现ods用户可以查询ifrs17用户schema下的所有表。但是有看过这两个用户的角色是没有相应权限的。执行\du 发现如下打印,看了产品文档没有这方面的介绍,想知道如下这个图中各个含义。
  • [实践系列] GaussDB(DWS)实践系列-ClickHouse->GaussDB(DWS)迁移
    在项目交付中经常会遇到各种异构数据库间的迁移替换,该场景重度依赖迁移工具完成同步。目前华为云上没有现成的数据迁移工具能够支持Clickhouse到GaussDB(DWS)的迁移,本文提供一种思路,通过Spark代码完成ClickHouse中表数据读取,并写入到GaussDB(DWS)中完成迁移。样例参考代码如下:#! /bin/bash/env python3from pyspark.sql import SparkSessionfrom datetime import datetime, timedeltaimport sysdef ch2dws():    startTime = datetime.now()    print("===== {}任务开始时间{}:".format("order2dws", startTime.strftime("%Y-%m-%d %H:%M:%S.%f")))    spark = SparkSession.builder.master("yarn").appName("ch2dws").getOrCreate()    sql = """    select     kid    , ym    , ymareaid    , amount    , order_total    from xxxxx.xxxxxx oia     where orderday='2021-06-03'    limit 3000    """    print(sql)    df = spark.read.format("jdbc").options(        url="jdbc:clickhouse://xxxxx:8123/xxxxxxxx",        driver="ru.yandex.clickhouse.ClickHouseDriver",        dbtable="(%s) tp" % sql,        user="xxxxxxxxx", password="xxxxxxxx").load()    #  append    df.write.mode(saveMode="overwrite") \        .format("jdbc") \        .option("driver", "org.postgresql.Driver") \        .option("url", "jdbc:postgresql://xxxxxxxxx:8000/xxxxxxxxxx") \        .option("useSSL", "false") \        .option("user", "xxxxxxxxxx") \        .option("password", "xxxxxxxxx") \        .option("batchsize", 10000) \        .option("dbtable", "xxxxxxxxxx") \        .option("isolationLevel", "NONE") \        .option("truncate", False) \        .save()    spark.stop()    endTime = datetime.now()    print("任务结束时间:{},总耗时{}".format(endTime, timedelta(seconds=(endTime - startTime).total_seconds())))if __name__ == '__main__':    # date_input = [it for it in sys.argv[1:]]    ch2dws()
  • [实践系列] GaussDB(DWS)实践系列-日常硬件巡检指导
    GaussDB(DWS)实践系列-日常硬件巡检指导一、 操作场景日常运维过程中,运维人员可以通过硬件(服务器、电源、硬盘)指示灯状态进行巡检,以判断硬件是否存在故障。其中指示灯绿色常亮代表正常状态,其余情况可登录iBMC系统检查是否有告警,并联系硬件工程师定位处理。二、 iBMC系统概述iBMC智能管理系统是针对服务器的系统监测和管理软件。iBMC智能管理系统支持进行服务器监测、故障定位、系统管理和数据配置等功能,运维人员可以通过的WebUI界面登录进行服务器的硬件巡检。告警&事件功能介绍:通过“告警&事件”界面,可以查看设备当前未处理的告警,并查看和搜索服务器产生的各种系统事件。三、 告警信息查看操作1、登录iBMC界面在浏览器地址栏输入 BMC IP 地址,例如输入200.1.5.177跳转到登录界面。输入账号密码单击“登录”,默认登录密码为Administrator/Admin9000(运维人员基本都有)。2、成功登录后,显示“首页”界面3、首页界面会显示告警统计信息根据告警级别分为紧急、严重和轻微3类,上图中可以看到该服务器存在一个轻微告警,点击该图标,查看具体告警信息。或者首页点击 “维护诊断” à告警&事件查看。点击“详情”,可以看到具体处理建议如下4、告警参数说明四、 注意事项通过WebUI进行界面操作,最多只能有4个用户同时登录。默认情况下,系统超时时间为5分钟,即在5分钟内,如果您未在WebUI界面执行任何操作,系统将自动登出,此时需输入用户名和密码重新登录WebUI界面。连续5次输入错误的密码后,系统将对此用户进行锁定。等待5分钟后,方可重新登录,亦可通过管理员用户在命令行下解锁。五、 拓展查看其他iBMC相关帮助文档,点击首页图标。进入到帮助文档界面。
  • [迁移系列] GaussDB(DWS)实践系列-MySQL->GaussDB(DWS)常用语法对照表
    GaussDB(DWS)实践系列-MySQL->GaussDB(DWS)常用语法对照表在项目交付中,经常遇到不同数据库间的数据迁移,本文针对MySQL->GaussDB(DWS)的常用语法兼容性进行了梳理,汇总整理语法对照表,可以参考使用。序号分类MySQL语法GaussDB(DWS)适配语法说明1日期类型datetime/datetime(0)timestamp without time zonedatetime是没有时区的时间戳,而timestamp是带时区的时间戳,因此,在转换成DWS中的数据类型时,datetime需要转为timestamp without time zone,timestamp转为timestamp with time zone;改写样例:Create Table order_info (order_date datetime);替换为Create Table order_info (order_date TIMESTAMP WITHOUT TIME ZONE);2timestamptimestamp with time zone3数值类型tinyintsmallintDWS与ADB中均存在tinyint这种数据类型,但是,在ADB中其范围是 -128~127,而DWS中为0~255,两者的数据范围是不一致的。4int(11)/bigint(20)/tinyint(4)int/bigint/tinyintDWS中去掉长度约束5AUTO_INCREMENTAUTO_INCREMENT自增列修改为serial类型,bigint对应bigserial,int对应serial,SMALLINT 对应SMALLSERIALAUTO_INCREMENT对应BIGSERIAL/SERIAL/SMALLSERIAL改写样例:Create Table market_info('windowId' bigint(20) NOT NULL AUTO_INCREMENT);替换为Create Table market_info(windowId bigserial NOT NULL);6doubledouble precisiondouble类型对应float类型;改写样例:Create Table order_info ( live_id varchar(50), tag_price double );替换为Create Table order_info ( live_id varchar(50), tag_price double precision ) ;7float(10, 6)float(16) 8字符类型string类型text类型改写样例:Create Table di_corp_replay_prd_indic_d ( live_id varchar(50)  , tag_price string);替换为Create Table di_corp_replay_prd_indic_d ( live_id varchar(50)  , tag_price text ,) ;9longtexttextDWS使用text代替longtext,Mysql longtext 0-4Gb,DWS text最大为1G-8023B(即1073733621B)10列注释列注释是在创建表语法的每一列之后,例如create table order_info('id' bigint comment '主键');列注释语句需要单独使用comment语句添加,例如create table order_info(id bigint);comment on column order_info.id is '主键';改写样例:create table order_info('id' bigint comment '主键');替换为create table order_info(id bigint);comment on column order_info.id is '主键';11表注释建表语句中可以加入表注释,例如Create Table 'order_detail' ( 'corpid' varchar(50))  COMMENT='商家订单异常明细';表注释需要单独写在表结构之外,例如Create Table order_detail ( corpid varchar(50)) DISTRIBUTE BY HASH(corpid);comment on table order_detail is '商家订单异常明细';改写样例:Create Table 'order_detail' ( 'corpid' varchar(50))  COMMENT='商家订单异常明细';替换为Create Table order_detail ( corpid varchar(50)) DISTRIBUTE BY HASH(corpid);comment on table order_detail is '商家订单异常明细';12分页select * from test limit 1,3;select * from test limit 3 offset 1;分页语法用 limit+offset 改写替换13日期函数date_format()to_char()改写样例:select date_format(now(), '%Y/%m/%d %H:%i:%s');替换为select to_char(now(),'YYYY-MM-DD HH24:MI:SS');14datediff()EXTRACT()改写样例:select datediff(date '2003-05-03',date '2003-05-02');替换为SELECT EXTRACT(EPOCH FROM (date '2003-05-03'- date '2003-05-02'))/60/60/24;15date_sub()替换为sysdate - interval改写样例:select date_sub(now(),interval 1 hour);替换为select sysdate - interval '1 hour';16date_add()替换为sysdate + interval改写样例:Select date_add(now(),interval 1 hour);替换为select sysdate + interval '1 hour';17TIMESTAMPDIFF()EXTRACT()改写样例:select TIMESTAMPDIFF(second,'2017-07-06 20:00:30','2017-07-06 20:01:00') ;替换为SELECT EXTRACT(EPOCH FROM (timestamp '2017-07-06 20:01:00'- timestamp '2017-07-06 20:00:30'));18UNIX_TIMESTAMP()EXTRACT()改写样例:select UNIX_TIMESTAMP(substr(adddate(NOW() , INTERVAL -1 MONTH),1,10)) * 1000;替换为SELECT EXTRACT(EPOCH FROM substr(now() - INTERVAL '1 MONTH',1,10))*1000;19MINUTE()date_part()改写样例:SELECT MINUTE("2017-06-20 09:34:00");替换为SELECT date_part('minute', timestamp '2017-06-20 09:34:00');20now()sysdate改写样例:select now();替换为select sysdate;21str_to_date()to_date()改写样例:select str_to_date('20201127193000','%Y%m%d%H%i%s');Oracle兼容模式替换为:select to_date('2020-11-27 19:30:00','YYYY-MM-DD HH24:MI:SS');TD兼容模式替换为:select to_timestamp('2020-11-27 19:30:00','YYYY-MM-DD HH24:MI:SS');22current_timestamp()sysdate改写样例:select current_timestamp();替换为select sysdate;23adddate()替换为sysdate - interval改写样例:select adddate(NOW() , INTERVAL -1 MONTH);替换为select sysdate - interval '1 month';24截取时分秒date_format()substr()改写样例:select date_format(date_add(now(), interval - 5 minute),'%H:%i:%S');替换为select substr(sysdate - interval '5 minute',11,14);25超长表名MySQL允许表名超过64位DWS表名长度不允许超过64位,超过部分被截断;DWS表名长度不允许超过64位,超过部分被截断;26BROADCAST表BROADCAST表复制表改写样例:Create Table di_corp_replay_prd_indic_d ( live_id varchar(50)  , tag_price double ,)DISTRIBUTE BY BROADCAST ;替换为Create Table di_corp_replay_prd_indic_d ( live_id varchar(50)  , tag_price double ,)distribute by REPLICATION;27语法替换if(1=2,'true','false');替换为case when改写样例:select if(1=2,'true','false');替换为select case when 1=2 then 'true' else 'false' end;28UUID()sys_guid()改写样例:select UUID();替换为select sys_guid();29ifnull()nvl()改写样例:select ifnull(null,'true');select ifnull(1,'true');替换为select nvl(null,'true');select nvl('1','true');30Group_concat()string_agg()改写样例:select id,group_concat(name) from aa group by id;替换为select id,string_agg(name,',') from aa group by id;31distinct id,namedistinct(id,name)改写样例:select distinct id,name from aa;替换为select distinct(id,name) from aa;32clustered  key不支持,去掉改写样例:Create Table copy_di_distributor_buyer_contribution_ranking_v2 ( shop_id varchar , distributor_id varchar , buyer_id varchar , date_type bigint , dw_insert_time varchar , clustered key clustered_key(shop_id ASC,distributor_id ASC,date_type ASC,order_amount_rank ASC), primary key (shop_id,distributor_id,date_type,buyer_id)) DISTRIBUTE BY HASH(shop_id,distributor_id,date_type);替换为Create Table copy_di_distributor_buyer_contribution_ranking_v2 ( shop_id varchar , distributor_id varchar , buyer_id varchar , date_type bigint , dw_insert_time varchar , primary key (shop_id,distributor_id,date_type,buyer_id)) DISTRIBUTE BY HASH(shop_id,distributor_id,date_type);33REPLACE 实时覆盖merge into改写样例:REPLACE INTO edw_akapp_order_info SELECT * FROM outer_edw_akapp_order_info;替换为merge into edw_akapp_order_info a using outer_edw_akapp_order_info bon a.p_order_id = b.p_order_id and a.cartproductid = b.cartproductid;34单引号转义 '\'改写样例:and live_name in("【超值】英格莱恩/Ingram's美妆0404", "【美配29】科颜氏 Kiehl's美妆1229", "【必播】爱呵护I'vebaby纸尿裤&拉拉裤0730", "【森马集团】THE CHILDREN'S PLACE童装0718")替换为and live_name in ('【超值】英格莱恩/Ingram\'s美妆0404','【美配29】科颜氏 Kiehl\'s美妆1229','【必播】爱呵护I\'vebaby纸尿裤&拉拉裤0730','【森马集团】THE CHILDREN\'S PLACE童装0718')35字段命名字段名支持以数字开头dws字段名不能以数字开头,需加双引号改写样例:CREATE TABLE IF NOT EXISTS order_info(school TEXT,grade TEXT,class TEXT,20_50w BIGINT,datetime float) DISTRIBUTE BY HASH(school);替换为CREATE TABLE IF NOT EXISTS order_info(school TEXT,grade TEXT,class TEXT,"20_50w" BIGINT,datetime float) DISTRIBUTE BY HASH(school);36语法规范‘! =’中间可以有空格‘! =’中间不能有空格改写样例:and order_source ! = 'all'替换为and order_source != 'all'
  • [开发应用] 【GaussDB产品】Exception捕获异常时,无法捕获到语法错(Syntax error)
    错误SQL:BEGIN...SELECT  field01 as f1, field02 ass f2 FROM table_name;EXCEPTION   WHEN OTHER THEN   DBMS_OUTPUT.PUT_LINE('错误描述:'|| SQLERRM)END;/或者EXCEPTION   WHEN SYNTAX_ERROR THEN         DBMS_OUTPUT.PUT_LINE('错误描述:'|| SQLERRM)   WHEN OTHER THEN        DBMS_OUTPUT.PUT_LINE('错误描述:'|| SQLERRM)如上SQL,并不会进入到EXCEPTION代码块中,请问怎么解决注意 : SQL的错误在于起别名 AS 关键字 写成了ASS
  • [生态空间] 【Gaussdb A 8005、DWS8.1】【topsql功能】topsql查看可不可以赋权给普通用户
    如标题:topsql查看可不可以赋权给普通用户,并且如果可以的话,需要怎么赋权?
  • [问题求助] 【数据平台】【数据仓库】为什么园区方案使用gaussdb100作为数据仓库
    1、新版本的cube方案中为什么使用gaussdb100 OLTP的库作为数据仓库?怎么不继续使用早期私有云方案的gaussdb 200 (好像现在叫gaussdb A)?2、Flink 为什么采用了边缘Flink的形式,不用FusionInsight HD 安装flink?3、Datatool 是阉割了部分功能的DAYU吧。还望专家 给解答一下。
  • [生态空间] GaussDB 8.0.0 数据库突然不能进行常规操作 DDL DML
    【功能模块】  GaussDB 使用【操作步骤&问题现象】1、登录数据库后执行 create table 语句 2、一直不能返回执行成功3、集群资源都是闲置状态 ,此集群是测试机,只有我自己在用。【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 【大厂内参】第8期:8大场景系列玩转数仓运维,做个不秃头的DBA
    【摘要】 为了让DBA们通宵加班找故障将成为过去式,减少运维工作量,我们针对华为云GaussDB(DWS)的运维整理了八大系列内容,帮您解决数仓和应用技术转型中遇到的实际问题,让DBA玩转数仓运维“不秃头”。  每一个奋斗在前线的DBA似乎运气都不太好,他们都经历过的诡异事件大概率是:逢年过节必出故障。眼看着要放假了,又接到故障通知,只好通宵加班找问题。没问题的时候可能大家都不会想到你,一出问题就先拿运维试问,于是每逢佳节便出现拜数据仓库的戏谑图片。  为了让DBA们加班找故障成为过去式,减少运维工作量,我们选取容灾、负载管理、数据上云等典型运维场景,围绕华为云GaussDB(DWS)多源数据融合分析、计算/存储资源规划、业务连续性的数仓高可用等核心技术,流式数据入库、集群管理、时区调整、扩容等运维技巧,帮助您解决实际业务运维场景中遇到的问题,让DBA玩转数仓运维“不秃头”。负载管理:让“笨”的数仓“聪明”起来  从四个核心技术为你解密,GaussDB(DWS)负载管理功能如何做好计算/存储资源的划分,让你的数仓“聪明”起来。  GaussDB(DWS)负载管理核心技术解密一:全景图及解决的场景  GaussDB(DWS)负载管理核心技术解密二:白话历史资源监视  GaussDB(DWS)负载管理核心技术解密三:工作负载管理测试分析  GaussDB(DWS)负载管理核心技术解密四:工作负载计划解密保障业务连续性,GaussDB(DWS)高可用有妙招  GaussDB(DWS)所有内部组件CN、DN、GTM、CM等采用多活或主备设计,通过集群管理进行故障检测和切换。在硬件层面,除了最基本的宕机、断网的直接故障外,GaussDB(DWS)还针对夯死、慢节点、亚健康等僵而不死的复杂场景,做了大量的建模和针对性优化,能够实现故障的准确探测和自愈。并且还提供了双集群容灾能力,通过跨AZ、跨Region的物理复制,实现异构集群容灾。  GaussDB(DWS)高可用之数据复制  GaussDB(DWS)高可用之备机重建  GaussDB(DWS)高可用之CN&GTM组件高可用介绍  GaussDB(DWS)高可用之主备从HA技术  GaussDB(DWS)高可用之单点故障业务不中断  华为云GaussDB(DWS)数据仓库以2048大规模节点通过信通院评测认证全方位案例解读数仓数据融合  GaussDB(DWS)采用一套SQL引擎,支持Oracle、MySQL、HDFS等多源数据融合分析,并通过算子下推、加速集群等技术对分析性能进行了大幅优化,在数据免搬迁的前提下,实现了跨源数据免搬迁、高效分析。  GaussDB(DWS)数据融合:提升企业掌握数据之力数据上云是趋势,DBA掌握云端运维是关键  数仓未来是云,越来越多企业面临数仓和应用技术转型,云端运维成数仓运维需要掌握的核心。DWS提供了简单易用的Web管理控制台,帮助您快速创建数据仓库集群,轻松执行数据仓库管理任务。  GaussDB(DWS)云端运维系列手敲代码实践展示GaussDB(DWS)流式数据入库的三种方式  随着金融风控,以及IoT场景对数据实时处理分析的诉求,DWS实时数仓时序数据单机入库性能达10w/s,流数据达60w/s,并能够线性扩展,并且GaussDB(DWS)流式数据可通过Python、C和Java三种接口,让入库全程无忧。  GaussDB(DWS)流式数据入库实践[数仓性能调优从掌握最基本命令开始,十八般武艺轻松搞定数仓性能调优]  数仓性能调优是数仓应用开发和迁移过程中的关键步骤,在整个项目实施过程中占据很大的份量。它没有明确的衡量标准和对错之分,考验的是资深一线技术人员的隐式技能。开发者可通过该系列文章了解数仓的基本原理,然后结合调优思路,对各个调优技巧进行深入的学习。  数仓性能调优必读:从系统级到SQL级,带你进阶为性能调优高手一手掌握GaussDB(DWS)集群运维  GaussDB(DWS)现网运行的PB级数据量以上的大集群已经有10+个,最大商用单集群规模达到240节点。在产品能力上,GaussDB(DWS)可扩展至2048节点,并且该规模在12月已通过信通院的权威评测。另外,还实现了逻辑集群特性,一套物理集群可针对不同业务划分多个逻辑集群,数据相互隔离,支持跨逻辑集群的计算资源调动。通过逻辑集群,可以进一步扩展集群的规模。该系列从基本概念到核心功能,带你了解集群管理、通信等方面的应用之道。  GaussDB(DWS)集群管理系列  GaussDB(DWS)集群通信系列  GaussDB(DWS)逻辑集群系列这份GaussDB(DWS)基础运维知识,你要收藏  从理论到升级案例,带你掌握GaussDB(DWS)升级、扩容面临的疑难问题。  GaussDB(DWS)升级问题定位指南  GaussDB(DWS)扩容问题定位指南  GaussDB(DWS)时区相关知识  数字化浪潮汹涌而来,在5G、云、AI加持下,数仓不断升级演进,激发千行百业的创新和数字化转型。企业DBA更应该从传统的“数据保管人和数仓守护者”角色进行转变。在数仓的易操作、便捷维护等基础上,DBA需要更多地理解业务,用数据回答来自业务方面的诉求,而不仅仅是维护数仓的健康稳定运行,这真的是DBA们的机遇所在。本合集为《大厂内参》008期,欢迎大家持续关注。大厂内参根据开发者普遍关注的热门技术领域,汇编实践精华内容。从业务场景选型,应用案例分析,到前瞻趋势预测。以专题的形式,深度解读华为云核心技术,分享一线工程师的实战经验。【第一期】敏捷&Devops:80+篇实践干货分享,深度解读敏捷&DevOps如何革新软件开发【第二期】数据库:从数据库科普到核心技术解读、上云案例分享,全方位剖析云数据库【第三期】云服务器:选型解读+案例分享:云服务器“软硬技术”全公开【第四期】人工智能:海量实战经验教你零门槛进场AI开发,无成本负担玩转AI应用【第五期】云原生:读懂云原生2.0,看它如何重塑业务开发架构【第六期】云安全:Get防范云安全的必杀技,学会构建云上完整安全体系【第七期】物联网:“端边云”IoT全栈技术大揭秘,开发实战指南带你轻松上手IoT
  • [生态空间] GaussDB A 8.0.0.1版本 数据通道复制产生的数据 是指什么?
    【操作步骤&问题现象】在集群中,DN有多个。每个DN存储了一部分数据。如果DN无高可用方案,则故障时会导致该实例上的数据无法访问。因此GaussDB A对DN提供了高可用方案:主、备、从备。DN主、备、从备间的工作原理如下:主、备DN同步数据期间,如果主DN突然故障不可用,备DN会升为主DN。在原主DN恢复前,新升为主的DN会将数据日志同步到从备DN。原主DN恢复后将成为备DN,并且会使用“从备DN”上的数据日志恢复异常期间的数据。也就是说从备DN永远只作为从备使用,不会因为主DN或备DN故障而升级为主DN或备DN,从备只存放备DN故障时同步到从备的Xlog数据和数据通道复制产生的数据。数据通道复制产生的数据 是指什么?
  • [生态空间] 版本gaussdb 8.0.0.1 当主实例或备实例故障时
    版本gaussdb 8.0.0.1 当主实例或备实例故障时从备实例开始工作,问题为什么从备实例目录数据增长速度这么快?是因为会同步历史数据吗?如果不是怎么保证的双副本在线?那些动作会影响从备数据增长? 如果是请简单说明这么设计的理由?
  • [生态空间] GaussDB 200 6.5.1 使用截取函数left展示截取字符
    在GaussDB 200 6.5.1 集群中使用left(str text, n int)进行字符的截取,通过查询可获得截取到的字符,但是诉求是要用查询到的结果去统计sql中hphm对应值的汉字部分。如“京”、“晋”等。想知道这个要怎么关联?SQL语句如下:查询结果如下:
  • [生态空间] 【DWS产品】数据倾斜相关: 是否有方法访问到高斯表的 dead 记录行 ?
    背景:  通过 select nodename, dnsize from table_distribution('ods','ods_rf_t3_result_t') order by nodename;   方式查看到行存hash表某个dn 的size是其他dn的20倍, 但是通过  SELECT a.count,b.node_name FROM (SELECT count(*) AS count,xc_node_id  FROM   ods.ods_rf_t3_result_t GROUP BY xc_node_id) a, pgxc_node b WHERE a.xc_node_id=b.node_id ORDER BY a.count desc;    查看每个 dn 上的记录都几乎差不多 (45万左右),  hash键值是 Primary key 。 分析: 唯一一种解释就是这个异常大(size大)的 DN 上的数据做了大量更新或删除, 但是用户给出的业务特征是, 每天会更新或删除几百行,没有发现大量一次性更新很多的情况 。 所以想知道一下,是否有查询 dead 数据行的方法  ?  可以查出到底是什么操作导致了这种问题 。之所以要这么纠结, 因为用户如果是一次性动作,每天的所谓例行的vacuum full 可能还没来得及做就已经慢下来了  。  如果知道了导致这种问题的业务行为, 就比较好规避这种问题了。      另外,数据倾斜的概念是不是应该是这样  ?     数据倾斜 -- 针对Hash表(无论行表/列表),如果分布列选择不当,会导致数据(行数)在各个DN分布不均匀而导致数据倾斜,特别注意这里的行数不仅仅是只Live的行数,还包括Dead的行数,所以这一点上,又和脏页有了交集,需要结合脏页才能判断。复制表不存在这个问题。
  • [实践系列] GaussDB DWS中的内存资源配置实践
    GaussDB提供了资源负载管理手段,来均衡任务对系统资源的利用。资源负载管理实现如下功能:通过创建并管理租户,实现按租户进行系统资源(CPU、内存、IO、存储空间)的隔离和作业的异常处理。通过限制集群和资源池允许运行的并发量,超出并发量的作业进行排队,以保证重点业务的运行,防止并发过多导致的性能下降。通过优先级控制实现对资源的有效调度,高优先级的作业得以优先执行。支持多维度的资源监控视图,可以查看作业的实时资源记录和历史资源记录。相关概念资源管理GaussDB DWS对于系统资源的管理范围包含CPU资源、内存资源、IO资源和存储资源。通过对系统的资源进行合理的分配,避免发生资源的不合理占用导致系统运行效率下降或者引发系统运行问题。负载管理GaussDB DWS通过对业务的并发控制,实现系统负载的均衡。避免业务间争抢资源,实现所有作业的和谐共处,达到资源利用最优。控制组控制组(Cgroups)是control groups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组所使用的物理资源(如:CPU、内存、IO等)的机制。如果一个进程加入了某一个控制组,该控制组对Linux的系统资源都有严格的限制,进程在使用这些资源时,不能超过其最大限制。更多Cgroups的原理介绍,请查看相关操作系统的产品手册。资源池资源池(Resource Pool)是GaussDB提供的一种配置机制,用于对主机资源(内存、IO)进行划分并提供SQL的并发控制能力。资源池通过绑定Cgroups对资源进行管理。用户通过绑定资源池可以实现对其下作业的资源负载管理。本文简单介绍GaussDB内存资源管理的配置部分。内存是GaussDB 运行的一个关键资源,如果能够有效利用,可以提升业务查询性能。内存管理分为如下三个类型:实例级别的内存管理通过设置系统级别的GUC参数“max_process_memory”,可以对数据库实例的最大可用物理内存进行管理。当作业申请的内存超过了给定限制时,会因为内存申请失败触发异常处理。根据实例在执行业务时的不同分工,需要的内存大小也不同。 资源池级别的内存管理通过设置资源池的参数“MEM_PERCENT”,可以对资源池的内存进行管理。作业级别的内存管理通过设置session级别的GUC参数“query_mem”,可以对作业可用内存进行管理。对内存资源管理进行配置的前提条件是逻辑内存管理功能已经开启,即参数enable_memory_limit已设置为“on”。如果此参数为“off”,则通过gs_guc set -Z coordinator -Z datanode -N all -I all -c "enable_memory_limit=on"来开启逻辑内存管理功能。参数描述如下:-N all:表示集群所有主机。-I all:表示实例主机中所有的实例。enable_memory_limit:为逻辑内存管理模块的开关。coordinator/datanode:表示执行该配置的实例类型为CN/DN实例。通过下列步骤可以配置数据库实例级的内存管理:1、设置数据库DN实例的最大可用内存。max_process_memory为实例的最大可用内存,datanode表示执行该配置的实例类型为DN实例。      gs_guc set -Z datanode -N all -I all -c "max_process_memory=32GB" 2、设置数据库CN实例的最大可用内存。根据经验,推荐将CN的最大可用内存设置为与DN一致,coordinator表示执行该配置的实例类型为CN实例。      gs_guc set -Z coordinator -N all -I all -c "max_process_memory=32GB" 3、重启集群并执行作业。     gs_om -t stop && gs_om -t start通过下列步骤可以配置资源池级别的内存管理:修改资源池“resource_pool_a1”的内存比例为可用内存大小的20%,即设置MEM_PERCEN的取值为20。多租户场景下:MEM_PERCENT的取值设置为"x"(1<=x<=100),表示设置资源池使用的内存大小为可用内存大小的"x%",查询作业将使用给定的内存来运行。非多租户场景下:当MEM_PERCENT参数取值为0时,查询作业的内存不受限。当MEM_PERCENT参数取值为"x"(1<=x<=100)时,表示设置资源池使用的内存大小为可用内存大小的"x%",查询作业将使用给定的内存来运行。ACTIVE_STATEMENTS取值范围为 -1 ~ INT_MAX, 默认值为10,建议使用该默认值。当设置为0或者-1时,内存不受限制。通过下列步骤可以配置作业级的内存管理:1、设置query_mem为500MB     set query_mem='500MB';2、当结果显示为如下信息,则表示设置成功。     SET3、执行作业。     如果query_mem超过资源池可用内存的上限或者低于256MB时,query_mem将不起作用,作业依然使用work_mem。查看内存资源的配置信息           查询实例级别的内存设置show max_process_memory;查看资源池级别的内存设置select * from pg_resource_pool;查看作业级别的内存设置show query_mem;内存监控         查看当前CN的内存使用情况。        SELECT * FROM pg_total_memory_detail;               查询整个集群的内存使用情况        通过视图pgxc_total_memory_detail查询,必须具有sysadmin权限。       
总条数:2746 到第 页
上滑加载中