• [其他] GaussDB(DWS)管控面之OC告警服务探测异常(ELB可用性检查失败pod找不到)
    【问题版本】 HCS831【问题描述】 服务探测异常告警【问题影响】 无【问题根因】 做过安全加固,有的命令不能在拨测节点执行【定位过程】1、服务探测异常告警,url拨测任务ELB、BMS、IMS、ECS、DNS、VPC、EVS等可用性检查失败;1)告警基本信息:(以ELB为例)来源系统:OSS,告警源:DWS_XXX-region,附加信息:URL拨测=ELB服务可用性检查,云服务名称=DWS_XXX-region2)去URL拨测任务查看详情发现:拨测结果:失败,响应详情是:Error from server(NotFound):pods not found2、排查拨测点,DWS的是EICommon-Region-Master节点,拉MO同事,说是各个云服务都有这个问题,他们内部已提单处理,给出规避案例,规避后拨测任务不再是未知状态,恢复正常;cid:link_03、url拨测他们做过安全加固,有的命令不能在EICommon-Region-Master三个节点执行;【规避措施】1、登拨测点EICommon-Region-Master-01/02/03节点后台节点修改(修改前拷贝备份)脚本372行及多处:vi /opt/moopsagent/.runtimes/dialing-1.0/dial.py:set nu:3721)修改前(修改点在372行-383行):     366     @staticmethod      367     def _get_container_namespace(pod_name, kubectl_alias):      368         try:      369             command = '''%s get pods --all-namespaces | grep '%s' | awk -F " " '{print $1}' | head -1''' % (      370                 kubectl_alias, pod_name)      371             p = multiple_cmd_exec(command)      372             p.wait()      373             stdout, stderr = '', ''      374             if p.stdout.readable():      375                 stdout = p.stdout.read().decode('utf-8', errors='ignore').strip()      376                 p.stdout.close()      377             if p.stderr.readable():      378                 stderr = p.stderr.read().decode('utf-8', errors='ignore').strip()      379                 p.stderr.close()      380             if stderr:      381                 return False, stderr      382             else:      383                 return True, stdout      384         except Exception as err:      385             content = 'can not get name space.'      386             logger.error(f'can not get name space. {type(err)}')      387         return False, content 2)修改后(修改点在372行-383行): @staticmethod     def _get_container_namespace(pod_name, kubectl_alias):         try:             command = '''%s get pods --all-namespaces | grep '%s' | awk -F " " '{print $1}' | head -1''' % (                 kubectl_alias, pod_name)             p = multiple_cmd_exec(command)             stdout, stderr = p.communicate()             if p.returncode != 0:                 logger.error("multiple_cmd_exec err")             if stderr:                 return False, stderr.decode()             else:                 return True, stdout.decode()         except Exception as err:             content = 'can not get name space.'             logger.error(f'can not get name space. {type(err)}')         return False, content 2、自行对比修改,保存后等下次拨测任务自动生效; 
  • [其他] GaussDB(DWS)管控面之OC告警计量话单生成话单失败(jar包重复)
    【问题版本】HCS830、831【问题描述】计量话单生成话单失败告警【排查步骤】1、OC告警计量话单生成话单失败告警,失败资源类型包含dws-bms、dws-obs、dws-vm等多个服务,告警源信息:IAAS,告警源:SDR;PUB-SRV-01;PUB-SRV-02,2、搜controller日志没发现报错日志,SDR服务告警先找SDR人员处理;3、SDR侧排查日志发现抛异常Plugin init error,有提示注册的两个jar名;cid:link_0PUB-SRV01/02节点fsp登录,切root后查看/var/log/meterticket-agent目录下日志,如下日志:muitipal plugin class definition:com......DWSPluginImpl,jars:[dws-sdr-plugin-0.0.1.jar,dws-sdr-plugin-0.0.1-SNAPSHOT.jar]Inner exception:com......CollectException: BaseException [ErrorCode=Plugin init error,{},errorDescriotion=null]4、注册了新包,老包没有删除导致,删除老包后,让SDR 重服务即可;(PUB-SRV-01、PUB-SRV-02两节点都删除,重启SDR服务)【规避措施】1、分别使用fsp用户登录PUB-SRV-01、PUB-SRV-02节点,删除旧jar包:1)先查看/home/meteradmin/sdr-plugins/lib/下哪个是旧包;2)再删除:rm /home/meteradmin/sdr-plugins/lib/dws-sdr-plugin-0.0.1-SNAPSHOT.jar2、重启SDR服务:1)停止服务:su -s /bin/bash - meteradmin -c "sh /home/meteradmin/meterticket-*/bin/stop.sh"2)启动服务:su -s /bin/bash - meteradmin -c "sh /home/meteradmin/meterticket-*/bin/startup.sh"
  • [问题求助] 4C4D4副本中的4C4副本代表什么?
    4D是意思我知道,是代表4个DataNode。4副本的意义是有4个数据分片吗?4C的意思是4的CN节点吗?
  • [分享交流] 【分享交流】华为全联接大会2024,大家对活动有什么期待
    华为全联接大会2024将盛大开幕,大家对活动有什么期待
  • [技术干货] 大数据干货合集(2024年9月)
    GaussDB(DWS)中,这一整套文档预处理的规则称为全文检索配置(Text search Configuration)。全文检索配置决定了匹配的结果和质量。一个全文检索配置由一个解析器和一组词典组成。输入文档首先被解析器分解成token,然后对每个token逐个词典查找,如果在某个词典中找到这个token,就按照该词典的规则对其做Normalize。有的词典做完Normalize后会将该token标记为“已处理”,这样后面的字典就不会再处理了。有的词典做完Normalize后将其输出为新的token交给后面的词典处理,这样的词典称为“过滤型”词典。全文检索配置https://bbs.huaweicloud.com/forum/thread-0234161945025700010-1-1.html创建和使用索引https://bbs.huaweicloud.com/forum/thread-0287161944907691009-1-1.htmltsvector类型https://bbs.huaweicloud.com/forum/thread-0290161944851233012-1-1.html预处理方法https://bbs.huaweicloud.com/forum/thread-0257161944716747014-1-1.html多场景交互式查询https://bbs.huaweicloud.com/forum/thread-0257161940245198013-1-1.html一站式数据分析能力https://bbs.huaweicloud.com/forum/thread-0287161939567984008-1-1.html实时数据分析技术架构https://bbs.huaweicloud.com/forum/thread-0234161938494586009-1-1.html加密算法介绍https://bbs.huaweicloud.com/forum/thread-02127161937514248009-1-1.html数据倾斜https://bbs.huaweicloud.com/forum/thread-0257161937220604012-1-1.html单表点查性能差https://bbs.huaweicloud.com/forum/thread-0257161937001965011-1-1.html相关子查询https://bbs.huaweicloud.com/forum/thread-0292161936889611012-1-1.html表数据膨胀,未清理脏数据https://bbs.huaweicloud.com/forum/thread-02127161936476559008-1-1.html行数估算过小,走了nestloophttps://bbs.huaweicloud.com/forum/thread-0210161936358866013-1-1.html未分区剪枝https://bbs.huaweicloud.com/forum/thread-0204161936187665010-1-1.html语句不下推https://bbs.huaweicloud.com/forum/thread-02127161936058635007-1-1.html
  • [技术干货] 全文检索配置
    文档预处理大体上分如下三步进行:第一步,将文本中的单词或词组一个一个提取出来。这项工作由解析器(Parser)或称分词(Segmentation)器来进行。完成后文档变成一系列token。第二步,对上一步得到的token做标准化,包括依据指定的规则去掉前后缀,转换同义词,去掉停用词等等,从而得到一个个词位(lexeme)。这一步操作依据词典(Dictionary)来进行,也就是说,词典定义了标准化的规则。最后,记录各个词位的位置(和权重),从而得到tsvector。从上面的描述可以看出,如果给定了解析器和词典,那么文档预处理的规则也就确定了。在GaussDB(DWS)中,这一整套文档预处理的规则称为全文检索配置(Text search Configuration)。全文检索配置决定了匹配的结果和质量。一个全文检索配置由一个解析器和一组词典组成。输入文档首先被解析器分解成token,然后对每个token逐个词典查找,如果在某个词典中找到这个token,就按照该词典的规则对其做Normalize。有的词典做完Normalize后会将该token标记为“已处理”,这样后面的字典就不会再处理了。有的词典做完Normalize后将其输出为新的token交给后面的词典处理,这样的词典称为“过滤型”词典。如果指定了配置,系统会按照指定的配置对文档作预处理,如上一节创建GIN索引的命令。如果没指定配置,to_tsvector使用default_text_search_config变量指定的默认配置。
  • [技术干货] 创建和使用索引
    逐个扫描表中的文本字段缓慢低效,而索引查找能够提高检索的速度和效率。GaussDB(DWS)支持用通用倒排索引GIN(Generalized Inverted Index)进行全文检索。GIN是搜索引擎中常用的一种索引,其主要原理是通过关键字反过来查找所在的文档,从而提高查询效率。可通过以下语句在text类型的字段上创建GIN索引。必须使用to_tsvector函数生成tsvector,不能使用强制或隐式类型转换。而且这里用到的to_tsvector函数比前一节多了一个参数’english’,这个参数是用来指定文本搜索配置(Text search Configuration)的。关于文本搜索配置将在下一节介绍。不同的配置计算出来的tsvector不同,生成的索引自然也不同,所以这里必须明确指定,而且在查询的时候只有配置和字段都与索引定义一致才能通过索引查找。例如下面的查询中,前一个可以通过post_body_idx_1来检索,后一个找不到对应的索引,只能通过全表扫描检索。把输入文档和检索条件转换成tsvector和tsquery之后,就可以进行模式匹配了。GaussDB(DWS)中使用“@@”操作符来进行模式匹配,成功返回True,失败返回false。注意不同的查询方式可能产生不同的结果。例如下面的匹配不成功,因为::tsquery没对检索条件做标准化。
  • [技术干货] tsvector类型
    首先各个单词被摘取出来,其位置用整数标识出来,例如“fat”位于原始句子中的第2和第5个词的位置。此外,“a”这个词太常见了,几乎每个文档里都会出现,对于检索到有用的信息几乎没有帮助。套用香农理论,一个词出现的概率越大,其包含的信息量越小。像“a”,“the”这种单词几乎不携带任何信息,所以被当做停用词(stop word)去掉了。注意这并没有影响其他词的位置编号,“fat”的位置仍然是2和5,而不是1和4。另外,复数形式的“rats”被换成了单数形式“rat”。这个操作被称为标准化(Normalize),主要是针对西文中单词在不同语境中会发生的变形,去掉后缀保留词根的一种操作。其意义在于简化自然语言的检索,例如检索“rat”时可以将包含“rat”和“rats”的文档都检索出来。被标准化后得到的单词称为词位(lexeme),比如“rat”。而原始的单词被称为语言符号(token)。将一个文档转换成tsvector形式有很多好处。例如,可以方便地创建索引,提高检索的速度和效率,当文档数量巨大时,通过索引来检索关键字比grep这种全文扫描匹配要快得多。再比如,可以对不同关键字按重要程度分配不同的权重,方便对检索结果进行排序,找出相关度最高的文档等等。
  • [技术干货] 预处理方法
    在指定的文档中查找一个模式有很多种办法,例如可以用grep命令搜索一个正则表达式。理论上,对数据库中的文本字段也可以用类似grep的方式来检索模式,GaussDB(DWS)中就可以通过关键字“LIKE”或操作符“~”来匹配字符串。但这样做有很多问题。首先对每段文本都要扫描,效率比较低,难以衡量“匹配度”或“相关度”。而且只能机械地匹配字符串,缺少对语法语义的分析能力,例如对英语中的名词复数,动词的时态变换等难以自动地识别和匹配,对于由自然语言构成的文本无法获得令人满意的检索结果。GaussDB(DWS)采用类似搜索引擎的方式来进行全文检索。首先对给定的文本和模式做预处理,包括从一段文本中提取出单词或词组,去掉对检索无用的停用词(stop word),对变形后的单词做标准化等等,使之变为适合检索的形式再作匹配。 GaussDB(DWS)中,原始的文档和搜索条件都用文本(text)表示,或者说,用字符串表示。经过预处理后的文档变为tsvector类型,通过函数to_tsvector来实现这一转换。
  • [技术干货] 多场景交互式查询
    T+0实时分析业务场景中实时数据源种类繁多,针对不同数据源采用不同实时处理技术。时序引擎支持时序数据分析,内置100多种时序分析算法,将时序数据接入后实时合并;流引擎接入基于Kafka/Flink等流组件产生的流式数据,支持对流数据自定义持续计算。全并行批量分析基于Share-nothing分布式架构,华为云Gauss DB(DWS)天然具备大规模的分布式并行处理能力。多层级并行技术将系统性能推至极致,包括节点间并行、节点内SMP并行,CPU指令级并行以及动态编译技术。同时,通过自研TCP多流、多线程包合并、通信代理等技术,将scale-out能力推至极致,华为云GaussDB(DWS)也是目前唯一通过信通院2048节点大集群权威认证的分布式数据库产品。多场景交互式查询对短查询做了全流程梳理,从接入、SQL解析、计划发送、执行和数据扫描进行了一系列优化;由于Ad-hoc查询的负载具有不可预见性,经常可能会出现单一查询拖慢甚至拖垮整个集群的情况,华为云GaussDB(DWS)内置动态智能负载管理组件,实时监控运行状态和资源消耗,对异常作业自动预警并智能干预,例如内存占用过高,运行时间过长,大量数据广播等异常情况,系统会自动查杀等。以银行业务为例,“手机银行用户实时数据查询”与“网银系统交易流水批量作业”是最常见的业务场景,采用2套技术方案或2个平台分别处理,则会出现资源重复投入。使用华为云GaussDB(DWS)实现2个业务场景需求,数据无需反复转换和流转,提升了业务处理效率,节省运维成本。2小时可完成7万个核心业务的银行日增量数据归档和数据加工,同时支持手机银行终端7x24小时实时查询;当上千万个人用户与几十万企业用户同时使用系统,并发进行日间批量作业10万个的批量高峰期,实时查询可在3秒内响应,真正做到跑批和实时作业互不影响。
  • [技术干货] 一站式数据分析能力
    随着大数据观念逐步深入,数据分析带来的价值愈发被大家重视起来。从PC时代,到互联网时代、移动互联网时代,数据应用不再是简单的分析和挖掘,而是更加智能化。典型企业分析场景主要分为实时分析处理,批量分析处理以及交互式查询处理。当前常见的解决方案用不同技术解决不同问题:使用Hana,Oracle Exadata处理实时分析场景;使用Teradata,Greenplum处理批量分析场景;使用Oracle和SQL Server等处理交互式查询场景。从单一场景来看都是不错的选择,但是站在整体数据域视角去看,这种搭积木式的方案带来诸多问题,例如组件多,开发方式不统一,数据格式不统一,反复转换消耗算力和存储空间;组件间的数据流转开发复杂,流转效率低;跨集群,跨组件数据一致性差等。在全并行分布式架构上,无缝融合时序引擎、OLAP引擎、CEP引擎,同时支撑实时分析、批量分析和交互式查询等不同业务负载,达到开发统一、部署统一、维护统一、数据格式统一,真正做到一个产品包办的一站式分析;异构平台数据融合、协同分析,构筑全域数据一体化。当前企业IT系统不会是白纸一张,在不同阶段曾经采用不同技术建设的多套系统承载着不同的业务,这些系统还未完成历史使命,将延续使用相当长一段时间。华为云GaussDB(DWS)支持多样性的数据融合分析能力,无缝融合并协同分析企业现有平台数据,让老IT系统产生的数据焕发新价值。
  • [技术干货] 实时数据分析技术架构
    实时数据分析技术架构基于企业级内核,采用统一SQL引擎,多引擎协同,实现数据体系内自闭环,从而达到一份数据多个引擎调用,高效多维度分析。依据流数据和时序数据特征打造出从优化器、执行器到存储的全系列、高性能、可扩展的实时数仓,提供四大技术创新:1.    CEP引擎告别T+1模式改变传统数据先入库再查询的分析模式,CEP引擎提供流计算能力:数据先计算分析,并实时反馈计算结果,计算结果可以继续进行下一步计算或者保存,大大降低了数据处理时延。2.  1 = N:GaussDB(DWS) 实时数仓= Flink/Spark Streaming + Druid + InfluxDB……国内首创在同一套系统内实现流和时序数据的处理和预聚合操作,减少数据跨系统间迁移,降低冗余存储和加载时间,最大化的利用系统缓存,提高处理效率。3.    预置丰富时序、流处理函数,一切皆SQL采用最简洁高效的数据开发语言SQL,并预置丰富的时序和流处理函数,通过SQL即可完成复杂流式计算,可实现亿级数据,秒级聚合,极大简化应用开发。4.    高达40:1的压缩比,极大节约存储成本通过自适应压缩算法,充分利用行列混合存储+时序数据专用压缩算法优势,实现低时延查询和高效存储。
  • [技术干货] 加密算法介绍
    密码学中密码算法可以分为三类:哈希函数、对称密码算法和非对称密码算法。哈希函数哈希函数又称为摘要算法,对于数据data,Hash函数会生成固定长度的数据,即Hash(data)=result。这个过程是不可逆的,即Hash函数不存在反函数,无法由result得到data。在不应保存明文场景,比如口令(password)属于敏感信息,系统管理员用户也不应该知道用户的明文口令,就应该使用哈希算法,存储口令的单向哈希值。实际使用中会加入盐值和迭代次数,避免相同口令生成相同的哈希值,以防止彩虹表攻击。对称密码算法对称密码算法使用相同的密钥来加密和加密数据。对称密码算法分为分组密码算法和流密码算法。分组密码算法将明文分成固定长度的分组,用密钥对每个分组加密。由于分组长度固定,当明文长度不是分组长度的整数倍时,会对明文做填充处理。由于填充的存在,分组密码算法得到的密文长度会大于明文长度。流密码算法将明文逐比特与密钥流运算。流密码算法不需要填充,得到的密文长度等于明文长度。非对称密码算法非对称密码算法,又称为公钥密码算法。算法使用两个密钥:公钥和私钥。公钥向所有人公开,私钥保密。非对称密码算法应用于密钥协商、数字签名、数字证书等领域。数据加密是防止未授权访问和防护数据泄露的有效技术。介绍了密码算法的基本原理和GaussDB(DWS)数仓的加密函数,包括哈希函数gs_hash,对称密码算法gs_encrypt/gs_decrypt。
  • [技术干货] 数据倾斜
     问题描述某局点SQL执行慢,涉及大表的SQL执行不出来结果。分析过程数据倾斜在很多方面都会有体现:1)gs_ssh –c “df -h”查看各个数据磁盘的利用率,会有不均衡的现象。正常情况下,利用率最高和利用率最高的磁盘空间相差不大,如果磁盘利用率相差超过了5%就要引起重视。2)通过等待视图查看作业的运行情况,发现作业总是等待部分DN,或者个别DN。3)慢语句的explain performance显示,基表scan的时间和行数各个DN之间不均衡。数据最多的dn有22831616行,其他dn都是0行,数据有严重倾斜。4)通过倾斜检查接口可以发现数据倾斜。5)通过资源监控发现,个别节点的CPU/IO明显比其他节点高。问题根因GaussDB当前支持Hash表和复制表两种分布方式。默认创建的表是Hash分布的,如果不指定分布键,则选择表的第一列作为分布键。那么这种情况就可能存在倾斜的。倾斜造成的负面影响非常大。首先,SQL的性能会非常差,因为数据只分布在部分DN,那么SQL运行的时候就只有部分DN参与计算,没有发挥分布式的优势。其次,会导致资源倾斜,尤其是磁盘。可能部分磁盘的空间已经接近极限,但是其他磁盘利用率很低。可能出现部分节点CPU过高等等问题。解决详情如何找到倾斜的表:1)在库中表个数少于1W的场景,直接使用倾斜视图查询当前库内所有表的数据倾斜情况。2)在库中表个数非常多(至少大于1W)的场景,因PGXC_GET_TABLE_SKEWNESS涉及全库查并计算非常全面的倾斜字段,所以可能会花费比较长的时间(小时级),建议参考PGXC_GET_TABLE_SKEWNESS视图定义,直接使用table_distribution()函数自定义输出,减少输出列进行计算优化。
  • [技术干货] 单表点查性能差
    问题描述单表查询的场景下,客户预期1s以内返回结果,实际执行耗时超过10s。某客户反馈两个表的关联要去秒级返回,其中大表有2.7T,小表有100GB左右,查询结果一般都不大,过滤条件中有过滤性比价好的条件。分析过程1. 通过抓取问题SQL的执行信息,发现大部分的耗时都在“CStore Scan”。2. 分析出问题的场景:基表是一张十亿级别的表,每晚有批量增量数据入库,同时会有少量的数据清洗的工作。白天会有高并发的查询操作,查询不涉及表关联,并且返回结果都不大。3.可以看到两个表关联走了HashJoin,主要的耗时在基表扫描和HashJoin操作上。问题根因这种场景属于行列存表选择错误导致的问题。这种场景应该使用行存表+btree索引。解决详情调整表定义,表修改为行存表。同时建立btree索引,索引建立的原则:基于充分分析客户SQL的背景下去建立索引。索引要建立的刚刚好,不要有冗余。建立组合索引时候,要把过滤性比较好的列往前放。尽可能多的过滤条件都用到索引。主要的耗时点是在Hashjoin 和基表扫描上,这种情况下可以考用NestLoop+indexScan的计划。这种计划会把join条件下推到基表扫描上,然后利用基表的索引,提前把数据过滤掉。