春风吹又生

回答

春风吹又生 回答了问题2020-07-17

集群如何修改表字段的定义?

GBase8a产品在设计时定义为“不支持字段定义的修改”,因此无法通过alter table … modify … 语句修改字段的定义。对于现场问题,可以通过如下替代方案实现(以tds表字段id1由varchar(50)修改为varchar(100)为例):(1)alter table tds add id2 varchar(100);(2)update tds set id2=id1;(3)alter table tds drop id1;(4)alter table td ...
春风吹又生 回答了问题2020-07-17

关于加载时源文件与被加载表列不匹配的问题

[align=left][font=微软雅黑][size=3]此问题的关键在于加载控制文件ctl的编写,针对不同情况修改table_fields的内容。[/size][/font][/align][align=left][font=微软雅黑][size=3]table_fields中罗列的列名必须顺序和名字对应数据文件。[/size][/font][/align][align=left][font=微软雅黑][size=3]1)如果数据文件列少,数据表列多,则多出的列必须允许为空,在table_fields中不需要罗列该列名;[/size][/font][/align][align=left][font=微软雅黑][size=3]2)如果数据文件列多,数据表列少,则文件中多出的列在table_fields中列名后加filler;[/size][/font][/align][align=left][font=微软雅黑][size=3]3)如果数据文件列顺序与数据表列顺序不同,则table_fields中罗列的列必须顺序上对应数据文件。[/size][/font][/align][align=left][font=微软雅黑][size=3]举例如下:[/size][/font][/align][align=left][font=微软雅黑][size=3]原始数据文件:[/size][/font][/align][align=left][font=微软雅黑][size=3]1,2,3,4[/size][/font][/align][align=left][font=微软雅黑][size=3]1,2,3,4[/size][/font][/align][align=left][font=微软雅黑][size=3]1,2,3,4[/size][/font][/align][align=left][font=微软雅黑][size=3](1)文件中字段少于表定义的情况[/size][/font][/align][align=left][font=微软雅黑][size=3]加载数据文件全部列到表gt1的a,b,c,d列。[/size][/font][/align][align=left][font=微软雅黑][size=3]建表语句:create table gt1 (a int ,b int ,c int ,d int ,e int); [/size][/font][/align][align=left][font=微软雅黑][size=3]加载控制文件:[/size][/font][/align][align=left][font=微软雅黑][size=3][ceshi] [/size][/font][/align][align=left][font=微软雅黑][size=3]disp_server=192.168.105.211:6666 [/size][/font][/align][align=left][font=微软雅黑][size=3]file_list=/opt/gtest/test.tbl [/size][/font][/align][align=left][font=微软雅黑][size=3]format=3 [/size][/font][/align][align=left][font=微软雅黑][size=3]null_value='null' [/size][/font][/align][align=left][font=微软雅黑][size=3]delimiter=',' [/size][/font][/align][align=left][font=微软雅黑][size=3]db_user=gbase [/size][/font][/align][align=left][font=微软雅黑][size=3]db_name=test [/size][/font][/align][align=left][font=微软雅黑][size=3]table_name=gt1 [/size][/font][/align][align=left][font=微软雅黑][size=3]hash_parallel=1 [/size][/font][/align][align=left][font=微软雅黑][size=3]table_fields='a,b,c,d' [/size][/font][/align][align=left][font=微软雅黑][size=3]加载后结果:[/size][/font][/align][align=left][font=微软雅黑][size=3]gbase> select * from gt1;[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+------+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]| a | b | c | d | e |[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+------+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]| 1 | 2 | 3 | 4 | NULL |[/size][/font][/align][align=left][font=微软雅黑][size=3]| 1 | 2 | 3 | 4 | NULL |[/size][/font][/align][align=left][font=微软雅黑][size=3]| 1 | 2 | 3 | 4 | NULL |[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+------+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]3 rows in set (Elapsed: 00:00:00.01)[/size][/font][/align][align=left][font=微软雅黑][size=3](2)文件中字段多于表定义的情况1[/size][/font][/align][align=left][font=微软雅黑][size=3]加载数据文件前3列到表gt2的a,b,c列。[/size][/font][/align][align=left][font=微软雅黑][size=3]建表语句:create table gt2 (a int ,b int ,c int );[/size][/font][/align][align=left][font=微软雅黑][size=3]加载控制文件:[/size][/font][/align][align=left][font=微软雅黑][size=3][ceshi] [/size][/font][/align][align=left][font=微软雅黑][size=3]disp_server=192.168.105.211:6666 [/size][/font][/align][align=left][font=微软雅黑][size=3]file_list=/opt/gtest/test.tbl [/size][/font][/align][align=left][font=微软雅黑][size=3]format=3 [/size][/font][/align][align=left][font=微软雅黑][size=3]null_value='null' [/size][/font][/align][align=left][font=微软雅黑][size=3]delimiter=',' [/size][/font][/align][align=left][font=微软雅黑][size=3]db_user=gbase [/size][/font][/align][align=left][font=微软雅黑][size=3]db_name=test [/size][/font][/align][align=left][font=微软雅黑][size=3]table_name=gt2 [/size][/font][/align][align=left][font=微软雅黑][size=3]hash_parallel=1 [/size][/font][/align][align=left][font=微软雅黑][size=3]table_fields='a,b,c,1 filler'[/size][/font][/align][align=left][font=微软雅黑][size=3]加载后结果:[/size][/font][/align][align=left][font=微软雅黑][size=3]gbase> select * from gt2;[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]| a | b | c |[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]| 1 | 2 | 3 |[/size][/font][/align][align=left][font=微软雅黑][size=3]| 1 | 2 | 3 |[/size][/font][/align][align=left][font=微软雅黑][size=3]| 1 | 2 | 3 |[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]3 rows in set (Elapsed: 00:00:00.00)[/size][/font][/align][align=left][font=微软雅黑][size=3] [/size][/font][/align][align=left][font=微软雅黑][size=3](3)文件中字段多于表定义的情况2[/size][/font][/align][align=left][font=微软雅黑][size=3]加载数据文件的第4,2列到表gt3的a,b列。 [/size][/font][/align][align=left][font=微软雅黑][size=3]建表语句:create table gt3 (a int ,b int );[/size][/font][/align][align=left][font=微软雅黑][size=3]加载控制文件:[/size][/font][/align][align=left][font=微软雅黑][size=3][ceshi] [/size][/font][/align][align=left][font=微软雅黑][size=3]disp_server=192.168.105.211:6666 [/size][/font][/align][align=left][font=微软雅黑][size=3]file_list=/opt/gtest/test.tbl [/size][/font][/align][align=left][font=微软雅黑][size=3]format=3 [/size][/font][/align][align=left][font=微软雅黑][size=3]null_value='null' [/size][/font][/align][align=left][font=微软雅黑][size=3]delimiter=',' [/size][/font][/align][align=left][font=微软雅黑][size=3]db_user=gbase [/size][/font][/align][align=left][font=微软雅黑][size=3]db_name=test [/size][/font][/align][align=left][font=微软雅黑][size=3]table_name=gt3 [/size][/font][/align][align=left][font=微软雅黑][size=3]hash_parallel=1 [/size][/font][/align][align=left][font=微软雅黑][size=3]table_fields='1 filler,b,2 filler,a' [/size][/font][/align][align=left][font=微软雅黑][size=3]加载后结果:[/size][/font][/align][align=left][font=微软雅黑][size=3]gbase> select * from gt3;[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]| a | b |[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]| 4 | 2 |[/size][/font][/align][align=left][font=微软雅黑][size=3]| 4 | 2 |[/size][/font][/align][align=left][font=微软雅黑][size=3]| 4 | 2 |[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]3 rows in set (Elapsed: 00:00:00.00)[/size][/font][/align]
春风吹又生 回答了问题2020-07-10

