• [运维管理] 【Gaussdb A 8.0】PG_STAT_ACTIVITY视图中的query字段不能显示较大的SQL内容
    你好,对于 PG_STAT_ACTIVITY视图中的query字段,在SQL * FORM PG_STAT_ACTIVITY; 查询的query显示SQL不全,请问对于比较大的SQL为什么 显示不全,有什么解决办法,或调整相关参数能解决吗!(
  • [热门活动] 一键申请DWS免费试用,留言提建议还有相机、键鼠套餐、风扇等多重好礼等你拿~
    这次,玩大了!!!你知道吗,DWS不仅赠送免费试用机会,提建议还有好礼再相送!!! 赠送免费试用机会,提建议还有好礼再相送!!!还有好礼再相送!!!再相送!!!送!!!一、活动时间:2021年6月3日—2021年7月15日二、活动介绍:活动:1:DWS免费试用可以继续申请啦,点此一键申请免费试用>>3500元套餐,我就免费,哎,就是玩儿~活动2:提建议,再送好礼:    本次建议收集包括:GaussDB(DWS)产品建议、试用建议、平台建议,三种类型的有效建议对应的分值不同:产品建议(20分)、试用建议(20分)、平台建议(10分),活动期间内按照建议被采纳后的有效建议计算对应分值排名,给予排名对应奖励。产品建议:包括但不限于产品功能建议、产品bug...试用建议:包括但不限于产品试用流程、试用心得、学习文档、数仓产品体验感受、遇到的问题…平台建议:包括但不限于平台建设、平台看护…任务多多,心动不如行动,看准机会,快快行动吧~产品主页:https://www.huaweicloud.com/product/dws.html产品文档:https://support.huaweicloud.com/dws/快速入门:https://support.huaweicloud.com/qs-dws/开发者社区:https://bbs.huaweicloud.com/forum/forum-598-1.html微信公众号……三、参与方式(1)申请试用:一键申请免费试用>>3500元套餐,我就免费,哎,就是玩儿~(2)盖楼:在评论区盖楼互动,回复“GaussDB(DWS) 重定义数据仓库,释放数据非凡价值!”(3)提建议:在本论坛发帖直接反馈建议(也可在本主题帖中跟帖留言直接反馈建议哦),将链接反馈至本活动贴下方,会有工作人员进入链接审核建议。提建议发帖版块链接:https://bbs.huaweicloud.com/forum/forum-598-1.html四、活动流程:五、获奖方式:1、DWS免费试用(10名)    奖    品:华为云GaussDB(DWS)包月免费试用价值3500元    评奖规则:根据问卷调查抽取免费试用用户。2、最具影响力(1名)    奖    品:富士INSTAX 一次成像相机    评奖规则:有效建议积分排名第1名。3、最佳创意奖(3名)    奖    品:罗技键鼠套装    评奖规则:有效建议积分排名2—4名。4、价值贡献奖(3名)    奖    品: 华为云定制颈枕    评奖规则:有效建议积分排名第5—7名。5、幸运互动奖(5名)    奖     品:手持电风扇    评奖规则:参与华为云社区互动即有机会抽取。六、奖品一览七、注意事项:1、经工作人员审核,预审通过的建议会有版主直接回复,则为有效建议。2、提出有效的产品建议,建议越详细越好,比如在XX环境、XX操作导致,并配有对应截图,建议需要为有效建议(禁止谩骂、纯吐槽等)。3、如遇到重复建议、问题,则以帖子发表时间为准,后续雷同建议贴无效。4、本活动最终解释权归华为云数仓GaussDB(DWS)所有。
  • [实践系列] GaussDB(DWS) 【查询包含某个字段的所有表清单方法】
    select n.nspname || '.' || c.relname from pgxc_class x left join  pg_class c on c.oid = x.pcrelidleft join  pg_namespace n on n.oid = c.relnamespacewhere pclocatortype='H'and  c.relkind = 'r' and c.oid in (select attrelid from pg_attribute where attname='columnname');eg:
  • [实践系列] GaussDB(DWS) 【多值列场景的处理方法】
    【多值列模型】多值列处理思路:相同类型的多值列融合为一张行表拆表使用到的函数函数string_to_array(text,text)作用:使用指定的分隔符和null字符串把字符串分裂成数组元素。函数:unnest(anyarray) 扩大一个数组为一组行。Eg:Select a,b,count(*) counts from (select a,unnest(string_to_array(b,'#'))  as b from tt001) group by a,b;执行计划:
  • [实践系列] GaussDB(DWS) 【并发测试脚本】
    1)创建配置文件info.conf#数据库变量设置#数据库名dbbase='database'#用户名dbuser='user'#用户密码dbpass='password'#SQL执行次数para_num=2000#允许同时调起的gsql进程数,如果活跃进程大于此值则sleep直到进gsql进程数小于此值时,则继续增加并发pnum='1500'#sql文件中的sql语句数,用于计算tpssnum='5'#数据库集群的lvs地址lvsip='xxx.xxx.xxx.xxx'#sql文件名filename='filename'2.创建并发脚本#!/bin/bash. ./info.confc_path=$(cd "$(dirname "$0")";pwd)ctime=`date +%Y%m%d%H%M%S`fun()    {        for ((j=1;j<=$para_num;j++));do            {                echo "正在执行第$j个查询" >${c_path}/num                gsql -p 25308  -U $dbuser  -W $dbpass -d $dbbase -h $lvsip -f ${c_path}/${filename}.sql >>${c_path}/${filename}_$ctime.log 2>&1 &                gsqlnum=`ps -ef|grep gsql |grep -v grep|wc -l`                while [ "$gsqlnum" -gt "$pnum" ]                        do                        echo "当前并发量为:$gsqlnum,不再加并发"                        sleep 1                        gsqlnum=`ps -ef|grep gsql |grep -v grep|wc -l`                        done            }&        done        wait    }main()    {            source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile            starttime=`date +"%Y-%m-%d %H:%M:%S"`            echo "start time:$starttime"            fun            endtime=`date +"%Y-%m-%d %H:%M:%S"`            echo "end time:$endtime"            echo "sqlcount=$para_num">>${c_path}/Test_report_$ctime.log            totaltime=$((`date +%s -d "$endtime"` - `date +%s -d "$starttime"`))            echo "totaltime=${totaltime}s">>${c_path}/Test_report_$ctime.log            tps=`expr $para_num  \* $snum  / $totaltime`            echo "tps=$tps sql/sec" >>${c_path}/Test_report_$ctime.log            avgtime=`cat  ${filename}_$ctime.log|grep '^Time:' |awk '{sum+=$2}  END {print sum/NR}'`            echo "avgtime=${avgtime}ms" >>${c_path}/Test_report_$ctime.log    }mainexit 0执行后输出:totaltime:总执行时间tps:每秒执行的SQL数avgtime;: sql平均执行时间
  • [实践系列] GaussDB(DWS) 【常用对象赋权方法】
    DWS数据库对象创建后,进行对象创建的用户就是该对象的所有者。数据库系统管理员具有与对象所有者相同的权限。也就是说对象创建后,默认只有对象所有者或者系统管理员可以查询、修改和销毁对象,以及通过GRANT将对象的权限授予其他用户。业务场景中,会经常遇到跨用户访问数据库对象的场景,因此需要根据需要赋予指定用户特定数据库对象的权限。赋权时应按照数据库-->模式-->对象的顺序赋权--首先赋予用户数据库的连接权限grant CONNECT   ON DATABASE database to user;-- 赋予用户指定schema的usage权限GRANT   USAGE ON SCHEMA schema TO user;、赋予对象当前schema上所有对象的增删改查权限--赋予用户当前schema下所有表及视图的增删改查权限GRANT SELECT,INSERT,UPDATE,DELETE,truncate  ON  ALL TABLES IN SCHEMA schema to user;--赋予用户当前schema下后续新建的表及视图的增删改查权限alter default privileges in schema schema grant SELECT,INSERT,UPDATE,DELETE,truncate on tables to user;--赋予用户当前schema下所有函数及存储过程的执行权限GRANT  EXECUTE   ON   ALL FUNCTIONS IN SCHEMA schema to  user;--赋予用户当前schema下所有序列的查询及使用权限grant USAGE,SELECT on ALL SEQUENCES IN SCHEMA schema to user;
  • [实践系列] GaussDB(DWS) 【角色权限相关视图使用方法】
    GaussDB(DWS)系统视图中涉及用户、角色及权限相关的视图有 pg_user、pg_authid、pg_roles、pg_auth_members,其中pg_user只存储用户信息;pg_authid存储有关数据库认证标识符(角色)的信息、pg_roles视图提供访问数据库角色的相关信息;pg_auth_members存储角色的成员关系,即某个角色组包含了哪些其他角色。eg:1.pg_user 只记录了用户信息select * from pg_user where usename in ('u1','u2','u3');2.pg_authidpg_authid系统表存储有关数据库认证标识符(角色)的信息。角色把“用户”的概念包含在内。一个用户实际上就是一个rolcanlogin标志被设置的角色。任何角色(不管rolcanlogin设置与否)都能够把其他角色作为成员。在一个集群中只有一份pg_authid,不是每个数据库有一份。需要有系统管理员权限才可以访问此系统表。select * from pg_authid where rolname in ('u1','u2','u3');3.pg_roles 视图提供访问数据库角色的相关信息select * from pg_roles where rolname in ('u1','u2','u3');备注:1)创建角色,赋予了login权限,则相当于创建了用户,如果没有赋予login权限,则这个角色只能在pg_roles里面看到,而在pg_user里面看不到2)rolinherit字段表示改角色是否继承了其他角色的权限,继承关系见视图pg_auth_members4.pg_auth_members 系统表存储显示角色之间的成员关系角色赋予语法:grant user1 to user2;eg:select  m.rolname,m.member as member,b2.rolname as grantor,m.admin_option from (select g.rolname,b1.rolname as member,g.grantor,g.admin_option  from (select a.roleid,b.rolname,a.member,a.grantor,a.admin_option from PG_AUTH_MEMBERS a, pg_roles b where a.roleid=b.oid) g ,pg_roles b1 where g.member=b1.oid)m ,pg_roles b2 where  m.grantor =b2.oid ;如图:rolname :拥有成员的角色名member:   属于成员的角色名grantor :    赋予此成员关系的角色名admin_option: 如果有权限可以把ROLEID角色的成员关系赋予其他角色,则为真
  • [实践系列] GaussDB(DWS) 【查询对象所有权限属性的两种方法】
    方法一:select * from information_schema.table_privileges where grantee='user';grantor :赋权用户grantee:被赋权用户table_catalog:数据库名table_schema:模式名table_name:对象名privilege_type:被赋予的权限方法二:SELECT relname,relacl FROM pg_class where relname='tablename';注释:访问权限。查询的回显结果为以下形式:1rolename=xxxx/yyyy --赋予一个角色的权限 1=xxxx/yyyy --赋予public的权限 xxxx表示赋予的权限,yyyy表示授予该权限的角色。参数说明:
  • [实践系列] GaussDB(DWS)【用SQL方式查询所有带主键的表的主键字段方法】
    SQL:select n.nspname as schemaname ,c.relname as tablename,rtrim(ltrim(pg_get_constraintdef(p.oid),'PRIMARY KEY ('),')') as column_pk from pg_class c inner join pg_namespace n on c.relnamespace=n.oid inner join pg_constraint p on c.oid=p.conrelid where p.contype='p';eg:
  • [实践系列] GaussDB(DWS)【通过SQL方式查询分区表的的分区字段方法】
    查询SQL如下:select a.attname from pg_class c left join pg_namespace n on c.relnamespace=n.oid left join pg_partition p on c.oid=p.parentid left join pg_attribute a on p.partkey[0]=a.attnum and  a.attrelid=c.oid  where   p.parttype='r'and n.nspname ='schemaname'and c.relname ='tablename';备注:查询时请替换SQL中红色内容替换为schema名及表名eg:select * from dba_tab_partitions where table_name='a_rcvbl_entry';
  • [性能调优] GaussDB200 6.5.1 单机部署后 数据写入达不到理想效率
    【操作步骤&问题现象】1、开开心心的安装了GaussDB,但是之后简单的用50万数据测试了一下,发现通过kettle从其他服务器的oracle数据库向GaussDB数据库中写入数据的时候,发现写入速度特别低2、尝试修改了postgresql.conf文件,但是问题没有明显改善,源文件及修改的gs_guc命令放在附件里了~求帮忙看一看3、个人认为是数据库本身对于写入数据的限制(出于安全角度?),因为使用其他数据库时并没有出现类似现象4、可不可以仅通过GuassDB数据库配置的修改,系统调优,不进行SQL调优使简单的数据传输效率变高?5、GuassDB所在节点的资源配置:# OS Type: linux # Total Memory (RAM): 48 GB # CPUs num: 4 # Connections num: 300 # Data Storage: ssd【截图信息】求问,这个度量结果和GaussDB的postgresql数据库配置有关吗?还是说要修改其他的配置文件来进行数据库的优化
  • [开发应用] 【GaussDB对JSON的支撑】
    【操作步骤&问题现象】网上看PG是支撑JSON类型数据的,且查询语句可以用select这样的语句,例如select '[1,2,3]'::json->>2;但是发现GaussDB不支持,请问是否有相应的资料,还是就是不支持这样的语法
  • [技术干货] GaussDB(DWS)数据类型之DATE类型
    GaussDB(DWS)中有三种模式,分别是Oracle模式,TD模式和MySQL模式。不同的类型在不同的模式下,也有不同的行为表现。接下来便对GaussDB(DWS)中的日期DATE类型进行详细介绍。DATE类型的取值范围:GaussDB(DWS)在存储DATE类型时,不支持年月日全部为零或部分为零的场景,且取值范围在三种模式下是不同的:在Oracle模式下,DATE类型的取值范围是公元前4713年1月1日到公元294277年1月1日。在MySQL模式和TD模式中,DATE类型的取值范围是公元前4713年到公元5874897年。用例说明:1. 不同模式下DATE类型的行为Oracle模式    a. DATE类型的表现    GaussDB(DWS)中DATE类型存储时不带时分秒,由于在Oracle模式下的DATE类型需要带有时分秒,使得GaussDB(DWS)在Oracle模式下存在带时分秒的和不带时分秒的两种DATE类型,所以为了容易区分,在显示时不带时分秒的DATE类型用列名date表示;带时分秒的DATE类型用同样带时分秒的TIMESTAMP类型的列名timestamp表示。postgres=# select date '4713-01-01 BC'; timestamp ------------------------ 4713-01-01 00:00:00 BC (1 row) postgres=# select date '294277-01-01'; timestamp ----------------------- 294277-01-01 00:00:00 (1 row)    b. Oracle模式下得到只含有年月日的DATE类型的方法    如果想要在Oracle模式下将日期转成只有年月日的DATE类型,有方法可以实现么?事实上也是有的。GaussDB(DWS)提供了两种方式,一种是通过在Oracle模式下使用date函数:date函数的参数至少需要包含年月日,并将日期中的年月日提取并输出;另一种则是通过cast函数进行转换,但转换时应将date加上双引号,否则转换后的数据还是会含有时分秒部分。postgres=# select date('2008-05-24 10:40:21'); date ------------ 2008-05-24 (1 row) postgres=# select cast('2008-05-24 10:40:21.100050' as "date"); date ------------ 2008-05-24 (1 row) postgres=# select cast('2008-05-24 10:40:21.100050' as date); timestamp --------------------- 2008-05-24 10:40:21 (1 row)    c. DATE类型操作符操作符实例结果+select date ‘2020-08-13’ + interval ‘7’;2020-08-20 00:00:00select date '2020-08-13' + time '12:11:13';2020-08-13 12:11:13-select date '2001-10-01' - date '2001-09-28';3 daysselect date '2001-10-01' - interval '5' month;2001-05-01 00:00:00select date '2001-10-01' - time '12:11:13';2001-09-30 11:48:47MySQL模式和TD模式: DATE类型只有年月日。    a. DATE类型的表现    MySQL模式与TD模式下DATE类型无差异。mysql_db=# select date '5874897-01-01'; date --------------- 5874897-01-01 (1 row) td_db=# select date '5874897-01-01'; date --------------- 5874897-01-01 (1 row)    b. MySQL模式与TD模式下得到只含有年月日的DATE类型的方法    由于在MySQL模式或TD模式下,DATE类型只有年月日,故使用to_date函数和date函数所得到的结果都只有年月日,同时cast函数进行类型转换时,date加不加引号所得到的结果也是一致的。td_db=# select date('2008-05-24 10:40:21'); date ------------ 2008-05-24 (1 row) td_db=# select cast('2008-05-24 10:40:21.100050' as "date"); date ------------ 2008-05-24 (1 row) td_db=# select cast('2008-05-24 10:40:21.100050' as date); date ------------ 2008-05-24 (1 row) mysql_db=# select date('2008-05-24 10:40:21'); date ------------ 2008-05-24 (1 row) mysql_db=# select cast('2008-05-24 10:40:21.100050' as "date"); date ------------ 2008-05-24 (1 row) mysql_db=# select cast('2008-05-24 10:40:21.100050' as date); date ------------ 2008-05-24 (1 row)    c. DATE类型操作符操作符实例结果+select date ‘2020-08-13’ + interval ‘7’;2020-08-20 00:00:00select date '2020-08-13' + time '12:11:13';2020-08-13 12:11:13-select date '2001-10-01' - date '2001-09-28';3select date '2001-10-01' - interval '5' month;2001-05-01 00:00:00select date '2001-10-01' - time '12:11:13';2001-09-30 11:48:47与Oracle模式的差异:当DATE类型的值进行相减时返回值不带day,只有数值。2. 不同模式下的DATE类型相关函数结果的行为:GaussDB(DWS)中存在与DATE类型相关的函数:to_date:将文本类型的值转换为指定格式的时间戳,若参数只有一个时,默认格式为DATE类型的格式。to_char:将一个DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE或者TIMESTAMP WITH LOCAL TIME ZONE类型的DATETIME或者INTERVAL值按照fmt指定的格式转换为VARCHAR类型。可选参数fmt可以为以下几类:日期、时间、星期、季度和世纪。每类都可以有不同的模板,模板之间可以合理组合;常见的模板有:HH、MM、SS、YYYY、MM、DD。模板可以有修饰词;常用的修饰词是FM,可以用来抑制前导的零或尾随的空白。返回值类型:varcharcurrent_date:获取当前日期。date_part:获取给定日期时间中的指定域值。isfinite:测试给定日期是否为有效日期。函数实例GaussDB(Oracle)GaussDB(TD)GaussDB(MySQL)to_dateselect to_date(date '2008-05-24 10:40:21');2008-05-24 10:40:212008-05-242008-05-24to_charselect to_char(date '2008-05-24 10:40:21');2008-05-24 10:40:212008-05-24 00:00:00+082008-05-24current_dateselect current_date;2021-04-252021-04-252021-04-25date_partselect date_part('week', date '2008-05-24');212121isfiniteselect isfinite(date '2008-05-24');tttOracle模式:由于Oracle模式中的DATE类型含有时分秒,故to_date和to_char函数得到的结果含有时分秒。TD模式:由于TD模式下的DATE类型只有年月日,故to_date函数得到的结果只有年月日。在TD模式下,to_char函数的输出结果可以由GUC参数convert_empty_str_to_null_td控制,若不设置参数则返回上表中的结果,若设置参数则返回结果与TD数据库中的结果保持一致,为2008/05/24。MySQL模式:由于MySQL模式下DATE类型只有年月日,故to_date函数和to_char函数的返回结果只有年月日。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~原文链接:https://bbs.huaweicloud.com/blogs/266760
  • [技术干货] 从原理到实践,手把手带你轻松get数仓双集群容灾
    双集群原理GaussDB(DWS) 的容灾方案是一个双集群同步的架构,即两套独立集群定期同步数据以达到容这的目的。目前数据同步的方式是通过roach(GaussDB(DWS)备份、恢复工具)定期做增量备份和恢复同步。双集群框架是一个复杂的分布式系统,在出现问题时,如何快速准确的定位问题及恢复服务是一个非常紧迫的问题,这个问题在云上会更突出。本文通过介绍双集群的架构、log结构、分析步骤来介绍双集群容灾的问题分析方法。首先介绍一下双集群的部署方案原理,从部署架构和重要参数两个方面先介绍一下背景知识,便于更好理解问题分析的方法。架构简介1. 逻辑架构示例下图是一个同构的双集群部署示意图,主备集群都是3c3d, 主集群的主结点部署双集群框架脚本,定期进行备份操作,备集群的主结点定期恢复备份集。基础数据需要进行一全量备份,之后增量备份。2. 部署架构下图是接上图的部署架构,涉及双集群同步脚本(SyncDataToStby.py), 备份程序(GaussRoach.py, gs_roach)三个二进制文件备份侧调用关系:SyncDataToStby.py -> GaussRoach.py -> gs_roach恢复侧调用关系:SyncDataToStby.py -> GaussRoach.py -> gs_roach了解调用关系和咱们分析问题有直接的关系。SyncDataToStby.py 是整个双集群的调用起始,控制着双集群的正常运行,正常情况下是长驻内存的进程,如果异常退出后,后台会有crontab的来重新拉起双集群脚本: crontab -> SyncDataToStby.py -> GaussRoach.py -> gs_roach主要参数简介参数名作用备注username执行双集群脚本的OS用户,设置成GaussDB(DWS)集群相同的OS用户primary-env主集群的环境变量文件standby-env备集群的环境变量文件full-backup-exec-time-interval全量备份的间隔时间,当前默认N/A,只进行一次全量备份,分钟为单位。backup-exec-time-interval备份间隔时间,增量备份的间隔时间,分钟为单位。primary-host-ip主集群主结点的ipcompression-level=1compression-type=2压缩算法primary-media-destinationprimary-metadata-destination主集群的备份目录restore-interval恢复的时间间隔,分钟为单位restore-host-ip备集群的主结点iprestore-media-destinationrestore-metadata-destination备集群备份目录问题定位众所周知,系统的各种log是我们了解运行机制,了解问题现场的有力工具,同样双集群的问题分析也依赖于log的分析,首先认识一下双集群对应的日志:log 目录结构由上节的逻辑图及部署图,每个二进制对应的log文件如下图所示,对应二进制的信息查找对应的log。如上图,双集群的日志也是存放到$GAUSSLOG这个目录,并且有自己独立的目录 roach, 由这个目录同样是备份/恢复的对应的log路径。我们按调用关系从上到下的角度来介绍1. frame目录    存放 SyncDataToStby.py 生成的log,涉及到双集群调度,备份集清理,状态显示,配置文件及命令行参数解析的功能。2. controller目录    存放 GaussRoach.py 生成的log,涉及到备份、恢复准备工作一些操作,备份、恢复参数解析,备份集群的处理,错误处理等3. agent目录    存放 gs_roach工具 生成的log,涉及到gs_roach 连接gaussdb/gtm/cm发起备份/恢复,生成备份集/恢复备份集等操作。     gs_roach工具功能:在备份侧完成将cn/dn/gtm/cm的数据文件按顺序打包成备份文件的功能,并生成备份集元信息文件; 恢复侧根据元信息文件将备份集文件解压到对应cn/dn/gtm/cm的数据目录中。    定位步骤1. 确定问题在备份侧还是恢复侧,查找双集群主结点上Sync日志,确定出错的模块2. 确定出错的层次,由于双集群执行过程是一个上下层调用及时序关系的方式,具体顺序参考:crontab -> SyncDataToStby.py -> GaussRoach.py -> gs_roach3. 在各个模块都有较详细的日志描述过程,具体问题具体分析,大体有如下几个方面1)配置出错,用户、环境变量文件2)备份集群路径权限问题3)由于集群状态非Normal导致备份失败4)结点故障及备份集损坏导致恢复失败4. 后续文章会按模块及错误类型来详细描述问题定位步骤小结GaussDB(DWS)的双集群容灾功能是一个独立的复杂的分布式系统,涉及到三层工具的使用,因此在问题定位时会造成一些困惑。定位的方法需要先去理解架构,运行机制,然后根据时序关系去对应结点分析日志。后续会从各个模块的角度介绍一些典型的问题及修复方法。 想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~、原文链接:https://bbs.huaweicloud.com/blogs/264523
  • [技术干货] 关于GaussDB(DWS)多租户管理,这些你一定要知道
    一、多租户的背景及意义多租户为满足客户混合负载处理需求而生,通过提供两层用户机制,分层资源隔离,满足客户对计算和存储资源的自主控制需求。两级用户分别关联不同的资源池和存储空间,实现多租户下资源分组管理。二、GaussDB(DWS)的多租户目前GaussDB(DWS)的多租户能够进行隔离的资源包括:CPU资源、内存资源、IO资源、存储资源。GaussDB的多租户通过绑定资源池来实现,具体原理如下图所示:借助上图说明多租户的管控方式,见往下三、四、五章节。三、控制组设置通过设置控制组可以进行以下几方面的资源隔离:(1)设置CPU核数和控制组CPU份额,进行CPU资源管理;(2)设置异常规则来对异常作业进行终止或降级;1、class控制组        创建名称为“class_a”的子Class控制组,CPU资源配额分别为Class的40%。        gs_cgroup -c -S class_a -s 402、workload控制组        创建子Class控制组“class_a”下名称为“workload_a1”的Workload控制组,CPU资源配额分别为“class_a”控制组的20%。        gs_cgroup -c -S class_a -G workload_a1 -g 203、异常规则        设置“class_a”下属“workload_a1”的作业阻塞到1200秒或执行2400秒时执行终止动作。        gs_cgroup -S class_a -G workload_a1 -E "blocktime=1200,elapsedtime=2400" -a支持的控制组异常规则:异常阈值类型说明取值范围(0表示取消设置)支持的异常操作blocktime作业的阻塞时间,单位秒。包括全局并发排队以及局部并发排队的总时间。0~UINT_MAXabortelapsedtime作业的已被执行时间,单位秒。从开始执行到当前所消耗的时间。0~UINT_MAXabortallcputime作业在所有DN上执行时所耗费的CPU总时间,单位秒。0~UINT_MAXabort,penaltycpuskewpercent作业在DN上执行时的CPU时间的倾斜率,依赖于qualificationtime的设置。0~100abort,penaltyqualificationtime检查作业执行cpu倾斜率的间隔时间,单位秒,需同cpuskewpercent一起设置。0~UINT_MAXnonespillsize作业在DN上下盘的数据量,单位MB。0~UINT_MAXabortbroadcastsize作业在DN上算子大表广播数据量,单位MB。0~UINT_MAXabort 四、资源池设置通过设置资源池属性可以进行以下几方面的资源隔离:(1)通过设置mem_percent、memory_limit进行内存资源管理;(2)通过设置io_limits、io_priority进行IO管控;(3)通过设置active_statements、max_dop进行并发管控;(4)可以设置指定的控制组,进行CPU和异常规则的管理;(5)设置资源池异常规则;1、组资源池创建名称为“resource_pool_a”的组资源池关联到了“class_a”控制组。        CREATE RESOURCE POOL resource_pool_a WITH (control_group='class_a');2、业务资源池(1)创建名称为“resource_pool_a1”的业务资源池关联到了“workload_a1”控制组        CREATE RESOURCE POOL resource_pool_a1 WITH (control_group='class_a:workload_a1');(2)更新一个资源池,其控制组指定为"DefaultClass"组下属的"High" Timeshare Workload控制组。        ALTER RESOURCE POOL pool1 WITH (CONTROL_GROUP="High");(3)修改资源池“resource_pool_a1”的内存比例为可用内存大小的20%,即设置MEM_PERCEN的取值为20。        ALTER RESOURCE POOL resource_pool_a1 WITH (MEM_PERCENT=20);3、可设置的资源池属性属性属性值说明mem_percent0最大占用内存百分比。0代表不限制。control_groupDefaultClass:Medium资源池关联的控制组。active_statements-1资源池允许的最大并发数。-1和0代表不限制。max_dop-1资源池允许的简单作业最大并发数。-1和0代表不限制memory_limitdefault使用该资源池的作业估算内存上限。default表示最大为资源池内存一半,unlimited表示不限制。io_limits0每秒触发IO的次数上限。行存单位是万次/s,列存是次/s。0表示不控制。io_priorityNoneIO利用率高达90%时,重消耗IO作业进行IO资源管控时关联的优先级等级。None表示不控制。4、可设置的资源池异常规则异常阈值类型说明取值范围(0表示取消设置)支持的异常操作mem_limit作业在单实例上使用内存上限。32MB~max_dynamic_memoryabort 五、用户设置通过设置用户属性进行存储空间管控:1、创建组用户关联组资源池        CREATE USER tenant_a RESOURCE POOL 'resource_pool_a' PASSWORD 'Gauss_234';2、创建业务用户关联业务资源池        CREATE USER tenant_a1 RESOURCE POOL 'resource_pool_a1' USER GROUP 'tenant_a' PASSWORD 'Gauss_234';3、通过设置用户属性(PERM SPACE、TEMP SPACE、SPILL SPACE)可以进行存储空间管控:(1)修改用户“tenant_space_test”永久表空间限额不受限制。        ALTER USER tenant_space_test PERM SPACE 'unlimited';(2)修改用户“tenant_space_test”临时表空间限额为100G。        ALTER USER tenant_space_test TEMP SPACE '100G';(3)修改用户“tenant_space_test”算子落盘空间限额为200G。         ALTER USER tenant_space_test SPILL SPACE '200G';六、总结上文主要介绍了多租户技术的架构和使用方法,通过租户关联控制组和资源池,多租户的设置有效隔离了CPU资源、内存资源、IO资源和存储资源,提供了有力的混合负载管理能力。想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~原文链接:https://bbs.huaweicloud.com/blogs/255880
总条数:2746 到第 页
上滑加载中