-
问题背景业务表数据量很少,但是占用空间很大问题原因1.脏数据多 2.列存表膨胀 3.使用大量varchar(不合理长度)排查过程1.查看脏页率(查之前先执行analyze 表名,如果脏页率很高,需要对表进行vacuum full analyze,如果脏页比较低看第二步) select c.oid AS relid, n.nspname AS schemaname, c.relname, pg_stat_get_tuples_inserted(c.oid) AS n_tup_ins, pg_stat_get_tuples_updated(c.oid) AS n_tup_upd, pg_stat_get_tuples_deleted(c.oid) AS n_tup_del, pg_stat_get_live_tuples(c.oid) AS n_live_tup, pg_stat_get_dead_tuples(c.oid) AS n_dead_tup, cast( (n_dead_tup / (n_live_tup + n_dead_tup + 0.0001) * 100) AS numeric(5,2)) AS dirty_page_rate from pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace where c.oid = (select 'public.t4'::regclass::oid); /* public为模式名,t4为表名 */ 2.小CU多只有列存表涉及 参考如下链接排查,如果嫌排查麻烦,建议直接执行vacuum full analyze进行CU整合再次查询表大小。 https://bbs.huaweicloud.com/forum/thread-96965-1-1.html 3.使用大量character(不合理长度),相同数据量可以看到测试结果,使用character(8000)表占2667 MB使用text表占60 MB postgres=# \d+ yyb.test_row Table "yyb.test_row" Column | Type | Modifiers | Storage | Stats target | Description --------+---------+-----------+----------+--------------+------------- id | integer | | plain | | name | text | | extended | | name1 | text | | extended | | name2 | text | | extended | | name3 | text | | extended | | name4 | text | | extended | | name5 | text | | extended | | Has OIDs: no Distribute By: ROUND ROBIN Location Nodes: ALL DATANODES Options: orientation=row, compression=no postgres=# \dt+ yyb.test_row List of relations Schema | Name | Type | Owner | Size | Storage | Description --------+----------+-------+-------+-------+----------------------------------+------------- yyb | test_row | table | yyb | 60 MB | {orientation=row,compression=no} | (1 row) postgres=# \d+ yyb.character_test_row Table "yyb.character_test_row" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------+-----------+----------+--------------+------------- id | integer | | plain | | name | character(8000) | | extended | | name1 | character(8000) | | extended | | name2 | character(8000) | | extended | | name3 | character(8000) | | extended | | name4 | character(8000) | | extended | | name5 | character(8000) | | extended | | Has OIDs: no Distribute By: ROUND ROBIN Location Nodes: ALL DATANODES Options: orientation=row, compression=no postgres=# \dt+ yyb.character_test_row List of relations Schema | Name | Type | Owner | Size | Storage | Description --------+--------------------+-------+-------+---------+----------------------------------+------------- yyb | character_test_row | table | yyb | 2667 MB | {orientation=row,compression=no} | (1 row)解决方案1.脏数据和cu膨胀均可通过vacuum full analyze 表名进行解决。 2.character建议定长数据使用,不确定数据长度的场景下建议使用text或character varying代替。
-
单看产品文档的压缩比介绍,感觉在数据压缩比这块不占优势,能简单解释下吗?
-
问题版本:8.1.15问题现象:导入dws的license失败,前台报错:上传产品license失败排查步骤:1.检查license文件是否正确;正确2.排查manageone日志:cid:link_0发现报错:get cert config info from database failed3.登录dwscontroller容器查看ossre-dws.log 日志:发现有执行sql错误:锁等待超时 Lock wait timeout4.登录rms数据库所在节点;df -h 检查磁盘发现data目录100%进入data目录du -sh * 找到最大的文件进去查看最终发现audit.log太大了:审计日志将磁盘占满了清空审计日志:cat /dev/null > filename5.检查数据库状态:数据库节点su - root su - mysql Get_db_status.py发现备库挂了问题根因:审计日志满了导致数据库执行license相关的sql失败;解决方法:清空审计日志,做一下规避防止审计日志再次占满cat /dev/null > {需要清空的文件名}1.进入审计日志目录,清理审计日志文件(DWS-DB-01和DWS-DB-02)。 cd /data/ ; du -sh audit.log //查看对应的审计日志大小 cat /dev/null > {需要清空的文件名}2.以root用户回到DWS-DB01节点,切到mysql用户,登录本地数据库。su - mysqlmysql --defaults-file=/data/mysql/etc/my.cnf -uroot -hlocalhost -P7306 -pxxxxxxx 3.执行set global audit_log_rotations=50; set global audit_log_rotate_on_size=20971520; 4.退出数据库,修改配置文件,保证重启也生效vim /data/mysql/etc/my.cnf增加审计日志轮转参数audit_log_rotations=50 audit_log_rotate_on_size=20971520保存退出。 5.观察审计日志是否开始轮转。 6.该参数是单节点生效,需要在每个节点执行。 7.(选做)如果不需要审计功能,可以登录库后设置关闭set globalaudit_log_policy=none; 每个节点都需要执行,该步骤请谨慎选择。如果备库挂了需要拉起备库1.查看另一个节点是否为主节点,ip a,浮动ip在该节点则说明其是主节点2.登录备节点,切换到mysql用户,使用pathon脚本进行重建python /usr/local/bin/MHA_RebuildSlave.py ip //ip为对应主节点对应的ip3.等待build完成,查看备节点mysql进程是否正常 ps -ef|grep mysql 有mysqld则正常
-
一、版本信息:线下811二、定位过程1.主备OMS节点okerberos状态均异常2.查看oms-krb5kdc.log,报错 Cannot bind to LDAP Server;Unable to read Realm3.执行ldapsearch -H ldaps://节点ip:端口 用户名 密码 有时能连,有时不能连,不能连,报错 Can't contact LDAP server [-1]3.查看ldap进程,发现进程存在4.查看ldap得运行和启动日志,均正常5.手动启动 okerberos服务,krb_server.sh,仍然异常6.对比du -sh /srv/BigData/ldapData/oldap和du -sh /srv/BigData/ldapData/ldapserver,发现oldap比ldapserver小很多7.怀疑oldap数据有缺少68停止主备oms7.将ldapserver的数据目录/srv/BigData/ldapData/ldapserver拷贝给oldapserver的/srv/BigData/ldapData/oldap目录8.启动oms,状态恢复
-
一、版本信息:线下813二、定位过程1.安装集群到第7步配置集群失败2.查看postinstall.log,报错 mppdb-install-config.xml解析错误3.查看该文件显示内容为空,在主oms节点没有该文件4.查看preinstall.ini,g_hostname_conf字段的ip显示有误,应该是管理ip-业务ip-主机名,现场是业务ip-管理ip-主机名5.hostname -i 显示的是管理ip,正常应该是业务ip6.现场在LLD规划工具填写ip是管理ip和业务ip顺序写反,改过来后,重新生成preinstall.ini,重装成功备注:您所上传的图片不在允许的白名单范围内,请通知管理员添加白名单或者下载后通过本地上传的方式进行上传。
-
一、问题版本:811二、问题现象:oc 许可管理 dws服务许可状态连接异常三、问题排查:1.查看异常旁的?提示:请求4002.检查是否导入license文件;通过一线得知之前是导入了license文件但是hcs升级后licanse文件就没有了四、规避方法:重新导入license文件
-
问题现象: 创建集群在执行到RdsInitInstanceTask时失败问题版本: HCS 8.2.0 DWS 8.2.0问题分析: 1.登录cdk修改参数needDeleteCluster参数为false 2.发放集群,并登录节点,查看网卡情况,有bond,enp集中式,分布式网卡标识同时存在,且只有一个bond0绑定了ip 3.查看规格对应的底层规格 select c.* from rds_cluster_spec a ,rds_cluster_instance_resspec b,rds_resSpecAttr c where a.id=b.cluster_spec_id and b.instance_spec_id=c.specId and a.`code`='console界面显示的规格名'; 查询结果networkType 的值为sdi 4.确定客户网卡为集中式网卡问题根因: 在serviceOM 数据仓库服务 自定义规格时网关选择错误,应该选择集中式网卡解决方法: 删除失败的集群,删除有问题的规格,重建正确的规格,选择集中式网关,重建集群成功
-
一、版本信息:纯软800二、定位过程1.页面有ntp服务器异常告警2.查看oms状态,所有组件均正常3.检查主oms 节点防火墙,关闭状态4.ntp调试:ntpdate -d 外部始终源IP,能连通5.执行ntpq -np检查时间同步状态,外部始终源的refid状态为.INIT.6.查看ntpChecker.log、ntp.log、ha_ntp.log、ntpMonitor.log,未发现有用报错信息7.检查配置文件 /etc/ntp.conf,未发现错误8.切换主备oms,新的主oms检查时间同步状态正常;新的备oms也同步正常9.再次切换主备oms,检查主备oms节点的ntp同步情况,均正常
-
一、版本信息:HC DWS810.100二、定位过程1.一个磁盘得使用率相比其他盘高出10%,约150G2.通过du -sh *,一层层进入该盘下,找到占用磁盘高得目录为base3.进入base目录下,找到占用空间大的库目录4.分别进入正常磁盘和异常磁盘下得base下得该目录,ll *.10,个数相等,应该不是表倾斜场景5.lsof -n $data目录 |grep deleted,有许多记录,应该是文件句柄未释放导致盘使用率高6.执行clean connection to all for database xxx,一段时间后,空间下降备注:贴上图片,发布不了,将图片去掉就能发布
-
例如不小心将GBK的“场景”插入到UTF8数据中select '鍦烘櫙' as a,convert_from(convert_to(a,'GBK'),'UTF8'); a | convert_from --------+-------------- 鍦烘櫙 | 场景(1 row)convert,convert_from,convert_to函数利用好,字符集轻松转换到正确的字符集。
-
获奖名单:cid:link_7数据库是计算机软件领域的冠上明珠,它可以向下发挥硬件算力,向上支撑各类应用, 在软硬件栈中起到了承上启下的作用。自从1964年数据库概念被提出,经过 60年来的蓬勃发展,数据库已经被广泛应用到各行各业,成为了 IT 领域不可或缺的基础软件。随着云基础设施的逐渐成熟以及企业用户的需求(软硬件维护成本降低)推动,云数据库近十年也不断崛起,华为云顺应趋势,也推出了基于华为云架构的数据库系列产品GaussDB。而其中的华为云数据仓库产品GaussDB(DWS)自发布以来广受关注,该产品现已应用于全球60多个国家和地区,服务于全球1700+客户,包括工行/招行/国网/一汽/梦饷/兴盛优选等,覆盖全行业场景。为了让广大的开发者朋友们可以近距离地体验、交流华为云数仓产品GaussDB(DWS),我们特举办本次“玩转PB级数仓GaussDB(DWS)”征文活动,邀请大家分享自己在学习、使用DWS产品过程中的心得与体验,你所了解的DWS技术架构、调优妙招、维护宝典、周边工具使用经验、反馈建议等等,都可以与我们分享。同时我们准备了免费沙箱实验室,提供环境与实验指导手册,我们也期待你与我们分享产品使用心得。☞如何参与?第一步:点击下方链接,选择“免费沙箱实验”或“0.99元试用云数仓”进行体验。>>>免费沙箱实验:如何实现GaussDB(DWS)性能调优>>>0.99元试用云数仓GaussDB(DWS)试用指南见文末附件处PDF文件:第二步:在本社区发布博文,分享你的技术经验和体验心得。>>>点我发表博文注意:1、标题必须以【玩转PB级数仓GaussDB(DWS)】结尾。2、文章末尾需加上下面两句话:【一起来玩转PB级数仓GaussDB(DWS),分享你的技术经验与体验心得,赢开发者大礼包!】第19期有奖征文火热进行中!此外,在云声平台提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会获得额外惊喜。3、文章跟华为云产品相关,所以需要同时加上【DWS】和【云端实践】标签。· 以上奖品均为实体奖品。☞我们需要哪些主题的稿件?写与GaussDB(DWS)数据库有关的一切皆可,包括产品体验、沙箱/试用体验。如果你还不知道该怎么写,参考下面3篇往期征文内容,可以让你更快上手:GaussDB(DWS)的CPU资源隔离管控能力【这次高斯不是数学家】GaussDB(DWS)功能及配套工具丨【这次高斯不是数学家】华为云原生之数据仓库服务GaussDB(DWS)的深度使用与应用实践【这次高斯不是数学家】☞你将获得什么?我们会把收到的优质内容汇编成册,并注明原作者,积累行业口碑,开放给圈内开发者下载查阅,提供实践参考。对于贡献优质内容的作者,我们还将送出各项大礼!同时,在华为云站内外10+个技术社区进行推荐,给与百万级流量资源。优质作者更可获得长期约稿和更多内容合作机会。☞评奖规则说明华为云开发者社区、EI团队将联合评审此次征文。专家评分依据 :文章篇幅、技术含金量、排版美观度、阅读量、点赞、收藏等指标综合评分。其他说明:1、一二三等奖不能叠加。2、一二三等奖可与创作小能手奖叠加。3、征文投稿数量不计入月度激励活动文章数量。如果大家在征文中遇到有关华为云产品体验方面的问题建议,请到【云声平台】提出您的宝贵建议,标题以【云驻计划-定向征文】开头,还有机会赢取额外奖励。☞有哪些需要注意的1、文章内容需体现技术看点,图文并茂,建议字数在500字以上;2、文章要求为投稿人原创,凡转载或抄袭一经发现将取消参赛资格;3、文章须在华为云社区为首发,如华为云平台已有文章内容则视为稿件无效;4、稿件投稿后,华为云拥有该稿件的使用权、修改权等;5、因库存等原因,奖品可能会替换为等值礼品。☞问题咨询如果有任何问题,可扫描下方二维码咨询。添加微信时请备注:有奖征文+华为云博客昵称!更多GaussDB(DWS)技术干货、实践经验,点击了解详情为了更好地解决开发者遇到的问题,我们提供智能客服小D,24小时即时答疑,点击了解详情华为云GaussDB(DWS)推出了开发者认证课程,帮助开发者全面掌握数据库相关知识,点击了解详情
-
问题版本: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)
推荐直播
-
华为云码道 × 仓颉编程:工程化AI编码探索2026/05/27 周三 19:00-21:00
刘俊杰-华为云仓颉语言专家/李炎-华为云码道技术专家/王智鹏-OpenCangjie开源社区发起人
本场直播围绕华为云仓颉语言与华为云码道的深度结合,展示华为云智能编程从零基础到高效落地的完整生态能力。以华为云码道为引擎,仓颉语言为载体,带给大家日常提效、趣味创新到极速量产的开发体验。
回顾中
热门标签