• [技术干货] PLSQL语言
    GaussDB(DWS)中的PLSQL语言,是一种可载入的过程语言,其创建的函数可以被用在任何可以使用内建函数的地方。例如,可以创建复杂条件的计算函数并且后面用它们来定义操作符或把它们用于索引表达式。SQL被大多数数据库用作查询语言。它是可移植的并且容易学习。但是每一个SQL语句必须由数据库服务器单独执行。这意味着客户端应用必须发送每一个查询到数据库服务器、等待它被处理、接收并处理结果、做一些计算,然后发送更多查询给服务器。如果客户端和数据库服务器不在同一台机器上,所有这些会引起进程间通信并且将带来网络负担。通过PLSQL语言,可以将一整块计算和一系列查询分组在数据库服务器内部,这样就有了一种过程语言的能力并且使SQL更易用,同时能节省的客户端/服务器通信开销。客户端和服务器之间的额外往返通信被消除,客户端不需要的中间结果不必被整理或者在服务器和客户端之间传送,多轮的查询解析可以被避免。在当前GaussDB(DWS)的能力中主要支持两种过程化SQL语言,即基于PostgreSQL的PL/pgSQL以及基于Oracle的PL/SQL。
  • [技术干货] 数据可靠性
    对于服务可用性,主备从HA与三副本多数派复制和两副本最大可用HA相同,都能够容忍单副本故障。对于数据可靠性,主备从HA提供了强于两副本、接近三副本的能力。备机故障一段时间后恢复。从时间轴上看,可以分为P1主备同步、P2主从同步、P3备机追赶和P4主备同步四个阶段。 P1/P4:主备同步,数据拥有两副本可靠性,数据可靠性与传统两副本相同。 P2:发生单节点故障,主从同步,数据仍然具有两副本可靠性,优于传统两副本。此时如果主机磁盘损坏无法恢复,由于从备仍有一份数据,当备机恢复后即可提供服务,而传统两副本则必须等待主机恢复才能提供服务,否则会数据丢失。 P3:备机恢复后追赶P2阶段生成的日志和数据,此时主机仍然与从备强同步并正常服务。追赶阶段一旦发生主机故障,备机升主时可以连接从备补齐日志和数据并提供服务;而传统两副本则因备机没有追赶完成而无法恢复服务,否则会数据丢失。 以上,主备从HA在P2、P3阶段相比两副本有额外的可靠性优势。而相比三副本,只有在主备两节点都发生磁盘损坏且不可恢复的场景下,可靠性方面具有劣势。
  • [技术干货] 日志分叉与脑裂
    尽管GaussDB for DWS主备间是强同步,但各自落盘顺序总有先后。与绝大多数数据库一样,GaussDB for DWS的物理日志总是先写主机后写备机。如上图所示,主机崩溃前可能有一部分日志未同步给备机(红色部分未同步,蓝色部分已同步),备机升主后会提供服务,会写入新的日志(绿色部分)。由于物理日志按照lsn顺序递增,主机的红色日志与备机的绿色日志占用了相同的一段lsn,形成冲突,即日志分叉。 日志分叉可能带来严重问题,例如一旦分叉后发生集群重启,传统两副本方式可能无法通过日志长度判断应该选谁成为新主,选错将造成数据丢失(应选包含绿色日志的节点为主,因为其可能包含已提交事务;而红色段日志一定不存在已提交事务,可以丢弃)。 在引入从备后,主机故障备机升主,升主后将与从备进行强同步,因此从备上的日志一定与新主保持一致。在上述场景中,DN响应升主命令时可以额外判断从备日志,通过校验CRC来判断日志是否分叉,与从备日志一致的才能升主成功,从而保证了仲裁的正确性和数据的一致性。 此外,在极限断网、进程僵死、集群管理失效等场景下,有可能在主机存活时错误的将备机升主,形成双主脑裂。传统的两副本HA机制无法识别此类场景,只能通过外部加固手段减少脑裂发生的概率。而在主备从架构下,从备可临时作为仲裁者,类似三副本多数派机制。DN响应升主时与从备建连并进行日志校验,只有与从备形成多数派的主机才实际有效,而另外的主机因无法与从备强同步而自动失效,从而解决了脑裂的问题。
  • [技术干货] 主备从HA技术
    随着客户业务对数据可靠性和服务可用性要求的提高,主备架构在OLAP系统中也已被广泛使用。而分析型数据库往往数据量大,节点数多,分布式系统下发生硬件故障已成为常态。 对于传统两副本系统(一主一备最大可用HA模式),单节点故障后,为了服务可用性,一般都会选择让另一个正常节点继续提供服务,在故障节点恢复前数据只有单副本运行。而由于数据量大,往往故障节点修复时间和数据重建时间都很长,此时一旦正常主机再次发生故障,将造成数据丢失的严重后果。另外,根据分布式CAP原理,两副本系统一旦采用最大可用策略,将损失分区容错性(即脑裂双主,下文详述)。 尽管三副本通过多数派复制策略可以解决上述问题,但三副本带来了更多的存储成本开销,在OLAP数据库中无法成为主流解决方案。因此,GaussDB for DWS创新性的在数据节点(DN)引入从备概念,使得集群在任意单点故障时仍保持两副本可用,相比传统三副本节约了三分之一的存储空间,但数据可靠性基本持平。 GaussDB for DWS引入备机和从备的概念,正常情况下主机和备机通过日志流复制和数据页流复制进行强同步,主机与从备仅保持连接并不发送日志和数据,因此从备不占用额外存储资源。当备机发生故障时,主机自动感知,将未完成同步的日志和数据发送给从备,并保持主从强同步。主备同步向主从同步的切换在内核底层HA实现,事务层并不感知,因此不会造成任何报错和不一致。 同理,当主机发生故障时,由集群管理感知并仲裁备机升主,升主后的备机连接从备进行主从强同步。因此,在一组DN内发生单点故障后,不会影响服务可用性,同时数据仍然有两份副本的可靠性保障。
  • [技术干货] 内存管控
    实例级别内存管控:guc参数max_process_memory限制DN和CN实例的最大可用内存,当使用内存超过max_process_memory时,作业报错退出; 可动态申请内存:max_dynamic_memory=max_process_memory-cstore_buffers(max_cstore_memory)-(udf_memory_limit - 200M) - max_shared_memory; 资源池内存管控:使用并发点数计算可执行的并发数量,active_statements<=0情况下资源池内存不受控。资源池总点数:total_points = active_statements * 100,作业使用点数:active_points = (estimate_mem/respool_mem) * active_statements * 100,estimate_mem为优化器估算的作业内存,资源池点数耗尽出发排队。
  • [环境搭建] guassdb(DWS) ESL ESL (hybird) ESL(stream)有什么区别?
    在准备gaussdb DWS安装文档时,发现有3个版本的安装指南,请问这3个到底有何区别? 
  • [问题求助] 趋势看板的指标不显示
    前提条件满足,但是趋势看板不显示任何东西白名单参数趋势看板不显示任务东西 
  • [其他] GaussDB(DWS)serviceCM界面添加可用区报DWS.0001 Pattern check fail
    【问题版本】 HCS831【问题描述】 serviceCM界面可用区配置添加可用区报DWS.0001 Pattern check fail:【问题影响】 无【问题根因】是否复制配置这个字段校验不对【排查思路】1、serviceCM界面可用区配置添加可用区时复制配置为不复制时会弹框报DWS.0001 Pattern check fail: [copyConfiguration],[xxxxxxxx,^[a-zA-Z][a-z0-9A-Z_.-]*$]2、界面F12查报错/rds/v1/regions/zone/接口response也报DWS.0001一样的错;3、serviceCM界面日志管理操作日志如下:{"errCode":"DWS.0001","externalMessage":"Pattern check fail: [copyConfiguration],[xxxxxxx,^[a-zA-Z][a-z0-9A-Z_.-]*$]","error_code":"DWS.0001","error_msg":"Pattern check fail: [copyConfiguration],[xxxxxxxx,^[a-zA-Z][a-z0-9A-Z_.-]*$]","retCode":"DWS.0001","retMessage":"访问的资源不存在或不合法,请联系技术支持人员协助解决!"}4、原因是是否复制配置这个字段校验不对,规避方法就是选一个已有可用区把规格配置复制过来(内大网配置是全局的,跟az无关,所有az共用的一个配置);【规避措施】选一个已有可用区把规格配置复制过来,确认即可创建可用区;
  • [其他] ESL之告警周期备份任务失败
    【问题现象】    ALM-12034 周期备份任务失败告警说明:系统每60分钟执行周期备份任务,如果周期备份任务执行失败,则上报该告警,如果下次备份执行成功,则恢复告警。【常见版本】全版本   【定位思路】   1、可以参考产品文档检查/srv/BigData/LocalBackup备份路径挂载点的剩余空间是否小于20GB,小于清理空间即可查看日志/var/log/Bigdata/controller/backup/controller_backup.log,报错信息如下:Free spaces not enough, free space: xxxxxxxxx,localbackupPathMinSize is /srv/BigData/LocalBackup.2、若大于20GB,查看日志/var/log/Bigdata/controller/backup/controller_backup.log,是否会打印backup gaussdb File failed on xxx.x.x.x.3、如果是,请排查floatip和节点间互信是否有问题4、仅出现一次失败日志和告警,但是后续备份都是正常的,可能是由于网络闪断或发生主备切换导致一次失败可以忽略。
  • [集群购买/创建] GaussDB(DWS)下发集群卡50%进度最后失败(高速网络不通)
    【问题版本】 HCS831(其他版本也适用)【问题描述】 下发集群卡50%进度最后失败,无关键报错信息【问题影响】 无【问题根因】 裸金属接入交换机多组高速网络VLAN不通【定位思路】1、登录rms数据库查看失败task名称、jobid、执行任务的dwscontroller容器,操作方法:https://bbs.huaweicloud.com/blogs/427974;1) 失败任务:RdsInitInstanceTask;2) 拿对应失败jobid去dwscontroller容器grep 'jobid' ossres-dws.log | grep ERROR搜日志,只有如下信息:2025-xx-xx xx:xx:xx,xxx|xxxxx...xxxxx||ERROR|xxxxx...xxxxx|task[RdsInitInstanceTask] run fail.|com.huawei.hwclouds.taskmgr.job.impl.CommonJob.dealTaskResultFail(CommonJob.java:307)2025-xx-xx xx:xx:xx,xxx|xxxxx...xxxxx||ERROR|xxxxx...xxxxx|get dwsCreateInstanceJob JobConfig fail|com.huawei.hwclouds.taskmgr.job.impl.JobService.isNotAutoRolback(JobService.java:88)2、登录实例节点查看安装日志/home/Ruby/log/cloud-dws-deploy.log如下,发现只打到chroot步骤,无报错信息:[2025-xx-xx xx:xx:xx,xxx][INFO][xxxxx][xxxxxxxxxxxxxxx][init.py 571][Chroot succeed][2025-xx-xx xx:xx:xx,xxx][INFO][xxxxx][xxxxxxxxxxxxxxx][init.py 571][Chroot succeed][2025-xx-xx xx:xx:xx,xxx][INFO][xxxxx][xxxxxxxxxxxxxxx][init.py 469][Waiting to chroot finished][2025-xx-xx xx:xx:xx,xxx][INFO][xxxxx][xxxxxxxxxxxxxxx][init.py 469][Waiting to chroot finished]3、排查/home/root/log/ssh-agent-monitor.log日志如下,互信配置下发完成,无报错信息:[2025-xx-xx xx:xx:xx,xxx][INFO][create_trust][xxxxx][xxxxxxxxxxxxxxx][create_trust.py 217][Build authorized_keys succeed.][2025-xx-xx xx:xx:xx,xxx][INFO][create_trust][xxxxx][xxxxxxxxxxxxxxx][create_trust.py 311][Begin split authorized_keys file][2025-xx-xx xx:xx:xx,xxx][INFO][create_trust][xxxxx][xxxxxxxxxxxxxxx][create_trust.py 317][no need split authorized key]4、排查发现是节点互信有问题,进而排查是网络不通导致,集群节点间internalIp相互ping不通;1)  登录rms数据库查看rds_instance表获取internalIp,登录数据库方法见:https://bbs.huaweicloud.com/blogs/427974查询internalIp的sql:select id,name,status,manageIp,internalIp from rds_instance where clusterId='界面创建的集群ID';2)  登录实例节点ps -ef | grep ssh查询进程还在,未到达task的重试最大次数,但是前台已经超时失败了(task的最大重试次数是dwscontroller服务CDK参数 listenInitDbCount 乘以2);3)实例节点root用户执行cat /etc/hosts查看节点hostname对应ip验证连通性,发现CN1节点ping不通CN2和CN3节点IP;5、高速平面网络不通导致,需要找网络侧排查原因(仅提供协助排查思路,具体定位细节需要给网络创建关联单进行排查);1)定位是交换机高速平面VXLAN未打通(集中式跨leaf场景);2)属于高速平面网络不通,排查是由于3台BMS服务器没在同一组接入交换机内(serviceOM界面裸机服务器配置下可查看端口),接入交换机之间的高速网络VLAN没有放通导致,需要排查所有裸机接入交换机组;3)找数通侧检查交换机配置是否有遗漏,排查发现只配置了一个VLAN(最佳实践文档有说明是要放通所有的,是以一个为例),需要把规划的VLAN段都放开(交换机上配置高速VLAN),发放后再删除集群重新下发;
  • [分享交流] 【话题互动】2025留下你的新年学习目标
    2025留下你的新年学习目标,大家尽情分享吧
  • [技术干货] 大数据干货合集(2025年1月)
    集群迁移断点续做https://bbs.huaweicloud.com/forum/thread-0272173601021304058-1-1.htmlscp动作介绍https://bbs.huaweicloud.com/forum/thread-0251173601104528058-1-1.html全量备份的断点续做https://bbs.huaweicloud.com/forum/thread-0248173601167597069-1-1.html 节省内存开销的方法https://bbs.huaweicloud.com/forum/thread-0296173601214152058-1-1.html备份过程实质介绍https://bbs.huaweicloud.com/forum/thread-02104173601257779065-1-1.html集群全量恢复https://bbs.huaweicloud.com/forum/thread-0272173601309699059-1-1.html全量恢复介绍https://bbs.huaweicloud.com/forum/thread-02104173601356000066-1-1.html集群间scp中断后的断点续做https://bbs.huaweicloud.com/forum/thread-0296173601429619059-1-1.html一站式实现数据业务科学决策https://bbs.huaweicloud.com/forum/thread-0271173601660275056-1-1.htmlSQL引擎无法支撑复杂SQL查询的挑战https://bbs.huaweicloud.com/forum/thread-0251173601707163059-1-1.html消除数据孤岛https://bbs.huaweicloud.com/forum/thread-0296173601740524060-1-1.html资源管理简介https://bbs.huaweicloud.com/forum/thread-0271173601892622057-1-1.html计算资源介绍https://bbs.huaweicloud.com/forum/thread-02127173601939038055-1-1.html异常处理规则https://bbs.huaweicloud.com/forum/thread-02109173601978478069-1-1.html资源池并发队列https://bbs.huaweicloud.com/forum/thread-0272173602035469060-1-1.html   
  • [技术干货] 资源池并发队列
    全局并发队列采用GUC参数max_active_statements控制单个CN上运行并发执行的作业数量。采用全局并发队列机制将控制所有普通用户的执行作业,不区分复杂度,即执行语句都将作为一个执行单元,当并发执行的作业数量达到此参数阈值时,将进入队列等待。对于初始用户(Oid=10)执行的作业,不走全局并发控制逻辑。 注:max_active_statements限制单CN上运行的作业数,默认值为60,假设用户有3个DN,则实际全局并发上限为3*60=180; DDL和DML语句均受max_active_statements并发控制。 资源池并发队列包含快车道并发队列和慢车道并发队列,配置方式如下: CREATE RESOURCE POOL respool_a WITH (max_dop=10,active_statements=5); 其中max_dop为快车道并发上限,active_statements为慢车道并发上限。 注:资源池队列只限制DML语句,不限制DDL语句; max_dop限制单CN上资源池快车道并发数; active_statements在静态负载管理模式下限制单CN上资源池慢车道并发数,在动态负载管理模式下限制所有CN上资源池慢车道并发数之和。
  • [技术干货] 异常处理规则
    存储资源包含:持久表空间、临时表空间和算子落盘空间。临时表空间和算子落盘空间是作业运行过程中占用的空间,属于临时占用空间。持久表空间和临时占  用空间采用两种不同的管控策略,持久表空间管控通过对用户(队列)和schema空间限制实现,8.1.1版本之后的GaussDB空间管控均为单实例空间,防止出现数据倾斜导致的磁盘使用问题。临时占用空间同样支持在用户层级设置空间限额,另外还提供异常规则查杀临时空间占用异常的作业。异常处理规则GaussDB目前支持算子落盘异常规则,用户通过管控面或gs_cgroup工具设置算子落盘异常规则,设置异常规则后作业执行过程中算子落盘空间达到阈值后报错退出。 用户连接数据库执行SQL后,SQL会经过全局并发队列管控以及资源池队列管控。在作业进入管控逻辑前设置定时器,作业pending超时报错退出,作业经过队列管控开始运行前重新设置定时器,作业运行超时报错退出。作业下推DN执行时实时监控作业消耗的资源并上报CN,CN根据DN上报资源信息提供异常处理和监控视图。
  • [技术干货] 计算资源介绍
    资源管控通过对计算资源和存储资源分别管控实现作业间资源隔离,保证单作业异常不会影响到其他作业运行。下面分别对计算资源和存储资源管控进行概述: 1.计算资源 计算资源包含:CPU、IO和内存。GaussDB中CPU和内存资源关联在队列上,用户通过关联队列使用计算资源。队列按使用场景分为超户队列、默认队列和用户队列。其中超户队列不受资源管控,用于运维和故障修复;默认队列(default_pool)为数据库初始化阶段创建的队列,未关联用户队列的用户使用默认队列;用户队列为用户自己创建的队列,按照用户配置的并发和资源进行管控。IO管控基于逻辑IO实现,根据作业运行时间及优先级对IO进行管控,配置异常处理规则后,在系统IO达到瓶颈后,主动降低作业IO优先级。 2. 存储资源 数据库只读检测主要为防止出现磁盘满的问题,实现逻辑如下:cm_server开启enable_transaction_read_only情况下,每十分钟检查一次磁盘空间占用率,当 磁盘空间占用率超过阈值(默认90%)时,就通过guc参数设置数据库只读,数据库只读后只允许只读作业运行,作业发生写盘操作报错退出。但是因为数据库只读会导致用户所有业务无法运行,因此在磁盘空间占用率达到80%时会提前告警提示用户。