• [其他] 【总结】【内存】DWS内存问题定位三板斧
    内存问题常用定位视图目前,GaussDB DWS对外提供诸多系统视图,可以用来辅助内存问题的分析定位,常用视图及用法说明如下表所示。(☆代表常用程度)pv_total_memory_detail ☆☆☆☆☆查询当前实例上整体内存使用状态和信息,可以看到各类型内存使用情况,来对当前实例上内存使用情况做一个概要的判断。SELECT * FROM pv_total_memory_detail;返回结果如下:表1 Memorytype中各类型含义名称描述max_process_memory实例可用最大内存阈值。由guc参数max_process_memory控制。process_used_memory实例当前已使用的内存值,从OS top命令RES列取得。如process_used_memory已经或马上要超过max_process_memory,说明当前内存使用已经超限,或马上就要超限。max_dynamic_memory实例可使用的最大动态内存dynamic_used_memory实例当前已使用的动态内存dynamic_peak_memory实例从启动后到目前为止的动态内存峰值dynamic_used_shrctx当前已使用的共享内存上下文内存量,也记录在dynamic_used_memory内dynamic_peak_shrctx共享内存上下文峰值。如减去sctpcomm_peak_memory后超过1G,说明共享内存没有释放,存在泄漏。max_shared_memory最大共享内存,主要为shared_bubffers。shared_used_memory实例当前已使用的共享内存,从OS top命令SHR列取得max_cstore_memory列存buffer可使用的最大内存,由guc参数cstore_buffers控制。cstore_used_memory实例当前已使用的列存buffer.max_sctpcomm_memory通信模块可使用的最大内存。sctpcomm_used_memory通信模块已使用的最大内存sctpcomm_peak_memory通信模块峰值内存other_used_memory其他内存占用,为OS  RES- dynamic_used_memory- shared_used_memory- cstore_used_memory后的值。一般为系统中不受memory context管理的第三方组件所占用的内存。如果过大,也有可能是内存泄漏。 pv_session_memory_detail ☆☆☆☆☆查看内存上下文级别的内存占用详细信息SELECT * FROM pv_session_memory_detail ORDER BY totalsize desc LIMIT 100;视图中各字段含义如下:名称类型描述sessidtext线程标识+线程启动时间。使用substr可以将线程号过滤出来,方便和上述其他视图进行关联。sesstypetext线程名称。contextnametext内存上下文名称。levelsmallint当前内存上下文的层级。parenttext父内存上下文名称。totalsizebigint当前内存上下文的内存总数,单位字节。指的是分配给当前内存上下文的内存总数,为freesize+usedsize之和。freesizebigint当前内存上下文中已释放的内存总数,单位字节。是指当前你内存上下文中预留的内存,只有这个内存上下文可以使用,其他线程及其他内存上下文都不能使用,实际还是当前内存上下文中占用的。usedsizebigint当前内存上下文中已使用的内存总数,单位字节。内存问题定位方法及解决措施Memory is temporary unavailable问题当出现memory is temporary unavailable报错后,首先确认是哪个实例报错,是CN还是DN。使用gsql登录到报错的实例上,查询pv_total_memory_detail,重点查看以下信息:当前是否还存在内存不足问题。方法为查看process_used_memory和max_process_memory的关系,如已经大于或比较接近,则说明当前内存使用已经或即将超限。如明显小于,则说明占用内存大的语句已经跑完或者被杀掉。当前系统已经恢复。这时可查看对应的peak_memory值,如peak_memory值过高,说明确实曾经出现过内存使用过大。当前是哪个类型的内存过大。最常见的是dynamic_used_memory过大,说明动态申请的内存过大,这类问题可能和客户正在运行的SQL强相关。如通过2发现当前内存占用仍过高,则进一步使用pv_session_memory_detail继续分析,看内存占用过高是哪个内存上下文引起的。视图中有线程号信息及内存上下文信息,通过这些信息可以判定是什么语句的什么操作占用了过多内存,进而可以cancel此语句,并给客户提出语句优化建议常见语句问题为:SQL不下推。如内存问题在CN上出现,很大程度上是因为某个SQL的不下推导致。通过explain确认语句不下推后,将语句进行修改使其下推。中间结果集倾斜。GaussDB DWS在进行表关联时,优先使用hash join,需要对一张表创建哈希表,当哈希表大小超过work_mem限制时,会进行下盘避免内存占用过多,但如果原始表里或中间结果集中在join列上存在大量重复数据,是无法下盘的,必须全部载入内存中进行计算,会造成内存大量占用。如pv_session_memory_detail中占用内存最大的内存上下文为hash context,则大概率是此问题。这时应对客户的表和SQL进行分析,对重复值进行处理后,再进行关联。如通过3没有发现内存占用过高的单个语句,但系统整体内存占用仍过高,则问题原因为参数配置不合理或用户语句并发设置不合理。局点上线后,或局点业务量增大后频繁报内存不足,很可能是因为max_active_statements设置过高,高并发的语句加起来后超出了系统可用内存上线,此时如检查第一点中参数都合理后,应将max_active_statements调小,让语句排序进行,避免一起运行时报错。局点新上业务后报内存不足,很可能是因为新业务较为复杂,有多个表join、sort或group by。此时如分析不存在中间结果集倾斜,则需要将并发调小,或将work_mem调小。以上操作都可能导致业务响应时间变长,需要和客户确认。max_process_memory设置过小,导致内存不能充分利用而提前报错。shared_buffer/cstore_buffer设置过大:shared_buffer设大可以增大缓存空间,提高数据读取效率,但如设置过大,会导致语句运行时无法申请到足够的动态内存,导致报错。work_mem/maintainence_work_mem设置过大:在高并发场景下,work_mem设置过大可能导致所有语句的work_mem加起来超过可用动态内存的最大值,从而导致报错。参数配置不合理。需评估系统关键内存参数是否设置合理。如用户将POC环境直接转为生产。POC环境为了追求极致性能,一般内存参数设置比较激进。而生产系统需要长期稳定运行,内存参数设置应相对保守,此时应调整相关参数。语句并发设置不合理。此问题与参数配置不合理问题相关。语句并发高,则内存参数配置应较小;反过来说,如内存参数配置较大,则可支撑的语句并发也就相应的要变低。如分析时已没有现场,则有3个方法来确认什么语句导致了问题。 到报错的节点日志中搜索全部memory is temporary unavailable报错,分析可能是哪个语句导致的。重新让客户运行业务,或等下次业务高峰期时进行分析。打开active sql。打开后会将内存相关信息记到系统表中。执行如下语句打开active sql开关来分析某一时间段并发量和单个sql执行使用的内存信息(如果enable_resource_track和enable_resource_record为off表示该功能关闭)。gs_guc reload -Z coordinator -Z datanode -N all -I all -c 'enable_resource_track =on' ; gs_guc reload -Z coordinator -Z datanode -N all -I all -c 'enable_resource_record =on' ;Active sql分析方法如下: 查询2018-11-9峰值内存使用top10的SQL。SELECT * FROM pgxc_wlm_session_info WHERE start_time like '%2018-11-9%' ORDER BY nodename,max_peak_memory DESC limit 10;查询2018-11-9CPU使用top10的SQL。SELECT * FROM pgxc_wlm_session_info WHERE start_time like '%2018-11-9%' ORDER BY nodename,total_cpu_time DESC limit 10;查询2018-11-9查询时间最长的top10的SQL。SELECT * FROM pgxc_wlm_session_info WHERE start_time like '%2018-11-9%' ORDER BY nodename,duration DESC limit 10;查询2018-11-9SQL执行失败,错误信息为“memory is temporarily unavailable”且最大峰值内存超过1G的SQL。SELECT * FROM pgxc_wlm_session_info WHERE start_time like '%2018-11-1%' and status='aborted' and abort_info like '%memory is temporarily unavailable%' and max_peak_memory >1000 ORDER BY max_peak_memory desc;查询不下推的SQL。SELECT * FROM pgxc_wlm_session_info WHERE start_time like '%2018-11-9%' and query_plan like ‘%_REMOTE_TABLE_QUERY_ %’;查询不下盘的SQL。SELECT * FROM pgxc_wlm_session_info WHERE start_time like '%2018-11-9%' and warning like‘%spill%’;操作系统OOM问题查看/var/log/messages目录下的OS日志,搜索oom-killer,确认是否为gaussdb进程触发的OOM。分析数据库内存参数,确认设置是否合理,特别是max_process_memory。查看集群配置情况和关键参数常用语句集群每个物理节点内存、每个节点dn个数。SELECT sessid, contextname, level,parent,totalsize,freesize,usedsize,  datname,query_id  FROM pv_session_memory_detail a , pg_stat_activity b  WHERE  split_part(a.sessid,'.',2) = b.pid and b.state='active' ORDER BY usedsize desc limit 20 ;监控session total memory size占用最多的TOP20 session 。SELECT sessid, sum_total, sum_free,sum_used, query_id, query_start, state, waiting, enqueue,query from (select sessid, sum(totalsize) as sum_total, sum(freesize) as sum_free, sum(usedsize) as sum_used from pv_session_memory_detail group by sessid  ORDER BY sum_total desc limit 20 ) a , pg_stat_activity b  WHERE  split_part(a.sessid,'.',2) = b.pid;监控session中占用内存最多的context TOP20 session。SELECT sessid, contextname, level,parent, pg_size_pretty(totalsize),pg_size_pretty(freesize),pg_size_pretty(usedsize),  datname,query_id, query  from pv_session_memory_detail a , pg_stat_activity b  WHERE  split_part(a.sessid,'.',2) = b.pid  order by totalsize desc limit 20 ;监控当前实例总totalsize memroy大小。SELECT pg_size_pretty(sum(totalsize)) FROM pv_session_memory_detail;监控当前实例总usedsize memroy大小。SELECT pg_size_pretty(sum(usedsize)) FROM pv_session_memory_detail;监控当前实例内存总体使用情况。SELECT * FROM pg_total_memory_detail;监控共享内存实时使用情况。SELECT * FROM pg_shared_memory_detail;
  • 【获奖名单公示~】免费学习大师课,打卡互动赢好礼~
    【活动主题】来源: 【获奖名单公示~】免费学习大师课,打卡互动赢好礼~活动已结束本期免费学习大师课,13天带您get数仓全技能!学习打卡活动已经结束,感谢各位小伙伴的参与!获得本期活动奖励的名单如下,恭喜以下小伙伴~【获奖名单公示】请获奖小伙伴于2021年3月23日前私聊微信小助手(扫描下方二维码或者微信搜索“GaussDBDWS”添加),反馈您的收获信息,逾期礼品作废哦^_^ 奖项名称获奖用户(昵称)奖品学神奖千江有水千江月华为手环标兵奖真爱无敌华为mini蓝牙音箱勤奋奖谭涟漪华为云定制T-shirt勤奋奖bzhtoot华为云定制T-shirt勤奋奖Hello Digger华为云定制T-shirt没有中奖的小伙伴不要气馁,培训课程打卡活动第二期已经开始,欢迎大家前往参与互动哦>>【打卡互动赢大奖】DWS王者挑战赛【推荐阅读】【最新活动汇总】DWS活动火热进行中,互动好礼送不停(持续更新中)  HOT 【博文汇总】GaussDB(DWS)博文汇总1,欢迎大家交流探讨~(持续更新中)【维护宝典汇总】GaussDB(DWS)维护宝典汇总贴1,欢迎大家交流探讨(持续更新中)【项目实践汇总】GaussDB(DWS)项目实践汇总贴,欢迎大家交流探讨(持续更新中)【培训视频汇总】华为云数仓GaussDB(DWS) 培训视频汇总(持续更新中)扫码关注我哦,我在这里↓↓↓
  • [性能调优] DWS数据倾斜处理技术与机架感知机制
    各位老师好:最近在学习DWS的过程中发现两个问题,第一个是DWS数据倾斜处理技术:倾斜值广播+非倾斜值重分布① T表对倾斜值做roundrobin操作,均匀分布到各DN ② S表对倾斜值做broadcast操作,保证与各DN的T表的倾斜值关联 ③ T表和S表对非倾斜值进行redistribute,分发到DN,请问这种处理模式是GUC参数设置还是可以根据对应session进行处理,如果是session级别是否有具体sql演示,另外DWS还有没有这种比较新颖的处理逻辑,区别于传统的hashjion,希望老师不吝赐教。第二个是关于HCIP文档中的一句话:GaussDB(DWS)采用全并行的MPP架构数据库,业务数据被分散存储在多个节点上,数据分析任务被推送到数据所在位置就近执行,并行地完成大规模的数据处理工作,实现对数据处理的快速响应。这个是不是类似机架感知机制,我知道阿里云数据库有这种就近查询机制,DWS是否已经实装此功能?麻烦各位老师帮忙解惑。
  • [热门活动] 吃元宵,庆团圆!
    华为云数仓GaussDB(DWS)祝大家元宵节快乐!
  • [对接系列] Gauss DB(DWS)对接系列-BI工具BIP对接
    配置过程:1.配置JDBC驱动;步骤1 上传jar包到/data/biee/wlserver/server/lib,请上传gsjdbc4.jar步骤2 在commExtEnv.sh中的变量WEBLOGIC_CLASSPATH后加上jar包信息,如下:cd /data/biee/oracle_common/common/binvi commExtEnv.sh添加: ${WL_HOME}/server/lib/gsjdbc4.jarWEBLOGIC_CLASSPATH="${JAVA_HOME}/lib/tools.jar${CLASSPATHSEP}${PROFILE_CLASSPATH}${CLASSPATHSEP}${ANT_CONTRIB}/ant-contrib-1.0b3.jar${CLASSPATHSEP}${WL_HOME}/server/lib/inceptor-driver-warp45645.jar${CLASSPATHSEP}${WL_HOME}/server/lib/gsjdbc4.jar${CLASSPATHSEP}${CAM_NODEMANAGER_JAR_PATH}"步骤3 连接Gauss DB登陆http://*.*.*.*:9502/analytics,然后点击管理点击管理 BI Publisher点击JDBC连接;添加数据源; 填写JDBC信息,并点击测试连接,然后点击应用,完成连接建立。数据源名称:GaussDB  --自定义驱动程序类型:Other数据库驱动程序类:org.postgresql.Driver连接串:jdbc:postgresql://*.*.*.*:25308/pocdb用户名:u1口令:*******简单功能验证,点击主页>报表;点击+;点击sql查询;填写数据库信息,点击确定;名称:gauss  --自定义数据源:选择新建的jdbc数据源;SQL:select * from t_date;点击数据>查看>表视图;
  • [热门活动] 【数据库·微话题】“GaussDB(for Influx)时序数据库”知多少,U盘、笔记本、玻璃杯送不停!
    本次微话题经华为云数据库创新Lab布道师 Shawn评定,中奖名单公示如下:活动名称奖项名称用户昵称礼品名称【数据库·微话题】“GaussDB(for Influx)时序数据库”知多少,U盘、笔记本、玻璃杯送不停!优质微话题中奖用户好久没出门《华为数据之道》书籍CocoLiu202首先,恭喜各位中奖;其次,请填写收件信息,一定要填正确哈!我们会尽快发出奖品。https://devcloud.huaweicloud.com/expert/open-assessment/qtn?id=579b3d6c200e48c18cf6860c397450ea获奖用户已私信通知,请在3个工作日内(2021年4月1日00:00前)找我领取,过期视为放弃。本期【数据库·微话题】是2021年的第一期微话题活动,特邀华为云数据库创新Lab布道师 Shawn与大家一起讨论“GaussDB(for Influx)时序数据库”知多少,欢迎大家畅言,还有好礼送不停。 专家简介: 华为云数据库创新Lab布道师 ShawnShawn在网络安全、数据库领域等方面有丰富的经验,2017年加入华为CloudBU云数据库创新Lab,主要从事华为云NoSQL服务的研发工作,特别对时序数据库有较深入的了解。=======【数据库·微话题】“GaussDB(for Influx)时序数据库”知多少?=======Part1 今日份微话题:1. 您使用的是什么时序数据库?2. 您的使用场景是什么?3. 您使用的时序数据库有什么优势,有什么不足?4. 您最想了解GaussDB(for Influx)时序数据库什么功能?最想有什么功能?活动时间:2021年2月26日-3月14日参与方式:直接在本帖下方回复以上话题的理解或评论评选方式:活动结束后,将由本次专家根据回复的数量和质量,评选出优质的回复活动奖励:《华为数据之道》书籍、笔记本、U盘、高硼玻璃杯、GAUSSDB字母笔7支/盒有效评论数量奖品名称奖品数量<=200条《华为数据之道》书籍2本>200条《华为数据之道》书籍2+N本高硼玻璃杯每100层,6个中奖名额 注:1)有效评论数是指,和今日份微话题所列举问题相关的内容回复2)书籍可更换为笔记本、U盘3)高硼玻璃杯可更换GAUSSDB字母笔7支/盒奖品展示:Part2【开年采购季】填问卷,0门槛抽奖,100%中奖!移动电源、U盘、懒人手机支架等你哟!提示1.本次活动回帖内容需满足华为云论坛发帖规范 https://bbs.huaweicloud.com/forum/thread-23077-1-1.html。2. 活动结束3个工作日将在此帖公布获奖名单,敬请关注。3. 奖品将在公示期结束后15个工作日内发出。4. 由于获奖用户自身原因(包括但不限于提供的联系方式有误、身份不符或者通知领奖后超过15个工作日未领取等)造成奖品无法发送的,视为获奖用户放弃领奖。5.活动一切解释权归华为云数据库所有。
  • [运维管理] GaussDB A 8001
    【功能模块】【操作步骤&问题现象】gaussdb数据库是否可以对存储过程SQL加密?如果不支持 能控制存储过程的权限不能?只能用不能查看这个用户写的存储过程内容
  • [运维管理] 【gaussdb 8.0产品】内存不足报错
    【功能模块】【操作步骤&问题现象】1、在没有批量操作的时候经常出现内存不足报错。求大佬分析下原因目前未截图【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [热门活动] 活动结束,获奖名单已公示【打卡互动赢大奖】DWS王者挑战赛,携手开启征战之路!
    活动主题:DWS王者挑战赛,携手开启征战之路!活动介绍:      为了让开发者朋友们能轻松学好用好华为云数仓GaussDB(DWS),我们推出了GaussDB(DWS)视频培训系列课程打卡活动,此为第二个系列课程,本系列共14节课程,从初级课程至进阶课程,更有华为认证GaussDB OLAP数据库高级工程师HCIP-GaussDB-OLAP等你来挑战,全方位带您深入掌握GaussDB(DWS)核心架构和硬核技能。本次课程帮大家制定了打卡计划,参与培训课程打卡,get数仓硬核技能,更有华为云定制机械键盘、双肩包、无线鼠标、旅行本套装等多重好礼等你来拿,活动即刻开启,凡在本主题帖中留言、参与打卡或论坛互动的用户均可参与抽奖哦~互动方式:(以下互动方式任选一种或多种)(1)盖楼:在本主题帖中跟帖盖楼,留言“重定义数据仓库,释放数据非凡价值!”;(2)留言:在本主题帖中跟帖留言(包括但不限于课程截图+学习心得、数仓产品体验感受、平台建议等);(3)转发:转发此贴至微信朋友圈并在公众号后台回复朋友圈转发截图。                                             (4)打卡:在本活动贴学习每天的课程,并在评论区打卡晒出您的视频课程截图+学习心得;(5)发帖:在数仓GaussDB(DWS)论坛发布关于本次认证的学习/考试心得、博文鉴赏、维护宝典、项目实践,主题附带话题:#DWS王者挑战赛 ,并将链接附在本活动评论区;(6)认证:完成HCIP-GaussDB-OLAP认证,将电子证书反馈至微信公众号后台。备注:微信扫描下方二维码加入GaussDB(DWS)大神学习交流群:(小助手会提醒大家学习打卡,最新的学习资源也会跟您一起分享哦)课程表:↓↓↓点击课程打卡哦↓↓↓荣耀黄金Ⅰ:《数据库服务:即开即用安全可靠》荣耀黄金Ⅱ:《GaussDB(DWS)概述》荣耀黄金Ⅲ:《7天玩转数据仓库(DWS)》荣耀黄金Ⅳ:《DWS中级工程师课程》荣耀黄金Ⅴ:《DWS高级工程师课程》璀璨钻石Ⅰ:《职业认证在线课程学习导读》璀璨钻石Ⅱ:《SQL进阶》璀璨钻石Ⅲ:《数据仓库设计与管理》璀璨钻石Ⅳ:《数据仓库安全》璀璨钻石Ⅴ:《数据仓库集群管理》璀璨钻石Ⅵ:《数据仓库迁移管理》璀璨钻石Ⅶ:《数据仓库高级特性》璀璨钻石Ⅷ:《HCIP-GaussDB-OLAP V1.5 考试大纲及样题》王者竞技:《职业认证》更多课程,敬请期待~活动时间:2月26日——4月30日评奖方式:互动奖*5:(以上互动方式任选一种或多种参与)奖       品:华为云定制双肩包评奖规则:参与华为云社区互动即有机会抽取。 粉丝福利*2(通过转发朋友圈参与)奖       品:华为云定制旅行本(套装)评奖规则:转发此贴至微信朋友圈并在公众号后台回复朋友圈转发截图。钻石奖*3:(完成所有课程的打卡)奖       品:华为云定制无线鼠标评奖规则:完成所有课程打卡的用户机会抽取;心得需是从当日课程中提炼出真实的学习感受。 王者奖*5(完成所有课程打卡且完成HCIP认证的用户有机会抽取)奖       品:华为云定制机械键盘评奖规则:完成所有课程打卡的用户完成HCIP认证有机会抽取;心得需是从当日课程中提炼出真实的学习感受。注意事项·         使用他人截图、打卡心得经发现视为作弊;·         一日打卡/补签两节课视为作弊哦,大家一定要跟上进度,每日完成打卡;·         每个ID只能参与一次评选,同一ID不可重复中奖;·         本次回帖内容需满足华为云论坛发帖规范 https://bbs.huaweicloud.com/forum/thread-23077-1-1.html;·         盖楼用户未通过公众号后台反馈盖楼截图,则奖励顺延至下一有效楼层。·         本活动最终解释权归华为云数仓GaussDB(DWS)所有。扫码关注我哦,我在这里↓↓↓快来参与挑战,开启你的王者之路吧!数仓GaussDB(DWS)培训打卡系列1>>>:https://bbs.huaweicloud.com/forum/thread-104049-1-1.html【问题求助】>点我提问<【发帖互动】>点我发贴<活动已结束【获奖名单公示】获奖小伙伴快快(ps:请在6月13日前)私聊小助手(扫描下方二维码或者微信搜索“GaussDBDWS”添加),留下您的获奖地址吧~奖项名称奖品中奖人昵称/账号钻石奖华为云定制无线鼠标linghz666钻石奖华为云定制无线鼠标每天都要有进步粉丝福利华为云定制旅行本(套装)聚对苯二甲酸乙二醇酯粉丝福利华为云定制旅行本(套装)不想赖床互动奖华为云定制双肩包一缕阳光互动奖华为云定制双肩包Archive互动奖华为云定制双肩包大吉利车队互动奖华为云定制双肩包yizhangl互动奖华为云定制双肩包Sundal
  • [实践系列] 为何时间戳数据写入和查询的值相差8小时
    有同学咨询,为什么存入DWS表的时候是2021-02-23 21:00:00【timestamptz格式的】,查询的时候差了8个小时啊?从表定义来看,该时间字段定义为带时区的时间戳,库内存储的数据为UTC时间2021-02-23 13:00:00,相差8小时,首先想到是由于时区配置问题导致。这类不一致一般是由于客户端和server端的时区配置不一致,导致时间数据在写入或者读出时发生了转换。请业务帮忙查看当前server的时区配置:从查看的时区配置来看,时间戳数据和存储的数据时区一致。说明时区转换不是发生在查询阶段,而是在写入阶段发生了转换。进一步了解数据写入程序的时区配置,反馈为上游数据来源于TSDB,通过RPC查询后写入DWS。时区刚好相差8小时。至此,真相大白了。如何去修复该问题呢,其实很简单。统一TSDB和DWS的时区配置即可。问题虽小,但在进行数据集成或分析运算时,时区的差异往往会带来不少的困扰,造成不必要的资源浪费。因此,有必要在系统规划时需要提前去考虑排查。
  • [热门活动] 微信公众号,get最新最全的数仓黑科技!
    关注数仓GaussDB(DWS)公众号:1.get最新最全的产品资讯2.定期更新精品博文,满满数仓黑科技;3.公众号粉丝活动,福利不停歇;快快扫码关注我们,一起探索交流!!!
  • [其他] 【迁移】c80 elk迁移至8.0 gaussdb之后,读取hdfs外表时部分字段乱码
    问题描述:同一个hdfs外表文件,在c80版本读取正常,在8.0版本读取时部分字段变为问号问题根因:源数据文件中本身存在非法字符,而c80默认不处理非法字符,8.0默认将包含非法字符的字段替换为问号,实际上是提高了数据准确性解决方案:上游处理掉源数据中的非法字符
  • [热门活动] 华为云数仓GaussDB(DWS)主页,产品信息一键获取,还有超多产品折扣哦~
    华为云数仓GaussDB(DWS),业界领先的企业级云分布式数据仓库服务。产品信息请扫码进入产品主页~
  • [技术干货] 华为云PB级数据库GaussDB(for Redis)解析第二期:Redis消息队列Stream的应用探讨
     本文作者:华为云高斯Redis团队简历投递:yuwenlong4@huawei.com引言:Redis Stream是Redis 5.0引入的一种新的数据类型,其本质是一个消息队列,类似于 kafka等消息中间件。它提供了消息的落地存储功能,并实现了类似kafka消费组和消费者的功能。与kafka相比,Redis Stream同样拥有强大的功能,但因原生Redis无法有效支持大规模数据存储,成本昂贵,并存在数据丢失/不一致风险等原因,导致其未能流行起来。本文将对Stream的常用命令和应用场景进行介绍,并探讨原生Redis Stream消息队列的缺陷以及GaussDB(for Redis)提供的解决方案,供大家学习和选用。一、Redis Stream简介与Pub/Sub相比,Redis Stream 具有消息的落地存储功能,每一个客户端能访问任意时刻的消息,并且能记录每一个客户端的访问位置,还能保证消息不会丢失。Redis Stream 的结构如下所示,它有一个消息链表,将所有加入的消息都链接起来,每个消息都有唯一的 ID 和对应的内容。如图所示,每一个Stream队列包含多条消息,每条消息由唯一的ID进行标识,由时间戳和序列号组成,例如1627849609889-0。每条消息以追加的方式添加到Stream队列中。同一个Stream队列可以包含多个消费组(Consumer Group),每个消费组的状态都是独立的,同一个Stream队列的消息可以被多个消费组重复消费。 同一个消费组又包含多个消费者(Consumer),这些消费者之间是竞争关系,不同消费者不会重复消费同一条消息,任意一个消费者读取了队列中的一条消息都会使消费组中的游标last_delivered_id往前移动。该方式提高了并发效率,例如,多个进程并发处理Stream队列中的消息。每个消费者中维持一个状态变量pending_ids,简称为PEL(Pending Entries List),记录了当前已经被客户端读取的但尚未被ACK的消息,确保消息被客户端成功消费。 Redis Stream命令可以分为消息队列命令和消费者命令两类,如下所示:以即时通讯中的聊天室场景为例,使用Redis Stream作为中间件,实现聊天室的发言以及信息查看。1)使用XADD命令进行发言。      2)使用XLEN命令获取聊天室发言的数量。     3)使用XRANGE获取消息队列的消息。     4)使用XREAD命令读取消息。可以在不设置消费组和消费者的情况下,使用XREAD的命令进行消息读取,此时Stream队列类似于一个普通的列表(list)。   更多的Redis Stream命令使用请参考官方文档(https://redis.io/commands/xread)。二、应用场景  由于Redis Stream天然有序,特别适合存储时序数据,应用场景包括即时通讯、智慧医疗、流量削峰、智慧城市等领域。(1)即时通讯:微信、QQ等是我们日常生活中常用的通讯软件,常用的聊天方式包含点对点通讯和群聊两种方式。下图是一个群聊的模型图,当采用Redis Stream作为通讯的中间件,创建一个群聊时,在Redis中对应地为该群聊创建一个Stream队列。在发送消息时,将每个用户的消息按照时间顺序添加到Stream队列中,保证了消息的有序性。由于Stream是一个持久化的队列,无论是在线还是离线状态,每个用户可以多次查看历史消息,保证了通讯的完整性。(2)智慧医疗:医疗行业的信息化,可以更好地服务于每一个人。为每一个人从出生起建立一份健康档案,记录相应的健康信息,如体检报告、诊断报告、用药信息、以及智能终端实时上传的健康指标。这些信息都是一些时序数据,同样可以采用Redis Stream来实现智慧医疗系统。建立起智慧医疗系统后,使用终端可以查看所有的医疗信息,并会提示患者按时吃药,在终端上传身体指标异常时,会自动报警并预约挂号。现阶段每个医院都有自己的信息系统,不同的医院很难查到同一个患者的医疗信息,在未来,医疗上云将有利于解决医疗信息孤岛,更好的帮助每一位患者。(3)流量削峰:在常见的秒杀活动或团购中,如春运抢票、商城促销等,通常短时间内有大量的流量,导致系统崩溃。由于每一个用户在请求时对应唯一的时间戳,所有的请求都有一个先后顺序,同样可以采用Redis Stream作为中间件,将请求加入到Redis Stream消息队列。将消息转存到消息队列间接提供给应用,而非直接发送给应用,可以防止大流量冲击导致的系统崩溃。当消息队列中的请求数量达到规定的最大值时,直接回复客户端抢购失败。三、原生Redis是否真的适用于以上场景?如上应用场景具有数据规模大、数据持续增长的特点,虽然原生Redis有良好的设计初衷,但是并不能解决实际问题。具体体现在:1)无法有效应对大规模数据:原生Redis是一个基于内存的数据库,单个节点存储容量有限,当扩展至TB级别的集群,将会出现管理困难,运维成本高等问题。2)集群扩容影响业务性能:原生Redis在进行集群扩容时,需要重新划分hash槽并进行数据迁移,必定会影响业务性能。3)数据可能会丢失:原生Redis虽然可以采用RDB和AOF的方式对数据进行持久化,但是并不会实时地将每一条命令写入到硬盘中,当出现掉电或集群崩溃的情况,必定会丢失一部分数据,对于类似智慧医疗场景,是难以忍受的。除此以外,必须考虑数据库系统的可用性、数据一致性、成本和备份恢复能力等情况:1)可用性: 原生Redis若采用一主一备的集群模式,当一对主备节点下线,集群部分数据将不可用。2)数据一致性:当主节点宕机,主备节点切换,数据存在没有完全同步的情况。3)成本:原生Redis是一种内存型数据库,当内存容量扩展至TB级别,成本将非常昂贵。4)备份恢复:需要人工连接数据库执行 SAVE或BGSAVE命令,不能支持定期自动备份,在恢复到新实例时需要手动拷贝备份数据。四、是否有更好的解决方案?在以上场景中,亟需一种能够存储和处理大规模Stream数据、鲁棒性强、且成本低廉的数据库系统。而GaussDB(for Redis)(下文简称高斯Redis)正是以上场景中一种很好的应用解决方案。高斯Redis是华为云数据库团队自主研发的兼容Redis协议的云原生数据库,该数据库突破原生Redis的内存限制,可轻松扩展至PB级存储,具有秒扩容、超可用、强一致和低成本等特点。五、总结Redis Stream可以广泛应用在即时通讯、智慧医疗、流量削峰等领域。在面对大规模的Stream数据时,原生Redis存在成本过高、容量太小、可用性差、数据不一致等问题,无法适用于海量消息队列的场景。与原生Redis相比,高斯Redis具有海量存储,低成本,可持久化等优点,可做为比原生Redis更理想的Stream队列承载方案。附:参考资料1. 《华为云GaussDB(for Redis)与自建开源Redis的成本对比》https://www.modb.pro/db/42739 2. 《一场由fork引发的超时,让我们重新探讨了Redis的抖动问题》https://bbs.huaweicloud.com/blogs/227525 3. 《当Redis遇见计算存储分离》https://developer.huaweicloud.com/hero/forum/thread-83188-1-1.html 4. 《GaussDB(for Redis)与原生Redis的性能对比》https://bbs.huaweicloud.com/blogs/236949 5. 《华为云PB级数据库GaussDB(for Redis)揭秘第一期:Redis与存算分离》https://bbs.huaweicloud.com/blogs/238584
  • [其他] 【扩容】添加主机成功后页面出现37014 Gaussdb进程锁文件已经存在的告警
    发生版本【GaussDB(DWS)】【6.5.1】问题描述添加主机成功后页面出现37014 gaussdb进程锁文件已经存在的告警问题分析cma的启停线程在start_datanode_check逻辑,判断进程不存在之后,会检查是否有gs_ctl在运行,如果有gs_ctl运行,会sleep(2)用来让gs_ctl build在执行的时候,有足够的时间创建gs_build.pid文件。这样会造成一个问题,2s前检测到dn进程不存在。进入进程不存在的判断逻辑,DN START,但是此时有概率dn在进行build,这个时候,会sleep(2),2s之后dn进程成功启动,cma再次拉起。解决方案按如下步骤可消除告警:1、先根据告警信息找到上报告警的dn对应的目录2、把目录下的postmaster.pid文件移到其他地方3、然后在kill出问题的dn对应的进程
总条数:2749 到第 页
上滑加载中