• [问题求助] 线下DWS 8.1.1.5版本的升级途径是多少?
    目前的DWS 版本8.1.1.5的升级稳定版本的途径是不是8.1.1.5-》8.1.3-ESL.8.SP1 -》8.2.1-ESL.8目前这种升级方式有银行据点升级过没?使用上是否有什么问题?有直升8.1.1.x-》8.2.1.x的版本发布计划?
  • [数据库使用] 外表访问报错Login failed on cn_5002, check your principal and keytab
    一、背景客户在执行业务sql产生报错:testdb=> select * from ft_test0520;ERROR: Login failed on cn_5002, check your principal and keytab检查pg_log最新的cn日志,多看几行,可以找到以下提示信息。[HDFS] LOG: failed to kinit: Cannot contact any KDC for realm ‘UATX_ABCDEF.MRS.ABCD.COM’,error_code=12345678[HDFS] STATEMENT : insert into schemaname.tablename select * from ft_test0520;[HDFS] ERROR: Login failed on cn_5002,check your principal and keytab.二、原因这个报错注意标红的信息。查看cat krb5.conf文件里面是这样的[realms]UATX_ABCDEF.MRS.ABCD.COM ={kdc=12.345.456.13:21732kdc=12.345.456.14:21732admin_server=53.192.1463:z1/3admin_server =12.345.456.14:2173kpasswd_server=12.345.456.13:21731Kpasswd_server=12.345.456.14:21731kpasswd_port=21731Kadmind_port=21730Kadmind_listen=12.345.456.14:21730Kpasswd_listen=12.345.456.14:21731……[domain_realm].uatx_abcdef.mrs.abcd.com = UATX_ABCDEF.MRS.ABCD.COM…….问题根因:kdc指向的ip网络不同,网络不通各种各样的问题,这里是由于路由没加三、解决1、沙箱里ssh或者沙箱外curl一下,此处用curl有返回即通curl –kv 协议:ip:端口2、如果不通,加一下路由route add –net route_ip/24 dev bond_name gw gw_ip补充:这里做下记录,因为遇到很多次了,虽然遇到我已经很熟练了,做个分享给大家。
  • [应用案例] 手动迁移同构数据-较大批量篇
    手动迁移同构数据-较大批量篇写在最前面,该文只做为一个案例的分享,或者说思路的引导。实际上该案例不完全,无法作为一个标准方案来完成迁移。因为互联互通本文只介绍了一张表的互通,实际使用中,需要自己写脚本完成所有table的迁移。且互联互通有一定的版本要求,该方案限制较多。要求:数据大于3T,且不大于100T  1、 元数据1.1导出元数据注意a、  该方法分库导出,有多个业务库,起多个进程b、  确保网络已打通c、  以下命令中--non-lock-table不锁表,--no-tablespaces不输出选择表空间,–s 只转储对象定义(模式),而非数据,–C 备份文件以创建数据库和连接到创建的数据库的命令开始d、  该命令只导出元数据,不导出数据nohup gs_dump testdb –h 132.132.123.123 –U mgt –W xxx –p 8000 --non-lock-table --no-tablespaces –s –C –f /DWS/data1/h0dn1/testdb.sql > /home/Ruby/migration/testdb_`data + ‘%F_%H’`.log 2>&1 & 实际测试导出集群存储空间:11.3TDatabase落地文件大小对象个数total time(ms)testdb185 M16972238302testdb228 M661361003   总耗时:4m 1.2 导入元数据nohup gsql postgresql://:8000/postgres?application_name=’OM’ –f /DWS/data1/h0dn1/testdb.sql > /home/Ruby/migration/import_testdb_`date + ‘%F_%H%M%S’`.log 2>&1 &   实际测试导入Database落地文件大小插入后库大小对象个数total time(ms)testdb185 M11 GB169723681421testdb228 M1505 M66131231562    总耗时:61m注意a、  不可并发b、 元数据导入非常慢 2、 准备工作2.1 互联互通导入创建互联互通server注:a、  重要,到对应数据库手动创建,每个库对应一个serverb、 address最好为elb(lvs)地址,gsfs为gds地址create server server_mgt foreign data wrapper gc_fdw options(address ‘132.132.123.123:8000’dbname ‘mgt’username ‘xxx’syncsrv ‘gsfs://132.45.132.10:50062| gsfs://132.45.132.156:50062| gsfs://132.45.132.216:50062’); #查看server\des+ server_mgt 启动gds注意a、  假设3个节点,最好启动3个gds(和节点数一样),gds越多,导入越快,但gds越多,并发高的时候,gds过于繁忙会达到操作系统的socket瓶颈,从而业务产生报错。从实际使用角度上说,与节点数一致是比较合适的b、 在每个节点的沙箱内启动,-p为节点对外地址#第1个节点gds –p 132.45.132.10:50062 –H 0.0.0.0/0 –d /DWS/data1/gds/50062 –D –t 100 –l /DWS/data1/gds/50062/50062.log --pipe-size 1M --pipe-timeout 300s #第2个节点gds –p 132.45.132.156:50062 –H 0.0.0.0/0 –d /DWS/data1/gds/50062 –D –t 100 –l /DWS/data1/gds/50062/50062.log --pipe-size 1M --pipe-timeout 300s #第3个节点gds –p 132.45.132.216:50062 –H 0.0.0.0/0 –d /DWS/data1/gds/50062 –D –t 100 –l /DWS/data1/gds/50062/50062.log --pipe-size 1M --pipe-timeout 300s 网络1)防火墙注a、  互联互通情况下源端集群和目的端集群的防火墙都需要增加相应防火墙配置b、 目的端和源端都需添加gds所在ip和端口#沙箱外,root用户增加防火墙配置iptables –I INPUT –s 132.45.132.0/24 –p tcp --dport 50062 –j accept #沙箱外,root用户查看防火墙配置iptables –L #重启生效systemctl restart iptables #如果重启失效了,就写入持久化配置vi /etc/sysconfig/iptables#插入-A INPUT –p tcp –m state --state NEW –m tcp –s 132.45.132.0/24 --dport 50062 –j ACCEPT#需重启写入systemctl restart iptables #如果嫌上面麻烦,客户同意的情况下可以直接关掉防火墙,注意迁移完毕记得打开systemctl stop iptablessystemctl start iptables 2)路由#记得添加路由route add –net 132.45.132.0/24 dev bond0.3579 gw 132.132.123.254  #bond查看,ip a中对外ip同一行显示的bond就是对外ip所用的bondip a | grep 132 #网关查看,route –n查看,一般是对外ip,最后8位变成254#比如,本地的对外ip是132.45.132.10,gataway是132.45.132.254 3)安全组 云上环境的console界面网络->网络控制台->访问控制->安全组->打开对应集群规则->入方向规则->添加规则4)其他判断网络是否打通手动测试互联互通命令是否能写入数据注a、  关于为什么在目标端会有源端表结构:因为元数据部分我们已经把元数据导入成功。b、  互联互通外表注意事项可参考产品文档章节《基于GDS的跨集群互联互通》#测试目标端#在目标端创建临时表create table tmp_import.aa_bb_info as select * from aa.bb_info where 1=2; #在目标端创建外表create foreign table import_ft. aa_bb_info(like tmp_import.aa_bb_info)server server_mgt options(schema_name ‘aa’,table_name ‘bb_info’encoding ’utf8’); #测试插入数据insert into aa.bb_info select * from import_ft. aa_bb; #插入完毕记得删除中间tabledrop table import_ft. aa_bb;drop table tmp_import.aa_bb_info; #如果要保留原表记得analyse analyse aa.bb_info;  源端最好也测试一下(虽然不会在源端操作)#测试源端#在源端创建临时表create table tmp_export.aa_bb_info as select * from aa.bb_info where 1=2; #在源端创建外表create foreign table export_ft. aa_bb_info(like tmp_export.aa_bb_info)server server_mgt options(schema_name ‘aa’,table_name ‘bb_info’encoding ’utf8’); #测试插入数据insert into export_ft. aa_bb select * from aa.bb_info; #插入完毕记得删除中间tabledrop table export_ft. aa_bb;drop table tmp_export.aa_bb_info;
  • [应用案例] 手动迁移同构数据-小批量篇
    手动迁移同构数据-小批量篇本文仅做记录,小批量数据这样导出非常方便。要求:数据小于3T,客户对数据的rpo和rto要求不高 1、从远端拉取数据注:a、  该方法会一次性拉取集群的所有数据,虽然写了database的名字,但无法区分,会把所有的database都会拉出来b、  最好在目的端集群的后台执行(不强制,etl服务器也可),要确保能curl通远端,设目的端集群的elb为132.132.123.123c、  写入文件的地址要确保能够装得下文件,以防家目录放不下,最好写入实例目录nohup gs_dumpall -l testdb –h 132.132.123.123 –U mgt –W xxx –p 8000 –f /DWS/data1/h0dn1/testdb.sql > /home/Ruby/migration/testdb_`date + ‘%F_%H%M%S’`.log 2>&1 &   实际测试导出集群存储空间使用大小:2.3T落地文件大小testdb.sql:3.2T共导出2个业务库,2个系统库 Database数据库大小对象个数total time(ms)start timeend timetestdb11148 GB265625895592604-10 13:08:3304-11 05:22:39testdb2593 GB154634164017704-11 05:26:0304-11 16:56:39Gaussdb110 MB371114604-11 16:56:4004-11 16:56:40postgres45 GB482355804-11 16:56:4204-11 16:56:44   总耗时:28h  注意:a、  落地文件一般比较大,是很正常的,库内数据尤其是列存表存储时会进行压缩,导出时需考虑该情况。b、  log文件输出没有成功successfully的标识就是还在写入文件,观察此时文件大小正在增长,这是正常的,不要停止进展  2、导入数据注意a、  数据导入时最好用Ruby最高系统用户(云上环境)进行,若用一般用户进行,当进程开始时它需要手动输入密码,第二个库导入时也需要手动输入密码,如果未及时输入密码,进程超时退出。(设置集群免密也可)b、  不可和导出同时进行c、  不用手动创建数据库,导出文件有创建用户和数据库的语法。nohup gsql postgresql://:8000/postgres?application_name=’OM’ –f /DWS/data1/h0dn1/testdb.sql > /home/Ruby/migration/testdb_`date + ‘%F_%H%M%S’`.log 2>&1 &   实际测试导入集群存储空间使用大小:1.56 T总耗时:135661657 ms约等于37hDatabase导入后数据库大小total timetestdb1903 GB testdb2591 GB Gaussdb100 MB postgres5483 MB   总耗时:37.6h  
  • [数据库变更] DWS扩容时交易解耦导致报错阻塞页面扩容提交进行规避
    问题现象:扩容提交,提交按钮卡住分析:F12打开,控制表有报错解决方案:1)源码sources中找到对应的断点 this.unibuyByPass=xxxx2)在此处打断点,然后刷新页面3)控制台输入 this.unibuyByPass=false 回车
  • [数据库使用] GaussDB(DWS)物化视图刷新时间长,导致偶现查询慢
    【问题现象】物化视图偶现刷新慢,导致该物化视图偶现查询慢【原因分析】触发条件:1、多个物化视图之间存在依赖关系2、不同层级物化视图偶尔同时刷新3、上层物化视图刷新时间长原因:1、刷新物化视图会对该物化视图加8级锁,对基表加1级锁2、多层物化视图同时刷新,上层物化视图刷新时间长,导致下层物化视图刷新拿不到8级锁,进而导致查询下层物化视图慢【解决方案】方案一:不同层级物化视图刷新时间错开具体方法:a) 定义上层物化视图刷新间隔时间是下层物化视图间隔刷新时间的N倍(N为大于0的整数);b) 定义下层物化事务start_time小于上层 ;c) 定义下层物化事务start_time减去上层start_time的绝对值小于下层物化视图刷新的间隔时间注意:务必让每个物化视图刷新间隔时间大于其实际刷新时长方案二:定义下层物化视图不自动刷新,上层物化视图级联刷新【排查方法】1、查询物化视图依赖关系和刷新间隔时间SELECT matview || '\n'|| refresh_start_time || (SELECT CASE WHEN interval IS NULL THEN '' ELSE '\n' || interval END FROM pg_matview WHERE mvid::regclass::text=matview) || ' --> ' || baserel || (SELECT '\n'|| refresh_start_time || CASE WHEN interval IS NULL THEN '' ELSE '\n' || interval END FROM pg_matview WHERE mvid::regclass::text=baserel) FROM pv_matview_detail WHERE mapping is NULL and (SELECT relkind FROM pg_class WHERE relname=baserel) = 'm';查询结果通过画图工具转化后例子如下:2、如果物化视图之间不存在依赖关系,则不会存在问题;如果存在依赖,则可能存在同时刷新导致锁冲突的问题
  • [数据库使用] GaussDB(DWS)物化视图未自动刷新
    【问题现象】物化视图未自动刷新【原因分析】删除物化视图,会把所有模糊匹配该物化视图名字的刷新任务从pg_task中删除一般出现在重建物化视图的场景,比如已经有物化视图abc,新建物化视图abc_new,然后删除物化视图abc【解决方案】重建未自动刷新的物化视图【规避措施】不同物化视图名称避免出现包含关系,比如有一个物化视图名称为abc,避免其他物化视图命名为xabcx(x为任意字符串)【排查方法】1、查看物化视图是否未刷新select * from pv_matview_detail where matview ~ 'abc';2、查看pg_task中该物化视图是否存在刷新任务select * from scheduler.pg_task where what ilike '%abc%';【意见建议】升级补丁
  • [系统培训] DWS学习路线图是什么样的?
    目前学习dws,主要的手段是产品文档,但是产品文档的组织结构更像参考手册,而非学习教程。且很多概念浅浅带过,没法理解到底啥含义,学习经常懵的。我想请问一下大家:是否应该有PGSQL的基础才能学好gaussdb和DWS?都是通过哪些途径来学习的?有清晰的学习路线吗?要怎样才能搭建dws的实验环境?
  • [集群购买/创建] GaussDB(DWS)创建集群失败报dws .6018
    【问题版本】 所有版本【问题描述】 创建集群失败,报dws .6018【问题影响】 无【问题根因】 磁盘装载错误【定位过程】1、查task任务,发现是RdsWaitSendInitConfigTask步骤失败;2、排查/home/Ruby/log/cloud-dws-deply.log,发现报错Failed to verify chroot 在另一个节点上;3、在问题节点排查/home/Ruby/log/cloud-dws-deply.log,报错Failed to mount device;4、lsblk发现有一个业务盘特小,系统盘特大,磁盘挂载时把业务盘当作系统盘了【规避措施】重新按正确的顺序装载机器的磁盘
  • [SQL] GaussDB(DWS) Set-returning function is not supported in vector engine报错的处理小技巧
    dws的向量化引擎,和部分函数不兼容,就比如这种返回一个集合的函数,可能造成Set-returning function is not supported in vector engine报错最常见的情况,就是把json用文本存在列存表里,然后处理json的时候报错复现语句:create table test_column (id int, a text) with (orientation=column, compression=low, colversion=2.0) distribute by hash(id); insert into test_column values (1, '{"b":[1,2,3]}'); select id, json_array_elements(a::json->'b') from test_column;通过执行计划(如下图),我们可以看出json_array_elements(((a)::json -> 'b'::text))被放在列存表扫描算子CStore Scan里面了,虽然后面做了行列转化的Row Adapter,但已于事无补那我们的处理思路就很明确了,让优化器把json_array_elements(((a)::json -> 'b'::text))拿出来,别放在CStore Scan里面,等Row Adapter算子转化为行存引擎之后,再计算json_array_elements(((a)::json -> 'b'::text))就可以了具体实现方法是,让列存表去join一个其他表,然后再将其结果集进行Set-returning function。如下图所示,现在json_array_elements(((a)::json -> 'b'::text))放在Hash Join算子里了,现在是处于行存引擎,所以就不会报错了select c.id, json_array_elements(c.a::json->'b'), o.b from test_column c,other_table o where c.id = o.id;啊?你说你就想取一个表,没有其他表来join?没有表我们创造“表”就行啦~用一个子查询和原表关联即可with tmp(tmp_column) as ( values (1) ) select id, json_array_elements(a::json->'b') from test_column, tmp;
  • [运维管理] 删除数据库权限怎么限制?怎么回收?
    删除数据库权限怎么限制?怎么回收?
  • [数据库变更] 【扩容】修改底层映射规格
    1.查看对应的底层规格select c.* from rds_cluster_spec a ,rds_cluster_instance_resspec b,rds_resSpecAttr cwhere a.id=b.cluster_spec_id and b.instance_spec_id=c.specIdand a.code='console界面显示的规格名';2.在serviceOM查看新规格对应的规格ID3.更新映射表updaterds_resSpecAttr set value='新底层规格'wherespecId='xxx' and attrcode='flavor';--新底层规格ID,xxx对应替换
  • [技术干货] 大数据干货合集(2025年5月)
    query_dop参数cid:link_1数据内存参数cid:link_2连接相关GUC参数cid:link_3并发控制GUC参数cid:link_4JSONB的性能之路cid:link_5JSONB输入格式cid:link_0常用的JSON/JSONB函数及操作符cid:link_6JSONB高级特性cid:link_7JSON能力总结cid:link_8SEQUENCE原理cid:link_9CREATE SEQUENCE语句的使用方法cid:link_10定义cache和maxvalue或minvaluecid:link_11ALTER SEQUENCE语句的使用方法cid:link_12DROP SEQUENCE语句的使用方法cid:link_13currval(regclass)参数https://bbs.huaweicloud.com/forum/thread-0259184085324424043-1-1.html
  • [技术干货] currval(regclass)参数
    currval(regclass)用于返回当前会话里最近一次nextval返回的指定的sequence的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features为true之后,才能使用这个函数。同时在设置enable_beta_features为true之后,nextval()函数将不支持下推。返回类型:bigintlastval()用于返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。需要注意的是,lastval()函数在默认情况下是不支持的,需要通过设置enable_beta_features或者lastval_supported为true之后,才能使用这个函数。同时这种情况下,nextval()函数将不支持下推。返回类型:bigintSetval后当前会话及GTM上会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。
  • [技术干货] DROP SEQUENCE语句的使用方法
    DROP SEQUENCE用于从当前数据库里删除序列。注意事项只有序列的所有者或者系统管理员才能删除。参数说明IF EXISTS如果指定的序列不存在,则发出一个notice而不是抛出一个错误。name序列名称。CASCADE级联删除依赖序列的对象。RESTRICT如果存在任何依赖的对象,则拒绝删除序列。此项是缺省值。为了避免从同一个序列获取值的并发事务被阻塞, nextval操作不会回滚;也就是说,一旦一个值已经被抓取, 那么就认为它已经被用过了,并且不会再被返回。 即使该操作处于事务中,当事务之后中断,或者如果调用查询结束不使用该值,也是如此。这种情况将在指定值的顺序中留下未使用的"空洞"。 因此,GaussDB(DWS)序列对象不能用于获得"无间隙"序列。如果nextval被下推到DN上时,各个DN会自动连接GTM,请求next values值,例如(insert into t1 select xxx,t1某一列需要调用nextval函数),由于GTM上有最大连接数为8192的限制,而这类下推语句会导致消耗过多的GTM连接数,因此对于这类语句的并发数目限制为7000(其它语句需要占用部分连接)/集群DN数目。
总条数:2749 到第 页
上滑加载中