-
问题版本:820问题现象:扩容前准备阶段;添加空闲节点;空闲节点状态一会可用一会不可用排查步骤:1.登录dwscontrolelr容器查看ossre.dws.log日志;日志出现FreeNodeMonitorJob2.登录rms数据库 查看rds_instance_servergroup表 是否有新添加的节点;有新添加的节点3.登录有问题的节点检查rpc是否重启;ps -ef |grep rpc没有重启4.根据dwscongtroller日志报错:ossres-dws.log过滤find failed node 有关于find failed node报错判断是网络问题5.dws所在的cdknode节点到新添加的节点的manageip通信有问题拉网络的同事处理解决方法:cdk node节点到manageip网络有问题:拉网络的同事拍查cdk node 获取 登录cdk界面 - 页面左上角选择region - 点击集群运维 找到ei-region-db集群 查看 node 节点 将搜素项改为标签 搜dws 搜出来的节点就是dws用的cdk node 节点manageip获取:登录rms数据库cid:link_0select name,id from rds_instance where clusterid='{集群id}';
-
数据库的系统资源(CPU资源、内存资源、IO资源和存储资源)是有限的,GaussDB(DWS)在同时运行多种类型的业务(如数据加载、批量分析、实时查询等)时,各类型业务之间可能会竞争资源,从而出现资源性能瓶颈,导致吞吐量下降,造成整体的查询性能低下。GaussDB(DWS)提供了资源管理功能,对系统的资源进行合理的分配,能避免产生资源的不合理占用而导致的系统运行效率下降或者系统运行问题。DWS资源管理概述实际的业务中,使用DWS时可能会有多个用户同时运行查询作业,其中有些查询可能非常复杂,此时如果对数据库资源未做控制,这些复杂作业的查询容易占用大部分的集群资源并长时间运行,从而影响其他查询的性能,使其不得不等待那些复杂作业执行完成。在上述场景中,可以对这些执行复杂作业的用户进行分组并对用户进行合理的资源限制,使在可接受的执行时间范围内使用一定的资源执行这些复杂查询,同时划分出部分资源给那些查询消耗没那么大的用户,这样在部分用户执行复杂作业的同时,另一部分用户的作业也不会受到太大影响。这就是DWS资源管理的功能模型,用户可以根据自身业务将资源按需划分成不同的资源池,不同资源池之间资源互相隔离。再通过关联数据库用户将其关联至不同的资源池,用户SQL查询时将根据“用户-资源池”的关联关系将查询转至资源池中执行。通过指定资源池上可并行运行的查询数、单查询内存上限以及资源池可使用的内存和CPU资源,从而实现对不同业务之间的资源限制和隔离,满足数据库混合负载需求,保证执行查询时有充足的系统资源,确保查询性能。资源管理功能目前可以配置资源池的CPU时间片占比、内存占比、并发(复杂查询并发数)以及磁盘空间大小(永久表空间)等资源。CPU资源配比为资源池可使用的最小时间片占比,当某个资源池A的CPU负载超限并且有某个资源池B恰好空闲时,资源池A可以暂时使用空闲资源池B的CPU资源,但是一旦空闲资源池B开始对CPU资源有诉求时,将会收回“出借”给资源池A的CPU资源。这种CPU控制方式我们称之为CPU配额控制,即可以保证至少有配比的资源可用。DWS在创建集群时会根据集群中的节点规格为每个DN计算好可用的内存大小max_process_memory,DN在启动时会一次性申请max_process_memory大小的内存,DWS会在此基础上,根据每个资源池的内存配比,对作业使用的内存进行限制。资源池中所有数据库用户共享资源池内存,并且执行作业可消耗的内存资源不超过资源池的内存配比。DWS目前只支持永久表空间的存储资源限制,资源池中所有数据库用户共享资源池的存储资源,并且可使用的永久表空间大小不超过资源池配置的存储资源大小。资源池的并发数指的是资源池内多有数据库用户可同时执行的作业数,作业数达到并发数限制之后,再提交的作业会在资源池中排队等待执行。DWS资源管理页面介绍页面概览DWS资源管理页面主要包括资源管理配置、schema空间管理、资源池和资源管理计划四个模块。添加资源池修改资源池关联数据库用户到资源池从资源池中移除数据库用户用户还可以根据自己的业务特点预先创建好多个资源管理计划,向计划中添加多个时间阶段,并为每个阶段配置不同的资源配比。当启动计划时,计划就会按照配置在不同的时间段自动切换资源配置。如果用户在不同的时间段运行不同的业务,而这些业务又会占用不同比重的资源,使用资源管理计划功能可以很好的帮助客户实现不同时间段的资源配置自动切换。与此同时,对于用户所使用的资源,DWS也提供了监控功能,从页面上可以看到当前用户的资源使用情况。希望通过本文可以加深读者对资源管理功能的认识理解。了解更多数据仓库服务内容,猛戳此处!
-
数据加密作为有效防止未授权访问和防护数据泄露的技术,在各种信息系统中广泛使用。作为信息系统的核心,GaussDB(DWS)数仓也提供数据加密功能,包括透明加密和使用SQL函数加密。这里主要讨论SQL函数加密。GaussDB(DWS)目前不支持从Oracle、Teradata和MySQL加密后到DWS解密。Oracle、Teradata和MySQL与DWS加解密有区别,需要非加密数据迁移到DWS后在DWS侧进行加解密。技术背景哈希函数哈希函数又称为摘要算法,对于数据data,Hash函数会生成固定长度的数据,即Hash(data)=result。这个过程是不可逆的,即Hash函数不存在反函数,无法由result得到data。在不应保存明文场景(比如口令password属于敏感信息),系统管理员用户也不应该知道用户的明文口令,就应该使用哈希算法存储口令的单向哈希值。实际使用中会加入盐值和迭代次数,避免相同口令生成相同的哈希值,以防止彩虹表攻击。图1 哈希函数对称密码算法对称密码算法使用相同的密钥来加密和解密数据。对称密码算法分为分组密码算法和流密码算法。分组密码算法将明文分成固定长度的分组,用密钥对每个分组加密。由于分组长度固定,当明文长度不是分组长度的整数倍时,会对明文做填充处理。由于填充的存在,分组密码算法得到的密文长度会大于明文长度。流加密算法是指加密和解密双方使用相同伪随机加密数据流作为密钥,明文数据依次与密钥数据流顺次对应加密,得到密文数据流。实践中数据通常是一个位(bit)并用异或(xor)操作加密。流密码算法不需要填充,得到的密文长度等于明文长度。图2 对称密码算法技术实现GaussDB(DWS)主要提供了哈希函数和对称密码算法来实现对数据列的加解密。哈希函数支持sha256,sha384,sha512和国密sm3。对称密码算法支持aes128,aes192,aes256和国密sm4。哈希函数md5(string)将string使用MD5加密,并以16进制数作为返回值。MD5的安全性较低,不建议使用。gs_hash(hashstr, hashmethod)以hashmethod算法对hashstr字符串进行信息摘要,返回信息摘要字符串。支持的hashmethod:sha256, sha384, sha512, sm3。SELECT gs_hash('GaussDB(DWS)', 'sha256'); gs_hash -------------------------------------------------------------------------------------------------- e59069daa6541ae20af7c747662702c731b26b8abd7a788f4d15611aa0db608efdbb5587ba90789a983f85dd51766609 (1 row)对称密码算法gs_encrypt(encryptstr, keystr, cryptotype, cryptomode, hashmethod)采用cryptotype和cryptomode组成的加密算法以及hashmethod指定的HMAC算法,以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。SELECT gs_encrypt('GaussDB(DWS)', '1234', 'aes128', 'cbc', 'sha256'); gs_encrypt -------------------------------------------------------------------------------------------------------------------------- AAAAAAAAAACcFjDcCSbop7D87sOa2nxTFrkE9RJQGK34ypgrOPsFJIqggI8tl+eMDcQYT3po98wPCC7VBfhv7mdBy7IVnzdrp0rdMrD6/zTl8w0v9/s2OA== (1 row)gs_decrypt(decryptstr, keystr,cryptotype, cryptomode, hashmethod)采用cryptotype和cryptomode组成的加密算法以及hashmethod指定的HMAC算法,以keystr为密钥对decryptstr字符串进行解密,返回解密后的字符串。解密使用的keystr必须保证与加密时使用的keystr一致才能正常解密。SELECT gs_decrypt('AAAAAAAAAACcFjDcCSbop7D87sOa2nxTFrkE9RJQGK34ypgrOPsFJIqggI8tl+eMDcQYT3po98wPCC7VBfhv7mdBy7IVnzdrp0rdMrD6/zTl8w0v9/s2OA==', '1234', 'aes128', 'cbc', 'sha256'); gs_decrypt -------------- GaussDB(DWS) (1 row)gs_encrypt_aes128(encryptstr,keystr)以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。keystr的长度范围为1~16字节。SELECT gs_encrypt_aes128('MPPDB','1234'); gs_encrypt_aes128 ------------------------------------------------------------------------------------- gwditQLQG8NhFw4OuoKhhQJoXojhFlYkjeG0aYdSCtLCnIUgkNwvYI04KbuhmcGZp8jWizBdR1vU9CspjuzI0lbz12A= (1 row)gs_decrypt_aes128(decryptstr,keystr)以keystr为密钥对decryptstr字符串进行解密,返回解密后的字符串。解密使用的keystr必须保证与加密时使用的keystr一致才能正常解密。keystr不得为空。SELECT gs_decrypt_aes128('gwditQLQG8NhFw4OuoKhhQJoXojhFlYkjeG0aYdSCtLCnIUgkNwvYI04KbuhmcGZp8jWizBdR1vU9CspjuzI0lbz12A=','1234'); gs_decrypt_aes128 ------------------- MPPDB (1 row)应用示例创建表student,有id,name和score三个属性。使用哈希函数加密保存name,使用对称密码算法保存score。CREATE TABLE student (id int, name text, score text, subject text); CREATE TABLE INSERT INTO student VALUES (1, gs_hash('alice', 'sha256'), gs_encrypt('95', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('math', '1234')); INSERT 0 1 INSERT INTO student VALUES (2, gs_hash('bob', 'sha256'), gs_encrypt('92', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('english', '1234')); INSERT 0 1 INSERT INTO student VALUES (3, gs_hash('peter', 'sha256'), gs_encrypt('98', '12345', 'aes128', 'cbc', 'sha256'),gs_encrypt_aes128('science', '1234')); INSERT 0 1不使用密钥查询表student,通过查询结果可知:没有密钥的用户即使拥有了select权限也无法看到name和score这两列加密数据。SELECT * FROM STUDENT; id | name | score | subject ----+------------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+------------ ---------------------------------------------------------------------------------- 2 | 81b637d8fcd2c6da6359e6963113a1170de795e4b725b84d1e0b4cfd9ec58ce9 | AAAAAAAAAACCWNznqIVSGYgcuDz9jNKTHTd35+Jmhd/8j6zRLTfAa+Yl448SxNUsDTOBtW4w2ePmnqwf2FfbfsF3hYYlOlCQV/BSv2M3fQKKUwc0Ytunug== | Ti4Shb5N511 imwH8ugtiveRiSF6j7SC8OyUK/DQRPRRwwW9MFXPnGbG6jOMhMSMpKiz3NoEGOaT384aywVgI31MS3Z8= 3 | 026ad9b14a7453b7488daa0c6acbc258b1506f52c441c7c465474c1a564394ff | AAAAAAAAAAClDZIa1LfJuG+2dHpbnxn7VwHkCFuHChKErh069OHnMR+rhpWk0TxWlRfq8NIjX+590C3MqhPtha0ERbHbDpr5z8XVMkLgyAOQzJf6XtXvOA== | ijHXT/z94Zf MKQ0k7fYDCUML7ZeU15tLXQreBwp0borh/pgB4ifh8j032v7IiENbHqnRdfRDgkrQDHswu5ZDb3Op3vE= 1 | 2bd806c97f0e00af1a1fc3328fa763a9269723c8db8fac4f93af71db186d6e90 | AAAAAAAAAACQF3OcOktEKkPEL6G/AKL7DVA9WeXiNOwPPcXZuk49GZq0mrtR1ebqIiZBCvmGJ4wqoa7WEo3w8PRw+CK1oFP8J3b51ZZTVf1HD3nS46uEeg== | Sq5Zi0Yhg6h /hEcLD8bJqmpGKVkr0Ke4SKHqf7xBMqWflZjXeFvE9s7CUMvXzJ0uSg7P5Ta1CT4sm0vvB1fc+84o+7o= (3 rows)使用密钥查询表student,通过查询结果可知:拥有密钥的用户通过使用gs_encrypt对应的解密函数gs_decrypt解密后,可以查看加密数据。SELECT id, gs_decrypt(score, '12345', 'aes128', 'cbc', 'sha256'),gs_decrypt_aes128(subject, '1234') FROM STUDENT; id | gs_decrypt | gs_decrypt_aes128 ----+------------+------------------- 2 | 92 | english 3 | 98 | science 1 | 95 | math (3 rows)了解更多数据仓库服务内容,猛戳此处!
-
海量大数据场景下,随着业务和数据量的不断增长,数据存储与消耗的资源也日益增长。根据业务系统中用户对不同时期数据的不同使用需求,对膨胀的数据进行“冷热”分级管理,不仅可以提高数据分析性能还能降低业务成本。针对数据使用的一些场景,可以将数据按照时间分为:热数据、冷数据。冷热数据主要从数据访问频率、更新频率进行划分。Hot(热数据):访问、更新频率较高,对访问的响应时间要求很高的数据。Cold(冷数据):不允许更新或更新访问频率较低,对访问的响应时间要求不高的数据。冷热切换策略冷热切换的策略支持LMT(last modify time)和HPN(hot partition number),LMT指按分区的最后更新时间切换,HPN指保留热分区的个数切换。LMT:表示切换[day]时间前修改的热分区数据为冷分区,将该数据迁至OBS表空间中。其中[day]为整型,范围[0, 36500],单位为天。如下图中,设置day为2,即在冷热切换时,根据分区数据的最晚修改时间,保留2日内所修改的分区为热分区,其余数据为冷分区数据。假设当前时间为4月30日,4月30日对[4-26]分区进行了delete操作,4月29日对[4-27]分区进行了insert操作,故在冷热切换时,保留[4-26][4-27][4-29][4-30]四个分区为热分区。HPN:表示保留HPN个有数据的分区为热分区。分区顺序按照分区的Sequence ID来确定,分区的Sequence ID是根据分区边界值的大小,内置生成的序号,此序号不对外呈现。对于RANGE分区,分区的边界值越大,分区对应的Sequence ID越大;对于LIST分区,分区边界枚举值中的最大值越大,分区对应的Sequence ID越大。在冷热切换时,需要将数据迁移至OBS表空间中。其中HPN为整型,范围为[0,1600]。如下图中,设置HPN为3,即在冷热切换时,保留最新的3个有数据的分区为热分区数据,其余分区均切为冷分区。准备工作已注册华为云账号,且在使用GaussDB(DWS) 前检查账号状态,账号不能处于欠费或冻结状态。已下载客户端并连接到GaussDB(DWS) 集群。创建冷热表创建列存冷热数据管理表,指定热数据有效期LMT为100天。CREATE TABLE lifecycle_table(i int, val text) WITH (ORIENTATION = COLUMN, storage_policy = 'LMT:100') PARTITION BY RANGE (i) ( PARTITION P1 VALUES LESS THAN(5), PARTITION P2 VALUES LESS THAN(10), PARTITION P3 VALUES LESS THAN(15), PARTITION P8 VALUES LESS THAN(MAXVALUE) ) ENABLE ROW MOVEMENT;冷热数据切换切换冷数据至OBS表空间。自动切换:每日0点调度框架自动触发,无需关注切换情况;可自定义自动切换时间:根据业务情况调整自动触发时间,修改为每天早晨6点30分:;select * from pg_obs_cold_refresh_time('lifecycle_table', '06:30:00'); pg_obs_cold_refresh_time -------------------------- SUCCESS (1 row)手动切换执行如下操作手动切换单表:alter table lifecycle_table refresh storage; ALTER TABLE执行如下操作批量切换所有冷热表:select pg_catalog.pg_refresh_storage(); pg_refresh_storage -------------------- (1,0) (1 row)查看数据分布查看冷热表数据分布情况。查看单表数据分布情况:select * from pg_catalog.pg_lifecycle_table_data_distribute('lifecycle_table'); schemaname | tablename | nodename | hotpartition | coldpartition | switchablepartition | hotdatasize | colddatasize | switchabledatasize ------------+-----------------+--------------+--------------+---------------+---------------------+-------------+--------------+-------------------- public | lifecycle_table | dn_6001_6002 | p1,p2,p3,p8 | | | 96 KB | 0 bytes | 0 bytes public | lifecycle_table | dn_6003_6004 | p1,p2,p3,p8 | | | 96 KB | 0 bytes | 0 bytes public | lifecycle_table | dn_6005_6006 | p1,p2,p3,p8 | | | 96 KB | 0 bytes | 0 bytes (3 rows)查看所有冷热表数据分布情况:select * from pg_catalog.pg_lifecycle_node_data_distribute(); schemaname | tablename | nodename | hotpartition | coldpartition | switchablepartition | hotdatasize | colddatasize | switchabledatasize ------------+-----------------+--------------+--------------+---------------+---------------------+-------------+--------------+-------------------- public | lifecycle_table | dn_6001_6002 | p1,p2,p3,p8 | | | 98304 | 0 | 0 public | lifecycle_table | dn_6003_6004 | p1,p2,p3,p8 | | | 98304 | 0 | 0 public | lifecycle_table | dn_6005_6006 | p1,p2,p3,p8 | | | 98304 | 0 | 0 (3 rows)
-
数据库中的dm_ods用户密码已过期,但查询 pg_authid中的rolpwdexpire 字段,值为 -1,-1不是表示没有过期时间限制么?1. rolpwdexpire=-1 表示的是什么?2. 如果想查询用户的密码有效期的具体时间,请问如何查询?3. 配置 password_effect_time 参数可以修改密码的有效期,如果多个用户的有效期限需要不同,如a用户需要限制120天,b用户要设置密码永久有效,如何操作?谢谢各位老师!
-
为了分析表中数据在服务器各节点的分布情况,准备通过分析某个表分区对应的数据文件名称,看各DN节点如何存储。测试用的表中存在大量数据,使用part_20220117分区进行分析测试。通过查询,得到分区part_2020117分区在后台存储的文件名。base/1386092/1482516但在服务器上搜索对应的目录与文件,仅在data1节点下的cn目录中有搜索到,并且对应的数据文件大小为0请问各位老师,是哪里出现问题?为什么只在cn目录下有查找到,但是dn目录下没有呢?如果我想分析表中数据在服务器各节点的分布情况,要如何进行?
-
> Oracle原存储过程Procedure xxxLog ( p_row test1%ROWTYPE ) IsBegindelete from test1 awhere a.t_period = p_row.t_period and (a.t_code=p_row.t_code or p_row.t_code is null);insert into test1 values p_row;commit;end xxxLog;> 改写GaussDB(DWS)语法示例CREATE FUNCTION xxxLog ( p_row test1 ) AS $$Begindelete from test1 awhere a.t_period = p_row.t_period and (a.t_code=p_row.t_code or p_row.t_code is null);insert into test1 values (p_row.*);END;$$ LANGUAGE plpgsql;即:1、入参时 p_row test1%ROWTYPE 调整为 p_row test1,即可表示引用test1表的字段类型;2、插入全部数据时 values p_row 调整为 values (p_row.*),即表示当前行所有信息;3、其它对于ROWTYPE定义的用法一致。> 实验示例create table test1 ( a int,b int);create table test2 ( a int,b int);CREATE FUNCTION merge_fields(t_row public.test1) RETURNS text AS $$DECLARE t2_row public.test2%ROWTYPE;BEGIN select * INTO t2_row FROM public.test1 where a=t_row.a; delete from public.test1 where a=t_row.a; insert into public.test2 values (t2_row.*); return 'from:'||t_row.a||'-'||t_row.b||' to:'||t2_row.a||'-'||t2_row.b;END;$$ LANGUAGE plpgsql;insert into test1 values(444000,2);select merge_fields(t1.*) from test1 t1 WHERE a=444000;select * FROM public.test1 where a=444000;select * FROM public.test2 where a=444000;
-
针对不同单节点服务器内存推荐设置对应的内存相关参数及监控、审计参数。详见附件
-
怎么查看gaussdb的内核版本号呢
-
如何查询表的大小还有数据的大小呢
-
如题,怎么查询单CN上用户相关的事务信息呢
-
我想查看当前用户可以访问的表,请问如何查看呢
-
报错Failed to receive sock[328], return -1, from node[13]:dn_6015_6016, Bad address验证方法以及报错原因:1.业务报错时查看对应日志,有某个节点收不到其他节点的报错信息;2.报错日志有关键字Bad address,表明内存块指针非法,是通信库内存池导致的,拿到错误内存地址接收失败后放回了内存池,导致后续业务拿到错误内存持续报错。这个bug在813已经修复。规避方法:1.重启报错节点规避;2.该问题是由内存故障导致的,老版本只能通过保障硬件正常规避。更换内存条
-
【问题描述】:dws数据库操作经常报链接被中断错误 报错信息:Cause: org.postgresql.util.PSQLException: FATAL: 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的修改相关参数规避
-
僵尸进程很多,可能有几万个,占用系统资源导致出现一系列问题报资源不足,操作反应慢等问题,排查都不是已知问题后,可排查该问题;验证方法:1. top 查看,是否有很多僵尸进程,一直在增长且杀不掉;2.进入 /var/log,查看messages文件,筛选dbus,发现服务响应超时的错误“Failed to activate service ‘org.freedesktop.systemdl’:timeout”等,该报错为Redhat操作系统的一个bug,该问题Redhat开源社区并没有说明如何触发,根据现网以往经验,当内存较高时(仅供参考),偶发dbus组件异常,导致systmd1进程异常,无法正常回收僵尸进程,僵尸进程数量过多时操作系统hang死。规避和解决方案:想恢复正常使用,只能通过重启服务器解决;解决该问题,可让客户联系OS厂家升级补丁解决。以下为相关资料:cid:link_0https://bugzilla.redhat.com//show_bug.cgi?id=1325870https://access.redhat.com/errata/RHBA-2016:2453
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签