• [集群异常] GaussDB(DWS)【OS】集群告警出现大量D/Z进程
    D/Z告警排查一、D/Z进程解释D进程:什么是D进程:D 是 Disk Sleep 的缩写, 也就是不可中断状态睡眠(Uninterruptible Sleep) ,一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。为什么不能被中断:不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。而内核的某些处理流程是不能被打断的。如果响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程(这个插入的流程可能只存在于内核态,也可能延伸到用户态),于是原有的流程就被中断了。D进程的成因:D状态进程通常是由于IO末能及时得到满足,如果进程正在等待的IO没有及时完成或响应,那么就会在ps等输出中看到,而一旦IO完成,该进程就可以继续运行,D 状态自行消失。如果D状态一直无法得到IO满足,可能是外设本身出了故障,也可能是比如挂载的远程文件系统已经不可访问(由down掉的NFS服务器引起的D状态),kill -9 等命令都无法将其杀掉。这种情况下,除了等待IO恢复,或是重启系统,在系统层面并没有办法删除这些进程。D进程的危害:D进程持续存在PID一直未变化,可能引发服务器load负载高,CPU占用低的现象,导致服务器hang或者持续卡顿。Z进程:什么是Z进程Z 是 Zombie 的缩写, 它表示僵尸进程, 也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符.PID 等)。Z进程的成因:子进程先于父进程退出,子进程的用户空间被系统释放。但是这时,父进程没有读到子进程的返回代码,不知道子进程退出了。因为父进程没有读到子进程的返回代码,所以系统故意残留了子进程内核空间里的部分PCB,导致子进程没有被回收完全,从而产生了僵尸态进程。为什么系统会残留部分PCB:这个子进程是父进程创建的,这个子进程咋死的父进程总得知道啊。正巧的是,子进程的退出原因就放在其PCB里面,所以当父进程没有读到子进程的返回代码时,系统就会留下该子进程的部分PCB,以供其父进程来读取子进程的退出原因并回收该PCB,回收完成后,子进程也会退出僵尸态什么是PCB:PCB(process control block),进程控制块,是我们学习操作系统后遇到的第一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB中的内容。一般情况下,PCB中包含以下内容: (1)进程标识符(内部,外部) (2)处理机的信息(通用寄存器,指令计数器,PSW,用户的栈指针)。 (3)进程调度信息(进程状态,进程的优先级,进程调度所需的其它信息,事件) (4)进程控制信息(程序的数据的地址,资源清单,进程同步和通信机制,链接指针)Z进程的危害:由于僵尸进程并不做任何事情, 不会使用任何资源也不会影响其它进程, 因此存在僵尸进程也没什么坏处。不过由于进程表中的退出状态以及其它一些进程信息也是存储在内存中的,因此存在太多僵尸进程有时也会是一些问题。二、排查是否存在D/Z进程1.获取告警实例信息登录FIM界面->运维->告警->对象, 获取告警实例信息2.登录告警节点, 获取D/Z进程号和类型信息ps -elf | grep -v "\[thread_checkio\]" | awk 'NR!= 1 {print $2, $3, $4}' | grep omm | awk -F' ' '{print $1, $3}' | grep -E "Z|D" 三.定位手段3.1 D/Z进程偶现并自行消失:如果D/Z进程存在,过一会就消失,或者查到的D/Z进程经常更换pid,这种现象正常D进程​ D状态进程通常是由于IO末能及时得到满足,如果进程正在等待的IO没有及时完成或响应,那么就会在ps等输出中看到,而一旦IO完成,该进程就可以继续运行,D 状态自行消失。使用DWS时,批量的往数据库导入数据,如果导入的数据量大到OS脏页回写的速度赶不上写入的速度时,并且用户刷脏页的阈值到达,用户进程会需要主动刷脏页。OS脏页超过20%时,用户调write也需要主动的刷脏页,就会看到进程处于D状态,直到脏页水位下降到10%以下。另:操作系统脏数据相关参数调整命令(用于解决脏数据引起的操作系统内核卡顿,导致dn主备切换):相关参数:#dirty_background_ratio控制脏页占可用内存(空闲+可回收)的百分比,达到dirty_background_ratio时,内核的flush线程开始回写脏页。默认值: 10 vm.dirty_background_ratio = 10 #dirty_background_bytes控制脏页内存数量,超过dirty_background_bytes时,内核的flush线程开始回写脏页 vm.dirty_background_bytes = 0 vm.dirty_ratio = 20 #控制脏页所占可用内存百分比,达到dirty_ratio时,执行磁盘写操作的进程自己开始回写脏数据。默认值:20 #控制脏页内存数量,达到dirty_bytes时,执行磁盘写操作的进程开始回写脏页 vm.dirty_bytes = 0 #控制周期回写进程的唤醒时间,默认值为500,单位是厘秒,实际内核中是*10使用,即5s,也就是每隔5秒唤醒脏页回写进程,降低这个值可以把尖峰的写操作削平成多次写操作 vm.dirty_writeback_centisecs = 50 #控制dirty inode实际回写的等待时间,默认值是3000,即30s,只有当超过这个值后,内核回写进程才会将dirty数据回写到磁盘 vm.dirty_expire_centisecs = 6000推荐修改操作:#减少脏数据缓存相关参数 sysctl -w vm.dirty_ratio = 10 sysctl -w vm.dirty_background_ratio = 5 sysctl -p Z进程​ 状态表示进程正在终止或已经被终止,这时的进程可能正在进行一些清理工作或已经被完全终止。如果进程正在进行清理工作,其gstack、maps和stack信息可能仍然存在并可以被查看。但是,如果进程已经被完全终止,那么这些信息可能已经消失或无法获取。3.2 D/Z进程不消失:D进程应急处理:如果确认是D影响业务,需要重启服务器释放D进程排查是否是D进程影响的手段:1)使用 pidstat 查看这些进程的磁盘读写情况,如下:# -d 展示 I/O 统计数据,-p 指定进程号,间隔 1 秒输出 3 组数据 pidstat -d -p XXX 1 3 iostat -xm 1 3可以看到,这四个进程目前存在大量磁盘读写。2)查看其余资源情况top -p xxx如果看到load在不断增加,而进程占用CPU不高,但是IO压力很大,可以判定为该D进程导致,持续不能满足IO且大范围影响业务,建议立即重启服务器。Z进程应急处理:既然僵尸进程是因为父进程没有回收子进程的资源而出现的,那么,要解决掉它们,就要找到它们的根儿,也就是找出父进程,然后在父进程里解决。# -a 表示输出命令行选项 -p 表PID -s 表示指定进程的父进程 pstree -aps XXXkill -9 父进程即可D进程根因定位:方法一:# 记录性能事件,等待大约15秒后按 Ctrl+C 退出 $ perf record -g # 查看报告 $ perf report检查对应进程堆栈信息方法二:从RHEL5.5 版开始,RHEL包含一个内核线程,用于监视停留在D状态超过指定超时时间的进程。默认情况下,超时时间为120秒,可以使用内核参数 kernel.hung_task_timeout_secs修改或禁用它。当检测到此类进程时,该内核线程将有关该进程的信息(包括其内核堆栈跟踪)转储#超时时间,默认值120 echo '120' > /proc/sys/kernel/hung_task_timeout_secs #是否在检测到hung后panic,默认值0 --可选,不推荐修改 echo '0' > /proc/sys/kernel/hung_task_panic 进入 /var/log/messages查看堆栈方法三:使用sysrq工具将有关进程的信息发送到/var/log/messages# 启用sysrq的功能: echo 1 > /proc/sys/kernel/sysrq # 转储处于不可中断(阻塞)状态的任务。 echo w > /proc/sysrq-trigger # 将当前任务列表及其信息转储到您的控制台。 echo t > /proc/sysrq-trigger # 显示所有活动 CPU 的堆栈回溯。 echo l > /proc/sysrq-trigger这会将任务和线程信息转储到/var/log/messagesZ进程根因定位:cat /proc/${pid}/stack 四、相关案例【欧拉】xfs问题导致僵尸进程,D进程,集群不可用等问题五、参考文档麒麟V10,操作系统脏数据相关参数调整命令(用于解决脏数据引起的操作系统内核卡顿,导致dn主备切换)案例:系统中出现大量不可中断进程(D)和僵尸进程(Z)怎么办?LINUX云服务器进程D状态问题分析[僵尸进程产生原因和解决方法]内核Hungtask原理和定位思路总结Linux磁盘I/O(二):使用vm.dirty_ratio和vm.dirty_background_ratio优化磁盘性能
  • [集群异常] 【变更】升级813后报错An I/O error occurred while canceling to backend
    一、快速确认以下为触发条件:1.处于变更后未提交阶段或处于只读模式2.max_query_retry_times大于03.backtrace_min_messages设置为ERROR后,能在堆栈中看到pq_disk_send_to_frontend关键字满足以上三点,可确认为此问题二、问题概述 升级813版本完成后,客户端查询等返回报错An I/O error occurred while canceling to backend查看日志,实质上报错为Disk write is not allowed as default_transction_read_only is on.客户端未正确识别,直接报连接断开错误此状态可以确定是因为集群处于升级完成但没有提交的状态,是只读的 max_query_retry_times大于0时,开启CN retry功能  ,CN retry开启后,CN的结果集会buffer在CN本地,不会发送给客户端,避免返回数据后又需要报错时,无法进行查询重试CN retry缓存结果集时,当buffer不足时,会触发结果集下盘。下盘触发只读的FATAL报错FATAL报错发送给客户端,客户端未正确识别,直接报连接断开错误三、相关案例【业务连接】An I/O error occurred while sending to the backendGaussDB(DWS)现网案例之超大结果集接收异常【连接报错】An I/O error occurred while sending to the backend  
  • [开发应用] DWS支持实时流数据读取吗?
    用flink实时读取dws数据,结果执行一会显示任务成功,不能流式执行?难道dws不支持吗?
  • [开发应用] DWS能作为实时数据的数仓分层吗?就是不仅能实时写入,还能实时读取,处理后再实时写入
    DWS能作为实时数据的数仓分层吗?就是不仅能实时写入,还能实时读取,处理后再实时写入
  • [其他] GaussDB(DWS)管控面之DWS_10000告警(快照详情查询异常)
    GaussDB(DWS)管控面之DWS_10000告警(快照详情查询异常) 【问题现象】      OC可见告警ID为DWS_10000的告警,定位信息包含V1SnapshotController 。【常见版本】 HCS8.2.1    【分析原因】      1、首先查看OC告警详情中定位信息中包含关键字V1SnapshotController.getBackupDetail。  2、根据OC告警详情中附加信息中dwscontroller容器ID,查找ossres-dws.log,关键字DWS_10000。  3、再根据日志可以看到buildMultiBackupDetail方法会有空指针异常堆栈。  4、登录rms数据库,查询select name,backupDeviceId,clusterId from rds_cluster_backup,可见会有老版本集群会有backupDeviceId为null。  5、由于该字段为null与新版本不适配,故需要手动添加规避 【处理办法】 1、查询并拼接下列语句即可 update rds_cluster_backup set backupDeviceId=(select id from cluster_backup_device where clusterId='backupDeviceId为空的集群的集群id') where clusterId='backupDeviceId为空的集群的集群id';
  • [SQL] 【定位手段】手动查找cpu高sql
    前提:有现场1、确认cpu高的节点,要是所有节点都高找一个最高的2、通过top命令找一个cpu稳定高的进程process_id,对应此节点上的一个具体的实例。3、执行ps H -eo pid,tid,pcpu | sort -n -k 3 | grep {process_id}。按照cpu使用率升序排序,多次执行观察那几个thread_id的cpu使用率稳定高,记录thread_id。4、通过process_id查询到进程对应那个实例登录对应实例,命令如下ps -ef|grep process_id5、去上文实例路径下查询端口cat /data1/coordinator/postgresql.conf | grep port5、通过gsql登录该实例执行如下sql抓取cpu高的语句。select * from pg_stat_activity where query_id in (select query_id from pg_thread_wait_status where lwtid in (thread_id) and query_id <> '0');​
  • [迁移系列] 【PG迁移】表增加字段时if not exists
    1、 PostgreSQL 增加字段:Alter Table <table_name> add Column if not exists <column_name> <column_type>;2、GaussDB(DWS)折中替换CREATE OR REPLACE FUNCTION add_column(tbname character varying, colname character varying, coltype character varying) RETURNS void LANGUAGE plpgsql NOT FENCED NOT SHIPPABLEAS $$BEGIN begin EXECUTE format('ALTER TABLE %I ADD COLUMN %I %s',tbname,colname,coltype); exception when duplicate_column then null; when OTHERS then raise exception 'Error add column: %', SQLERRM; end;END$$;select add_column('schxx.tbxxx','new_column','varchar(11)');
  • [其他] 一天一个小知识 - SQL 临时表信息统计篇
    如何查询当前库内存在的临时表,以及临时表大小、所属用户、所属会话、倾斜率等情况?针对于GaussDB(DWS),临时表仅在当前会话可查询。换了其他会话后,会提示临时表属于其他会话,无法查询。GaussDB(DWS) 使一个分布式数据库,除了CN外,还有很多的DN。会话的执行,会同时在CN和DN上执行。从CN上无法查询,那么是否可以从DN上想办法入手呢?我们可以想办法从DN的系统表入手进行查询。​经过尝试,从DN上的系统表确实可以统计到临时表在这个DN上的信息。所以可以尝试收集集群所有DN实例上的临时表信息,在进行汇总。整理查询语句如下:selectsubstr(schemaname,(instr(schemaname,'_',-1))+1) as pid,substr(schemaname,9,7) as cooname,schemaname,tablename,ownername,sum(dnsize) as tablesize,round((max(dnsize)-avg(dnsize))/max(dnsize)*100,2) as skewpercentfrom pgxc_parallel_query('dn','selectb.nspname::text as schemaname,a.relname::text as tablename,c.usename::text as ownername,pg_table_size(a.oid)::numeric(38,0) as dnsizefrompg_class a,pg_namespace b,pg_user cwherea.relnamespace=b.oidand b.nspname like ''pg_temp%''and a.relowner=c.usesysid') tmp (schemaname text,tablename text,ownername text,dnsize numeric(38,0))group by 1,2,3,4,5,6;实际效果如下:注意:此语句适用于 8.1.3 及以后版本,8.1.3之前版本,可采用 execute direct on 进行改造。该语句仅能查询到非手动事务下的临时表信息。
  • [其他] DWS集群节点打开xxxx端口
    诉求:在节点安装监控工具,需要打开xxxx端口解决措施:1.修改节点防火墙设置:1)iptables -I INPUT 1 -p tcp —dport {要放通的端口} -j ACCEPT2)修改配置文件 /etc/sysconfig/iptables.save 参考8000端口进行配置,永久生效2.租户侧安全组放通对应的端口,入方向设置为any等3.修改完成可以尝试监控eth1网卡,   curl ip:端口   或者   telnet ip 端口
  • [其他] GaussDB(DWS)案例投稿指导
    1. 点击【案例投稿】(点击)进入案例编写界面板块:产品和服务/大数据/数仓GaussDB(DWS)分类:维护宝典,二层目录按照故障类型选择2. 案例内容推荐按照GaussDB(DWS)案例模板编写📄案例编写模板(点击)3. 投稿的案例会由GaussDB(DWS)定期进行审核筛选,具有案例参考价值的案例会在案例库中呈现🗂️案例库地址(点击)4. GaussDB(DWS)案例库说明GaussDB(DWS)故障案例库中收录的为精品案例,如需查看更多案例,请跳转《开发者论坛-维护宝典》(点击),此板块案例须经用户自行筛选判断是否有用。
  • dws-纯软环境下安装PostGIS-3.2.2
    线下安装postGis,注意刷新环境变量,注意刷新环境变量,注意刷新环境变量,重要的事情说三次。很多问题出现在环境变量中。另外注意在刷新其他使用$GAUSSHOME的环境变量之前,一定要先刷新source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile否则路径会出错1 准备软件包1.1 GCC-8.3编译器相关依赖软件包包括以下4个安装包[gcc-8.3.0、gmp-4.3.2、mpfr-2.4.2、mpc-1.0.3]:https://ftp.gnu.org/gnu/gcc/gcc-8.3.0/gcc-8.3.0.tar.gzhttps://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.gzhttps://ftp.gnu.org/gnu/mpfr/mpfr-2.4.2.tar.gzhttps://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz1.2 PostGIS-3.2.2 Extension源码包https://gitee.com/postgis-xc/postgis-xc-3.2.21.3 Zlib安装包(若未安装)https://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz/download2 GCC-8.3(GNU编译器套件)编译器安装*安装前注意集群中要有低版本的gcc和g++编译器,如果没有,需要找到镜像安装,详见: <安装问题汇总>以操作系统用户omm登录安装有MPPDB服务的任一主机。执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。b.创建GCC安装主目录$GAUSSHOME/gcc和代码下载目录$GAUSSHOME/gcc/packages mkdir $GAUSSHOME/gccmkdir $GAUSSHOME/gcc/packages再下载软件包gcc-8.3.0.tar.gz、gmp-4.3.2.tar.gz、mpc-1.0.3.tar.gz、mpfr-2.4.2.tar.gz至$GAUSSHOME/gcc/packages目录。解压下载软件 cd $GAUSSHOME/gcc/packagestar -xzf gcc-8.3.0.tar.gztar -xzf gmp-4.3.2.tar.gztar -xzf mpc-1.0.3.tar.gztar -xzf mpfr-2.4.2.tar.gz创建GCC安装目录。mkdir $GAUSSHOME/gcc/gcc-8.3.0mkdir $GAUSSHOME/gcc/gcc-8.3.0/dependmkdir $GAUSSHOME/gcc/gcc-8.3.0/depend/gmp-4.3.2mkdir $GAUSSHOME/gcc/gcc-8.3.0/depend/mpfr-2.4.2mkdir $GAUSSHOME/gcc/gcc-8.3.0/depend/mpc-1.0.3mkdir $GAUSSHOME/gcc/gcc-8.3.0/depend/gcc安装gmp-4.3.2进入$GAUSSHOME/gcc/packages/gmp-4.3.2目录,执行下列命令完成gmp安装操作:cd $GAUSSHOME/gcc/packages/gmp-4.3.2./configure --prefix $GAUSSHOME/gcc/gcc-8.3.0/depend/gmp-4.3.2make -sjmake install -sj安装mpfr-2.4.2进入$GAUSSHOME/gcc/packages/mpfr-2.4.2目录,执行以下命令完成mpfr安装操作:cd $GAUSSHOME/gcc/packages/mpfr-2.4.2./configure --prefix $GAUSSHOME/gcc/gcc-8.3.0/depend/mpfr-2.4.2 --with-gmp=$GAUSSHOME/gcc/gcc-8.3.0/depend/gmp-4.3.2make -sjmake install -sj安装mpc-1.0.3。进入$GAUSSHOME/gcc/packages/mpc-1.0.3目录,执行下列命令完成mpc安装操作:cd $GAUSSHOME/gcc/packages/mpc-1.0.3./configure --prefix=$GAUSSHOME/gcc/gcc-8.3.0/depend/mpc-1.0.3  --with-gmp=$GAUSSHOME/gcc/gcc-8.3.0/depend/gmp-4.3.2 --with-mpfr=$GAUSSHOME/gcc/gcc-8.3.0/depend/mpfr-2.4.2 make -sj make install -sj安装gcc-8.3.0。执行如下命令添加环境变量。export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GAUSSHOME/gcc/gcc-8.3.0/depend/gmp-4.3.2/lib:$GAUSSHOME/gcc/gcc-8.3.0/depend/mpfr-2.4.2/lib:$GAUSSHOME/gcc/gcc-8.3.0/depend/mpc-1.0.3/lib进入$GAUSSHOME/gcc/packages/gcc-8.3.0目录,执行下列命令完成gcc安装操作。cd $GAUSSHOME/gcc/packages/gcc-8.3.0./configure --prefix=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc -disable-multilib --with-gmp=$GAUSSHOME/gcc/gcc-8.3.0/depend/gmp-4.3.2 -enable-languages=c,c++ --with-mpfr=$GAUSSHOME/gcc/gcc-8.3.0/depend/mpfr-2.4.2 --with-mpc=$GAUSSHOME/gcc/gcc-8.3.0/depend/mpc-1.0.3make -sjmake install -sj执行如下命令添加环境变量。export CC=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin/gccexport CXX=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin/g++export LD_LIBRARY_PATH=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/lib64:$LD_LIBRARY_PATHexport PATH=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin:$PATH验证GCC是否安装成功gcc --versiong++ --version3 zlib安装Libxml2软件包编译安装依赖zlib无损数据压缩库omm 用户执行find /usr/ -name libz.a如果libz.a存在则zlib已安装*注意:会有一些Permission denied,注意找到libz.a就可以安装包:https://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz/download以root用户进入代码目录并执行如下命令进行安装,安装完成后再次切换回omm用户*注意切换到root之后要重新刷新环境变量环境变量如下: source ${BIGDATA_HOME}/mppdb/.mppdbgs_profileexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GAUSSHOME/gcc/gcc-8.3.0/depend/gmp-4.3.2/lib:$GAUSSHOME/gcc/gcc-8.3.0/depend/mpfr-2.4.2/lib:$GAUSSHOME/gcc/gcc-8.3.0/depend/mpc-1.0.3/libexport CC=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin/gccexport CXX=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin/g++export LD_LIBRARY_PATH=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/lib64:$LD_LIBRARY_PATHexport PATH=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin:$PATH安装命令: ./configuremake -sjmake install -sjsu - ommsource ${BIGDATA_HOME}/mppdb/.mppdbgs_profile4 autoconf和automake安装安装JSON-C软件包编译安装依赖autoconf和automake工具检查是否安装autoconf和automake工具:rpm -qa|grep autoconfrpm -qa|grep automake若集群中没有autoconf和automake工具,可以通过挂载操作系统镜像等方法进行安装rpm -ivh ***.rpm5 PostGIS依赖库安装获取PostGIS源码cd $GAUSSHOMEgit clone https://gitee.com/postgis-xc/postgis-xc-3.2.2*若直接下载压缩包,则解压后需将文件夹重命名为postgis-xc-3.2.2 :-- 上传postgis-xc-3.2.2-master.zipunzip postgis-xc-3.2.2-master.zipmv postgis-xc-3.2.2-master postgis-xc-3.2.2从Sqlite官网下载sqlite-autoconf-3360000并解压至$GAUSSHOME/postgis-xc-3.2.2目录下cd $GAUSSHOME/postgis-xc-3.2.2wget https://www.sqlite.org/2021/sqlite-autoconf-3360000.tar.gztar -zxf sqlite-autoconf-3360000.tar.gz或导入安装包后解压以操作系统用户omm登录安装有MPPDB服务的任一主机。执行source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile命令启动环境变量。*在安装PostGIS下列依赖库前,注意提前安装cmake,否则在./configure时会报‘You need cmake to build this package’这个问题 – 详见10.4分别编译Geos、Sqlite3、Proj、JSON-C、Libxml2、PostGIS并生成相关动态链接库Geoscd $GAUSSHOME/postgis-xc-3.2.2/geos-3.11.0chmod +x ./configure./configure --prefix=$GAUSSHOME/install3/geosmake -sjmake install -sjSqlite3cd $GAUSSHOME/postgis-xc-3.2.2/sqlite-autoconf-3360000mkdir build./configure --prefix=$GAUSSHOME/postgis-xc-3.2.2/sqlite-autoconf-3360000/buildmake -sjmake install -sj*设置Sqlite3环境变量export SQLITE_PATH=$GAUSSHOME/postgis-xc-3.2.2/sqlite-autoconf-3360000/buildexport PATH=$SQLITE_PATH/bin:$PATHexport SQLITE3_CFLAGS=$SQLITE_PATH/includeexport SQLITE3_LIBS=$SQLITE_PATH/lib/libsqlite3.laexport C_INCLUDE_PATH=$SQLITE_PATH/include:$C_INCLUDE_PATHexport CPLUS_INCLUDE_PATH=$SQLITE_PATH/include:$CPLUS_INCLUDE_PATHexport LD_LIBRARY_PATH=$SQLITE_PATH/lib:$LD_LIBRARY_PATHProjcd $GAUSSHOME/postgis-xc-3.2.2/proj-6.0.0chmod +x ./configure./configure --prefix=$GAUSSHOME/install3/projmake -sjmake install -sjJSON-Ccd $GAUSSHOME/postgis-xc-3.2.2/json-c-0.12.1-20160607chmod +x ./configure./configure --prefix=$GAUSSHOME/install3/json CFLAGS='-Wno-implicit-fallthrough'make -sjmake install -sjLibxml2cd $GAUSSHOME/postgis-xc-3.2.2/libxml2-2.7.1chmod +x ./configure./configure --prefix=$GAUSSHOME/install3/libxml2make -sjmake install -sjPostGIScd $GAUSSHOME/postgis-xc-3.2.2/postgis-3.2.2chmod +x ./configure./configure --prefix=$GAUSSHOME/install3/pggis --with-pgconfig=$GAUSSHOME/bin/pg_config --with-projdir=$GAUSSHOME/install3/proj --with-geosconfig=$GAUSSHOME/install3/geos/bin/geos-config --with-jsondir=$GAUSSHOME/install3/json  --with-xml2config=$GAUSSHOME/install3/libxml2/bin/xml2-config --without-topology --without-address-standardizer CFLAGS='-O2 -fpermissive -DPGXC  -pthread -D_THREAD_SAFE -D__STDC_FORMAT_MACROS -DMEMORY_CONTEXT_CHECKING -w'  CC=g++ --without-protobuf --without-raster make -sjmake install -sj* 执行postgis依赖库编译检查时报错could not find libgeos_c.so : 确认在$GAUSSHOME/install3/geos/lib64目录下是否存在libgeos_c.so动态库,若不存在,请重新安装geos库;若存在,则使用如下命令更新环境变量:export LD_LIBRARY_PATH=$GAUSSHOME/install3/geos/lib64:$LD_LIBRARY_PATH* 如果安装中报错没找到头文件“could not find xxx.h”,则设置下列环境变量:export C_INCLUCDE_PATH=$GAUSSSHOME/include/postgresql/server:$C_INCLUDE_PATHexport CPLUS_INCLUDE_PATH=$GAUSSHOME/include/postgresql/server:$CPLUS_INCLUDE_PATH* 执行postgis依赖库编译时报错undefined reference to 'libiconv' : libiconv库缺失或链接失败会报错undefined reference to 'libiconv', 若未安装libiconv库,则先安装libiconv库,然后将安装后的libiconv库include下的文件复制至/usr/local/include下,将libiconv库中lib下文件复制至/usr/local/lib下。6 分发PostGIS相关动态链接库omm用户执行$GAUSSHOME/postgis-xc-3.2.2/postgis-3.2.2目录下的脚本文件PostGIS_install--3.2.2.sh,完成PostGIS相关动态链接库在集群节点中的分发。export GISHOME=$GAUSSHOMEsh $GAUSSHOME/postgis-xc-3.2.2/postgis-3.2.2/PostGIS_install--3.2.2.sh7 添加PostGIS所需的环境变量export LD_LIBRARY_PATH=$GAUSSHOME/install3/geos/lib64:$GAUSSHOME/install3/proj/lib:$LD_LIBRARY_PATHexport LD_LIBRARY_PATH=$GAUSSHOME/install3/json/lib:$GAUSSHOME/install3/proj/lib:$GAUSSHOME/install3/libxml2/lib:$LD_LIBRARY_PATH8 重启集群-完成安装gs_om -t stop && gs_om -t start9 测试PostGIS使用创建Extension直接使用CREATE EXTENSION命令进行创建:CREATE EXTENSION postgis;创建几何表CREATE TABLE cities ( id integer, city_name varchar(50) );SELECT AddGeometryColumn('cities', 'position', 4326, 'POINT', 2);插入几何数据INSERT INTO cities (id, position, city_name) VALUES (1,ST_GeomFromText('POINT(-9.5 23)',4326),'CityA');INSERT INTO cities (id, position, city_name) VALUES (2,ST_GeomFromText('POINT(-10.6 40.3)',4326),'CityB');INSERT INTO cities (id, position, city_name) VALUES (3,ST_GeomFromText('POINT(20.8 30.3)',4326), 'CityC');计算三个城市间任意两个城市距离SELECT p1.city_name,p2.city_name,ST_Distance(p1.position,p2.position) FROM cities AS p1, cities AS p2 WHERE p1.id > p2.id;至此完成10 安装问题汇总10.1 安装zlib:Compiler error reporting is too harsh for ./configure (perhaps remove -Werror)运行./configure 命令的时,若如果报出如下错误Compiler error reporting is too harsh for ./configure (perhaps remove -Werror)在此情况下,进入zlib-1.2.8目录,vim configure文件,把echo “Checking for obsessive –compulsive complier options..”>>configure.logif try $CC –c $CFLAGS $TEST.C; thenelse…Leave 1Fi这段进行删除/注释,问题将解决10.2 安装zlib:error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory在 make/make install 时,如果出现以下报错:/opt/huawei/Bigdata/mppdb/core/gcc/gcc-8.3.0/depend/gcc/bin/gcc -O -DNO_FSEEKO -DNO_STRERROR -DNO_snprintf -DHAS_sprintf_void   -c -o adler32.o adler32.c/opt/huawei/Bigdata/mppdb/core_2ee2f710/gcc/gcc-8.3.0/depend/gcc/bin/../libexec/gcc/x86_64-pc-linux-gnu/8.3.0/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory*刷新环境变量source ${BIGDATA_HOME}/mppdb/.mppdbgs_profileexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GAUSSHOME/gcc/gcc-8.3.0/depend/gmp-4.3.2/lib:$GAUSSHOME/gcc/gcc-8.3.0/depend/mpfr-2.4.2/lib:$GAUSSHOME/gcc/gcc-8.3.0/depend/mpc-1.0.3/libexport CC=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin/gccexport CXX=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin/g++export LD_LIBRARY_PATH=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/lib64:$LD_LIBRARY_PATHexport PATH=$GAUSSHOME/gcc/gcc-8.3.0/depend/gcc/bin:$PATH10.3 未安装cmake下载安装:[如:3.23.4版本]https://3ms.huawei.com/km/blogs/details/13080075将压缩包放在/opt下, 解压tar -zxf cmake-3.23.4-linux-x86_64.tar.gz转到root用户建立软连接 <注意修改路径名>ln -sf /opt/cmake-3.23.4-linux-x86_64/bin/* /usr/bin/检查cmake --version配置环境变量vim ~/.bashrc输入以下变量:[注意修改路径]export PATH=$PATH:/opt/cmake-3.23.4-linux-x86_64/bin刷新环境变量source ~/.bashrc10.5 Compiler error reporting is too harsh for ./configure (perhaps remove -Werror)  则执行下方语句     slbConfigure=/opt/huawei/openresty/lualib/zlib-1.2.12/configure(这里替换自己的路径)     startLine=`sed -n '/echo "Checking for obsessive-compulsive compiler options..." >> configure.log/=' $slbConfigure`     lineAfter=7     let endLine="startLine + lineAfter"     sudo sed -i $startLine','$endLine'd' $slbConfigure   执行后再执行./configure即可10.7 安装Proj:hidden symbol isn’t defined; final link failed: Bad value; collect2: error: ld returned 1 exist statusPostGIS安装依赖库- Proj,完成./configure (无ERROR),执行make -sj命令的时,报如下的错误:hidden symbol isn’t defined; final link failed: Bad value; collect2: error: ld returned 1 exist status解决方式:检查geos和sqlite3是否安装,环境变量是否刷新10.8 创建Extension:ERROR: Postgis is not yet supported, please add enable_postgis_extension into feature_support_options进入数据库查看SHOW feature_support_options;添加一下GUC参数即可 – 所有CN,DN一起gs_guc set -Z coordinator -Z datanode -N all -I all -c "feature_support_options='enable_postgis_extension'"重启集群生效:gs_om -t stop && gs_om -t start再进入数据库查看SHOW feature_support_options;10.9 低版本的gcc和g++编译器安装先找到挂载镜像安装包的位置[例如常用的RedHat 7.6的挂在位置为/media]cd /media/Packages安装如下两个文档rpm -ivh gcc-c++-4.8.5-36.el7.x86_64.rpmrpm -ivh gcc-4.8.5-36.el7.x86_64.rpm安装中出现任何依赖的安装, 安装对应的包就行例如:  rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
  • [集群&DWS] HCS形态下没有OBS怎样上传JAR包创建javaUDF
    Step1:上传.jar包到CN;Step2:在沙箱外,将.jar包放在沙箱内能访问到的路径中例如:/ var/chroot/dws/data1Step3:进入沙箱ssh <IP>Step4:部署javaUDF文件gs_om -t javaUDF -m addjar -s /dws/data1Step5:查看javaUDF文件是否部署成功gs_om -t javaUDF -m ls
  • [集群&DWS] 连接失败: gsql: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
    1 问题gsql 远程连接集群时, 报错:      gsql: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory2 解决步骤2.1 首先检查lib文件夹中,是否存在libpq.so.5这个文件如果没有,建议重新安装gsql命令行客户端2.2 修改脚本gsql_env.sh的环境变量gsql_env.sh的目的是配置LD_LIBRARY_PATH / PATH这两个变量将${libpath}更换成客户端工具安装的路径下的lib目录修改后如下:export LD_LIBRARY_PATH=/xxxxx/lib:${LD_LIBRARY_PATH}export PATH=/xxxxx/bin:${PATH}如:export LD_LIBRARY_PATH=/opt/bin/dws/lib:${LD_LIBRARY_PATH}export PATH=/opt/bin/dws/bin:${PATH}2.3 手动配置这两个环境变量到linux家目录启动文件这样每次登陆,自动加载环境变量Step 1:        cd ~ Step 2:        ls -al .bash_profile确认文件存在, 执行Step3Step 3:        vim .bash_profile       将两个环境变量加在文件末尾,如:export LD_LIBRARY_PATH=/opt/bin/dws/lib:${LD_LIBRARY_PATH}export PATH=/opt/bin/dws/bin:${PATH}Step 4:        :wq*注意1. 在export LD_LIBRARY_PATH行上添加LD_LIBRARY_PATH=/usr/local/lib/ 的原因是在此项目环境下,LD_LIBRARY_PATH的路径为空。在检查路径时,“:”被当做路径下的文件名,所以LD_LIBRARY_PATH后会多一个“:”。导致查找这个变量的时候被检测成文件而不是路径。那么给它设置一个初始的默认路径,它就不为空了,也就能正常检测到了2. 改此变量仅对当前用户有效,且如果想立即生效: source .bash_profile3. 软连接,设置对应的.bash_profile 内的路径也要设置为/opt/bin/dws/./lib       这样才能正常开机/重连启动2.4 检查Step 1:        echo ${变量名}       检查变量配置的路径是否是预期路径Step 2:        重启reboot或者重新连接relink确认环境变量是否成功启动Step 3:        使用gsql客户端尝试是否可以成功链接集群
  • [存储] GaussDB(DWS)之备份失败,且管控面日志显示Error: Unable to import module: No module named configparser
    【问题现象】管控面下发快照失败,报错rdsChannel call [backup] failed.FailMgs:ERROR:root:open /rds/datastore/dws/v2.1.501/base.py failed! except:Error: Unable to import module: No module named configparser【问题根因】agent升级未回滚彻底【解决方法】手动回滚base.py1. root用户所有节点都执行:2. chattr -i /rds/datastore/base.py3. mv /rds/datastore/base.py /rds/datastore/base_bk1227.py4. cp /rds/datastore/dws/v2.1.501/base.py /rds/datastore/base.py
  • [热门活动] GaussDB(DWS) 2023年终总结,2024年,我们一起大展龙威!
    时光匆匆,2023年已经结束了,感谢所有关注GaussDB(DWS)的小伙伴,2023年我们一起经历了很多精彩瞬间,让我们一起来回顾这一年的经历与成长。💓持续创新华为云GaussDB(DWS)数据仓库,历经12年技术演进,2011年开始技术预研,2014年首次上市,通过不停地迭代和演进,从2017年开始大规模商用,当前全球已累积1700+大客户。针对数仓发展趋势,GaussDB(DWS)也在不断地演进,2023年发布了云原生数仓,支持存算管三层分离、湖仓一体、数智融合,具备优异性能和极致弹性能力。GaussDB(DWS)云原生数仓技术解析:cid:link_4🎉收获认可2023年8月,全球领先的IT市场研究和咨询公司IDC正式发布《中国关系型数据库软件市场跟踪报告-数据仓库市场Add-on》报告,华为云GaussDB(DWS)凭借领先的技术和优异的市场表现,荣获“双第一”。链接📖社区建设2020年5月至今,我们共推出了860+篇技术博客和50+培训视频,其中,2023年发表博客140篇,举办直播10场,涉及技术架构、对象设计、性能调优、数据访问、安全、资源管控、高可用、备份容灾、监控运维、迁移等12个专题,全方位地帮助开发者学习和使用GaussDB(DWS)。GaussDB(DWS)开发者学习路径全景地图:cid:link_0​🕕2023年都有哪些好玩的社区活动,大家一起来回顾下:🔴2023年1月:玩转PB级数仓GaussDB(DWS)有奖征文活动结合产品试用和沙箱实验,我们面向开发者征集文章,共有19位开发者参与活动,发表32篇文章。他们分别是:@林欣、@fxy0224、@一剑战八荒、@积少成多、@福州司马懿、@yd_240675315、@清雨小竹、@sevenjiang、@323老四、@门前一棵葡萄树、@yd_278301229、@nukinsan、@y-wolfandy、@江湖有缘、@譡里个檔、@愚公搬代码、@yd_220527686、@along_2020、@上进小菜猪。感谢各位开发者小伙伴们对我们产品的支持与热爱。💖🔴2023年2月:情人节为爱挑战!这次活动是GaussDB(DWS)第一次在情人节为大家准备小福利,通过关注公众号、填写问卷、加入交流群,即可获得喜茶代金券,这一次,我们认识了9名新同学。🔴2023年7月:华为开发者日20237月7-9日和各位开发者在东莞松山湖,开展了线下交流和云原生沙箱体验。有2位开发者向我们投稿了开发者故事,在此特别感谢姚圣伟、张法凯同学对我们的认可。 开发者故事:我与GaussDB(DWS)的不解之缘cid:link_6 开发者故事:数据库迁移全保障cid:link_3​🔴2023年8月:GaussDB(DWS)知识竞赛活动我们通过6期答题活动帮助各位开发者了解GaussDB(DWS),有25名小伙伴是通过这个活动第一次关注到了GaussDB(DWS),欢迎你们在评论区留言对GaussDB(DWS)的体验感受。🔴2023年10月:云咖问答活动随着大数据时代的到来,人人用数变得越来越迫切,数据作为重要的生产要素和流动载体,如何加强技术层面的数据安全和隐私保护,对数据仓库产品本身提出更高的要求。我们邀请了华为云GaussDB(DWS)云服务研发专家胡老师坐阵,和大家一起探讨关于GaussDB(DWS)数据脱敏的话题。共收到29名开发者提出的87条问题,相信通过老师的解答,大家对数据脱敏都有了一定的理解,还未关注到活动的小伙伴,可以点击链接了解活动情况。1024程序员节活动15道知识问答、用代码画GaussDB(DWS)标识,两个小互动对您来说是小菜一碟还是略微有点难?GaussDB(DWS)14位程序员快问快答,哪一位最让您印象深刻?一起来回顾一下:链接。🔴2023年11月:绽放吧!GaussDB(DWS)云原生数仓有奖征文活动结合云原生数仓沙箱实验,推出征文活动,共有12位开发者热情参与活动,发表23篇文章。他们分别是:@bug菌、@gentle_zhou、@nullptr、@yd_249256431、@白鹿第一帅、@不想吃土豆、@龙腾九州、@幕后小黑爪、@你是猴子请来的救兵吗、@皮牙子抓饭、@前进的蜗牛、@西岭雪山、@一剑战八荒。GaussDB(DWS)知识社区因为有你们而更加多彩。🔴2023年12月:HCDG城市行—天津站这一次我们相聚天津,与GaussDB(DWS)架构师周孟韬共同探讨云原生数仓技术与优势。现场有技术讨论、沙箱体验、有产品建议、有欢声笑语,感谢6位开发者的参与。特别感谢GaussDB(DWS)开发者—姚圣伟帮忙组织活动,包括前期活动宣传、物料制作、现场支撑。愉快的一年又结束了,感谢各位开发者笔耕不辍,让更多人在使用GaussDB(DWS)的时候有文章、视频借鉴,让更多人在GaussDB(DWS)的使用之路上走得更顺畅。2024年,希望新的一年还能有你们的陪伴,愿大家在新的一年里与GaussDB(DWS)社区共同进步,共同发展!祝大家新年快乐,龙腾虎跃!
总条数:2749 到第 页
上滑加载中