nolock表介绍

[align=left][font=微软雅黑][size=3]nolock在农行、山东移动广泛使用。从实际的使用情况看,无风险;从技术上看,nolock只是不加tablespace锁,对于表锁依然有效,针对一个表的操作不会出现问题;在不同的节点因没有tablespace锁,会出现不同节点同时创建的的两个表出现创建顺序的不同,但Tableid是集群层直接指派的,也不会造成表tableid混乱问题;综上,使用nolock属性是不存在风险的,项目中可放心使用。[/size][/font][/align]
春风吹又生 回答了问题2020-07-10

PHP程序如何连接GBase8a数据库?

[align=left][font=微软雅黑][size=3]PHP程序可以通过ODBC开发接口连接GBase8a数据库;GBase8a没有专门针对php程序的开发接口;[/size][/font][/align][align=left][font=微软雅黑][size=3]《GBase 8a MPP Cluster程序员手册ODBC篇.pdf》用户文档中,7.5.6章节有PHP程序连接GBase8a的参考样例。[/size][/font][/align]
春风吹又生 回答了问题2020-07-03

集群加载string_qualifier写在扩展参数中数据hash分布不正确

[align=left][font=微软雅黑][size=3]集群加载string_qualifier写在扩展参数中数据hash分布不正确[/size][/font][/align][align=left][font=微软雅黑][size=3]控制文件样例:[/size][/font][/align][align=left][font=微软雅黑][size=3][load_t1][/size][/font][/align][align=left][font=微软雅黑][size=3]disp_server=10.10.10.103:6666[/size][/font][/align][align=left][font=微软雅黑][size=3]file_list=/opt/tpch200s/string.txt[/size][/font][/align][align=left][font=微软雅黑][size=3]format=3[/size][/font][/align][align=left][font=微软雅黑][size=3]db_user=gbase[/size][/font][/align][align=left][font=微软雅黑][size=3]db_name=test[/size][/font][/align][align=left][font=微软雅黑][size=3]table_name=t1[/size][/font][/align][align=left][font=微软雅黑][size=3]delimiter='|'[/size][/font][/align][align=left][font=微软雅黑][size=3]extra_loader_args=--parallel=4 --timeout=0 --string_qualifier='"'[/size][/font][/align][align=left][font=微软雅黑][size=3]socket=/tmp/gbase_8a_5050.sock[/size][/font][/align][align=left][font=微软雅黑][size=3] [/size][/font][/align][align=left][font=微软雅黑][size=3]加载举例如下:[/size][/font][/align][align=left][font=微软雅黑][size=3]集群环境:2*2[/size][/font][/align][align=left][font=微软雅黑][size=3](1)建表语句[/size][/font][/align][align=left][font=微软雅黑][size=3]CREATE TABLE t1 ([/size][/font][/align][align=left][font=微软雅黑][size=3] a varchar(10) DEFAULT NULL COMMENT 'yyy',[/size][/font][/align][align=left][font=微软雅黑][size=3] b varchar(20) DEFAULT NULL[/size][/font][/align][align=left][font=微软雅黑][size=3])DISTRIBUTED BY('a');[/size][/font][/align][align=left][font=微软雅黑][size=3](2)数据文件[/size][/font][/align][align=left][font=微软雅黑][size=3]"a$"|"b%"[/size][/font][/align][align=left][font=微软雅黑][size=3]"cc"|"dc"[/size][/font][/align][align=left][font=微软雅黑][size=3](3)加载控制文件[/size][/font][/align][align=left][font=微软雅黑][size=3][load_t1][/size][/font][/align][align=left][font=微软雅黑][size=3]disp_server=10.10.10.103:6666[/size][/font][/align][align=left][font=微软雅黑][size=3]file_list=/opt/tpch200s/string.txt[/size][/font][/align][align=left][font=微软雅黑][size=3]format=3[/size][/font][/align][align=left][font=微软雅黑][size=3]db_user=gbase[/size][/font][/align][align=left][font=微软雅黑][size=3]db_name=test[/size][/font][/align][align=left][font=微软雅黑][size=3]table_name=t1[/size][/font][/align][align=left][font=微软雅黑][size=3]delimiter='|'[/size][/font][/align][align=left][font=微软雅黑][size=3]#string_qualifier='"'[/size][/font][/align][align=left][font=微软雅黑][size=3]extra_loader_args=--parallel=4 --timeout=0 --string_qualifier='"'[/size][/font][/align][align=left][font=微软雅黑][size=3]socket=/tmp/gbase_8a_5050.sock[/size][/font][/align][align=left][font=微软雅黑][size=3](4)加载结果[/size][/font][/align][align=left][font=微软雅黑][size=3]string_qualifier写在扩展参数中,数据落在n2分片; [/size][/font][/align][align=left][font=微软雅黑][size=3]而string_qualifier写在扩展参数外,数据落在n3分片 #此结果正确[/size][/font][/align][align=left][font=微软雅黑][size=3]gbase> select * from t1_n2;[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]| a | b |[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]| a$ | b% |[/size][/font][/align][align=left][font=微软雅黑][size=3]+------+------+[/size][/font][/align][align=left][font=微软雅黑][size=3]1 row in set (Elapsed: 00:00:00.00)[/size][/font][/align][align=left][font=微软雅黑][size=3](5)hash单点优化参数(gcluster_single_hash_node_optimize)开始后,查询不正确。[/size][/font][/align][align=left][font=微软雅黑][size=3]gbase> select * from t1 where a='a$'; [/size][/font][/align][align=left][font=微软雅黑][size=3]Empty set (Elapsed: 00:00:00.01)[/size][/font][/align]
春风吹又生 回答了问题2020-06-29

