• [应用案例] 手动迁移同构数据-小批量篇
    手动迁移同构数据-小批量篇本文仅做记录,小批量数据这样导出非常方便。要求:数据小于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数目。
  • [技术干货] ALTER SEQUENCE语句的使用方法
    ALTER SEQUENCE用于修改一个现有的序列的参数。注意事项使用ALTER SEQUENCE的用户必须是该序列的所有者。当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。修改序列的最大值后,会清空该序列在所有会话的cache。ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用。语法格式修改序列最大值或归属列。参数说明name将要修改的序列名称。IF EXISTS当序列不存在时使用该选项不会出现错误消息,仅有一个通知。MAXVALUE maxvalue | NO MAXVALUE序列所能达到的最大值。如果声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。OWNED BY将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。如果序列已经和表有关联后,使用这个选项后新的关联关系会覆盖旧的关联。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。使用OWNED BY NONE将删除任何已经存在的关联。new_owner序列新所有者的用户名。用户要修改序列的所有者,必须是新角色的直接或者间接成员,并且那个角色必须有序列所在模式上的CREATE权限。
  • [技术干货] 定义cache和maxvalue或minvalue
    建议cache值不要设置过大,否则会出现缓存序列号时(每个cache周期的第一个nextval)耗时过长的情况;同时建议cache值小于100000000。实际使用时应根据业务设置合理的cache值,既能保证快速访问,又不会浪费序列号。CYCLE用于使序列达到maxvalue或者minvalue后可循环并继续下去。如果声明了NO CYCLE,则在序列达到其最大值后任何对nextval的调用都会返回一个错误。NOCYCLE的作用等价于NO CYCLE。缺省值为NO CYCLE。若定义序列为CYCLE,则不能保证序列的唯一性。OWNED BY-将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。需要注意的是,通过指定OWNED BY,仅仅是建立了表的对应列和sequence之间关联关系,并不会在插入数据时在该列上产生自增序列。缺省值为OWNED BY NONE,表示不存在这样的关联。【注意】◾通过OWNED BY创建的Sequence不建议用于其他表,如果希望多个表共享Sequence,该Sequence不应该从属于特定表。
  • [技术干货] CREATE SEQUENCE语句的使用方法
    CREATE SEQUENCE用于向当前数据库里增加一个新的序列。序列的Owner为创建此序列的用户。Sequence是一个存放等差数列的特殊表,该表受DBMS控制。这个表没有实际意义,通常用于为行或者表生成唯一的标识符。如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名字不同。创建序列后,在表中使用序列的nextval()函数和generate_series(1,N)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate_series()函数会调用N+1次而导致报错。不支持在template1数据库中创建SEQUENCE。name将要创建的序列名称。取值范围: 仅可以使用小写字母(a~z)、 大写字母(A~Z),数字和特殊字符"#","_","$"的组合。increment指定序列的步长。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。缺省值为1。MINVALUE minvalue | NO MINVALUE| NOMINVALUE执行序列的最小值。如果没有声明minvalue或者声明了NO MINVALUE,则递增序列的缺省值为1,递减序列的缺省值为-263-1。NOMINVALUE等价于NO MINVALUEMAXVALUE maxvalue | NO MAXVALUE| NOMAXVALUE执行序列的最大值。如果没有声明maxvalue或者声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUEstart指定序列的起始值。缺省值:对于递增序列为minvalue,递减序列为maxvalue。cache为了快速访问,而在内存中预先存储序列号的个数。一个缓存周期内,CN不再向GTM索取序列号,而是使用本地预先申请的序列号。缺省值为1,表示一次只能生成一个值,也就是没有缓存。
总条数:2746 到第
上滑加载中