执行SQL之前系统能否对SQL所消费资源进行评估

[align=left][font=微软雅黑][size=3]执行之前无法评估SQL的资源,但新开发的资源管理可以对SQL进行资源的限制,具体可按照资源池的配置进行限制。[/size][/font][/align]
春风吹又生 回答了问题2020-06-29

表一直在同步和加载死循环处理方案增加wait_time

[align=left][font=微软雅黑][size=3]问题分析:[/size][/font][/align][align=left][font=微软雅黑][size=3]问题的原因是同步数据的过程中同时启动了加载,现有同步机制在从源分片同步数据文件到问题分片的时候,不互斥加载。此时加载操作只会对正常分片加载数据,同步操作成功后,虽然问题分片的状态被置为正常,但是由于没有对问题分片进行加载,加载任务完成后会把刚刚恢复的分片重新置为问题分片,需再次同步。如果不断有对该表的加载操作,则表一直无法恢复。[/size][/font][/align][align=left][font=微软雅黑][size=3]该问题是一个高可用和一致性之间平衡的问题。当前产品实现追求的是高可用和最终一致性,而现场需求是短时间内的强一致性。从功能上讲现在这个状况可以不做处理。现在的同步追着加载走的现象是主备加载机制和fevent机制共同决定的,目的是保证数据的最终一致性。[/size][/font][/align][align=left][font=微软雅黑][size=3] [/size][/font][/align][align=left][font=微软雅黑][size=3]问题解决:[/size][/font][/align][align=left][font=微软雅黑][size=3]dispcli提供一个延时加载功能,设置1个参数,等待时间wt。如果dispcli发现表的分片有问题,且该节点在线,则等待指定时间wt后,再进行加载;这个参数由现场根据同步需要的最大时间进行估算,保证一次同步能够完成;如果小于wt时间同步完毕,立刻启动加载。[/size][/font][/align][align=left][font=微软雅黑][size=3]不指定等待时间wt参数的情况下跟现有产品特性保持一致不做任变化。[/size][/font][/align][align=left][font=微软雅黑][size=3]如现场可在加载ctl文件中增加延时加载参数wait_time=300。[/size][/font][/align]
春风吹又生 回答了问题2020-06-22

表在压缩率31和55下的对比测试

[align=left][font=微软雅黑][size=3]部署建议:[/size][/font][/align][align=left][font=微软雅黑][size=3]在磁盘空间较充足的情况下,建议部署55压缩方式。[/size][/font][/align][align=left][font=微软雅黑][size=3]测试结论:[/size][/font][/align][align=left][font=微软雅黑][size=3](1)查询、update、delete 等操作,31压缩比55压缩慢10%-30%;[/size][/font][/align][align=left][font=微软雅黑][size=3](2)加载:31压缩比55压缩慢2倍;[/size][/font][/align][align=left][font=微软雅黑][size=3](3)insert全表:31压缩比55压缩慢6倍。[/size][/font][/align][align=left][font=微软雅黑][size=3]测试过程:[/size][/font][/align][align=left][font=微软雅黑][size=3](1)压缩方式:31压缩和55压缩[/size][/font][/align][align=left][font=微软雅黑][size=3](2)集群部署:4节点2分片86集群[/size][/font][/align][align=left][font=微软雅黑][size=3](3)测试内容:tpch查询、加载、insert、update、delete。[/size][/font][/align]
春风吹又生 回答了问题2020-06-19

小查询并发场景测试优化

[align=left][font=微软雅黑][size=3]测试结论:[/size][/font][/align][align=left][font=微软雅黑][size=3](1)借助排序和行存列,小查询并发最优吞吐量可以提升3倍[/size][/font][/align][align=left][font=微软雅黑][size=3](2)最优配置为行存列+排序+索引,其次是:行存列+排序[/size][/font][/align]
春风吹又生 回答了问题2020-06-15

支持insert into select from dual参数

[align=left][font=微软雅黑][size=3]参数_t_gcluster_use_new_dual[/size][/font][/align][align=left][font=微软雅黑][size=3]控制gcluster是否使用dual表的新的实现方式,新的实现方式支持insert into ... select ... from dual等功能。[/size][/font][/align][align=left][font=微软雅黑][size=3]取值范围:0,1[/size][/font][/align][align=left][font=微软雅黑][size=3]默认值 0[/size][/font][/align][align=left][font=微软雅黑][size=3]0: 使用旧的实现方式, 不支持 insert into ... select ... from dual 等功能;[/size][/font][/align][align=left][font=微软雅黑][size=3]1:使用新的实现方式,支持 insert into ... select ... from dual等功能。[/size][/font][/align][align=left][font=微软雅黑][size=3]作用域:session, global[/size][/font][/align]