• [技术解读] GaussDB算子级调优
    GaussDB算子级调优算子级调优介绍一个查询语句要经过多个算子步骤才会输出最终的结果。由于个别算子耗时过长导致整体查询性能下降的情况比较常见。这些算子是整个查询的瓶颈算子。通用的优化手段是EXPLAIN ANALYZE/PERFORMANCE命令查看执行过程的瓶颈算子,然后进行针对性优化。如下面的执行过程信息中,Hashagg算子的执行时间占总时间的:(51016-13535)/ 56476 ≈66%,此处Hashagg算子就是这个查询的瓶颈算子,在进行性能优化时应当优先考虑此算子的优化。算子级调优示例示例1:基表扫描时,对于点查或者范围扫描等过滤大量数据的查询,如果使用SeqScan全表扫描会比较耗时,可以在条件列上建立索引选择IndexScan进行索引扫描提升扫描效率。gaussdb=# explain (analyze on,costs off) select * from t1 where c2=10004; id | operation | A-time | A-rows | Peak Memory | A-width ----+------------------------------+-----------------+--------+-------------+--------- 1 | -> Streaming (type: GATHER) | 20.040 | 5 | 85KB | 2 | -> Seq Scan on t1 | [17.239,17.376] | 5 | [18KB,18KB] | (2 rows) Predicate Information (identified by plan id) ----------------------------------------------- 2 --Seq Scan on t1 Filter: (c2 = 10004) Rows Removed by Filter: 90002 (3 rows) gaussdb=# create index idx on t1(c2); CREATE INDEX gaussdb=# explain (analyze on,costs off) select * from t1 where c2=10004; id | operation | A-time | A-rows | Peak Memory | A-width ----+-----------------------------------+---------------+--------+-------------+--------- 1 | -> Streaming (type: GATHER) | 3.206 | 5 | 85KB | 2 | -> Index Scan using idx on t1 | [0.122,0.146] | 5 | [73KB,73KB] | (2 rows) Predicate Information (identified by plan id) ----------------------------------------------- 2 --Index Scan using idx on t1 Index Cond: (c2 = 10004) (2 rows)上述例子中,全表扫描返回5条数据,过滤掉大量数据,在c2列上建立索引后,使用IndexScan扫描效率显著提高,从20毫秒降低到3毫秒。示例2:如果从执行计划中看,两表join选择了NestLoop,而实际行数比较大时,NestLoop Join可能执行比较慢。如下的例子中NestLoop耗时5秒,如果设置参数enable_mergejoin=off关掉Merge Join,同时设置参数enable_nestloop=off关掉NestLoop,让优化器选择HashJoin,则Join耗时降低至86毫秒。gaussdb=# explain analyze select count(*) from t2,t1 where t1.c1=t2.c2; id | operation | A-time | A-rows | E-rows | Peak Memory | A-width | E-width | E-costs ----+--------------------------------------------------+---------------------+----------+--------+-------------+---------+---------+--------- 1 | -> Aggregate | 5070.296 | 1 | 1 | 14KB | | 8 | 2148.49 2 | -> Streaming (type: GATHER) | 5070.219 | 2 | 2 | 81KB | | 8 | 2148.49 3 | -> Aggregate | [4828.705,5062.289] | 2 | 2 | [11KB,11KB] | | 8 | 2148.40 4 | -> Nested Loop (5,6) | [4828.565,5062.142] | 996 | 40 | [4KB,4KB] | | 0 | 2148.34 5 | -> Seq Scan on t1 | [13.574,14.508] | 90007 | 20000 | [15KB,15KB] | | 4 | 184.00 6 | -> Materialize | [1508.956,1579.488] | 22413670 | 20 | [35KB,36KB] | | 4 | 14.37 7 | -> Streaming(type: REDISTRIBUTE) | [55.825,56.842] | 498 | 20 | [44KB,44KB] | | 4 | 14.31 8 | -> Seq Scan on t2 | [0.105,0.132] | 498 | 20 | [13KB,13KB] | | 4 | 13.13 (8 rows) Predicate Information (identified by plan id) ----------------------------------------------- 4 --Nested Loop (5,6) Join Filter: (t2.c2 = t1.c1) Rows Removed by Join Filter: 22412672 (3 rows)设置参数后:gaussdb=# set enable_mergejoin=off; SET gaussdb=# set enable_nestloop=off; SET gaussdb=# explain analyze select count(*) from t2,t1 where t1.c1=t2.c2; id | operation | A-time | A-rows | E-rows | Peak Memory | A-width | E-width | E-costs ----+--------------------------------------------------+-----------------+--------+--------+---------------+---------+---------+--------- 1 | -> Aggregate | 92.911 | 1 | 1 | 14KB | | 8 | 224.45 2 | -> Streaming (type: GATHER) | 92.855 | 2 | 2 | 81KB | | 8 | 224.45 3 | -> Aggregate | [84.295,87.102] | 2 | 2 | [11KB,11KB] | | 8 | 224.36 4 | -> Hash Join (5,6) | [84.171,86.966] | 996 | 40 | [6KB,6KB] | | 0 | 224.30 5 | -> Seq Scan on t1 | [11.885,13.103] | 90007 | 20000 | [15KB,15KB] | | 4 | 184.00 6 | -> Hash | [55.895,56.072] | 498 | 21 | [292KB,292KB] | [20,20] | 4 | 14.31 7 | -> Streaming(type: REDISTRIBUTE) | [55.601,55.771] | 498 | 20 | [44KB,44KB] | | 4 | 14.31 8 | -> Seq Scan on t2 | [0.118,0.143] | 498 | 20 | [13KB,13KB] | | 4 | 13.13 (8 rows) Predicate Information (identified by plan id) ----------------------------------------------- 4 --Hash Join (5,6) Hash Cond: (t1.c1 = t2.c2) (2 rows)示例3:通常情况下Agg选择HashAgg性能较好,如果大结果集选择了Sort+GroupAgg,则需要设置enable_sort=off,HashAgg耗时优于Sort+GroupAgg。gaussdb=# explain analyze select count(*) from t1 group by c2; id | operation | A-time | A-rows | E-rows | Peak Memory | E-memory | A-width | E-width | E-costs ----+------------------------------------+-----------------+--------+--------+-------------+----------+-----------------+---------+--------- 1 | -> GroupAggregate | 244.817 | 40000 | 5000 | 15KB | | | 12 | 2131.52 2 | -> Sort | 156.344 | 40000 | 10000 | 5603KB | | | 12 | 2131.52 3 | -> Streaming (type: GATHER) | 91.595 | 40000 | 10000 | 82KB | | | 12 | 1442.14 4 | -> GroupAggregate | [90.317,96.852] | 40000 | 10000 | [12KB,12KB] | 16MB | | 12 | 973.39 5 | -> Sort | [59.775,64.724] | 90007 | 20000 | [5MB,5MB] | 16MB | [896220,903920] | 4 | 873.39 6 | -> Seq Scan on t1 | [18.092,21.033] | 90007 | 20000 | [12KB,12KB] | 1MB | | 4 | 184.00 (6 rows)设置参数后:gaussdb=# set enable_sort=off; SET gaussdb=# explain analyze select count(*) from t1 group by c2; id | operation | A-time | A-rows | E-rows | Peak Memory | E-memory | A-width | E-width | E-costs ----+---------------------------------+-----------------+--------+--------+-------------+----------+---------+---------+--------- 1 | -> HashAggregate | 228.260 | 40000 | 5000 | 6663KB | | | 12 | 752.75 2 | -> Streaming (type: GATHER) | 95.506 | 40000 | 10000 | 82KB | | | 12 | 752.75 3 | -> HashAggregate | [63.974,71.290] | 40000 | 10000 | [3MB,3MB] | 16MB | [20,20] | 12 | 284.00 4 | -> Seq Scan on t1 | [17.578,21.204] | 90007 | 20000 | [12KB,12KB] | 1MB | | 4 | 184.00 (4 rows)
  • [技术解读] GaussDB Join方式的Hint
    GaussDB Join方式的Hint功能描述 指明Join使用的方法,可以为Nested Loop,Hash Join和Merge Join。语法格式 [no] nestloop|hashjoin|mergejoin([@queryblock] table_list)参数说明 @queryblock 见指定Hint所处的查询块Queryblock章节,可省略,表示在当前查询块生效。 no表示hint的join方式不使用。 table_list为表示hint表集合的字符串,该字符串中的表与join_table_list相同,只是中间不允许出现括号指定join的优先级。 例如:no nestloop(t1 t2 t3)表示:生成t1,t2,t3三表连接计划时,不使用nestloop。三表连接计划可能是t2 t3先join,再跟t1 join,或t1 t2先join,再跟t3 join。此hint只hint最后一次join的join方式,对于两表连接的方法不hint。如果需要,可以单独指定,例如:任意表均不允许nestloop连接,且希望t2 t3先join,则增加hint:no nestloop(t2 t3)。示例 对示例中原语句使用如下hint:explain select /*+ nestloop(store_sales store_returns item) */ i_product_name product_name ...该hint表示:生成store_sales,store_returns和item三表的结果集时,最后的两表关联使用nestloop。
  • [技术解读] GaussDB 子链接块名的hint
    GaussDB 子链接块名的hint功能描述指明子链接块的名称。语法格式blockname ( [@queryblock] table)参数说明@queryblock 见指定Hint所处的查询块Queryblock章节,可省略,表示在当前查询块生效。 table表示为该子链接块hint的别名的名称。 说明: blockname hint仅在对应的子链接块没有提升时才会被上层查询使用。目前支持的子链接提升包括IN子链接提升、EXISTS子链接提升和包含Agg等值相关子链接提升。该hint通常会和前面章节提到的hint联合使用。 对于FROM关键字后的子查询,则需要使用子查询的别名进行hint,blockname hint不会被用到。 如果子链接中含有多个表,则提升后这些表可与外层表以任意优化顺序连接,hint也不会被用到。 示例 explain select /+nestloop(store_sales tt) / * from store_sales where ss_item_sk in (select /+blockname(tt)/ i_item_sk from item group by 1);该hint表示:子链接的别名为tt,提升后与上层的store_sales表关联时使用nestloop。注意:当blockname的hint使用@queryblock进行指定,而不是在当前查询块直接生效时,比如blockname(@sel$2 new_qb_name)。 其他Hint无法通过@new_qb_name进行指定。此时new_qb_name只作为子链接的名字,可以使用Hint进行运算指定。 通过blockname(@sel$2 bn2)以@sel$2的方式进行块名bn2的指定,此时TableScan(@bn2 t2)无法通过@bn2找到该queryblock,而得通过@sel$2的方式进行指定。bn3使用Hint blockname(bn3)在当前查询块直接生效,改变默认查询块的名字,因此tablescan(@bn3 t3@bn3)可以通过@bn3进行指定。gaussdb=# explain select /*+ blockname(@sel$2 bn2) tablescan(@bn2 t2) tablescan(@sel$2 t2@bn2) indexscan(@sel$2 t2@sel$2) tablescan(@bn3 t3@bn3)*/ c2 from t1 where c1 in ( select /*+ */t2.c1 from t2 where t2.c2 = 1 group by 1) and c3 in ( select /*+ blockname(bn3)*/t3.c3 from t3 where t3.c2 = 1 group by 1); WARNING: hint: TableScan(@bn2 t2) does not match any query block WARNING: Error hint: TableScan(@"sel$2" t2@bn2), relation name "t2@bn2" is not found.通过blockname(@sel$2 bn2)以@sel$2的方式进行子链接块名bn2的指定。当该子链接被提升时,可以通过hashjoin(t1 bn2)对提升后的子链接的运算进行指定。gaussdb=# explain select /*+ blockname(@sel$2 bn2) hashjoin(t1 bn2) nestloop(t1 bn3) nestloop(t1 sel$3)*/ c2 from t1 where c1 in ( select /*+ */t2.c1 from t2 where t2.c2 = 1 group by 1) and c3 in ( select /*+ blockname(bn3)*/t3.c3 from t3 where t3.c2 = 1 group by 1); WARNING: Duplicated or conflict hint: NestLoop(t1 "sel$3"), will be discarded.
  • [技术解读] 通过数据管理服务DAS连接实例
    操作场景 通过华为云数据管理服务(Data Admin Service,简称DAS)这款可视化的专业数据库管理工具,可获得执行SQL、高级数据库管理、智能化运维等功能,做到易用、安全、智能的管理数据库。操作步骤登录管理控制台。 单击管理控制台左上角的,选择区域和项目。在页面左上角单击,选择“数据库 > 云数据库 GaussDB”,进入云数据库 GaussDB信息页面。 在“实例管理”页面,选择需要登录的目标数据库,单击操作列表中的“登录”,进入数据管理服务实例登录界面。可以在“实例管理”页面,单击目标实例名称,进入实例的“基本信息”页面,在页面右上角,单击“登录”,进入数据管理服务实例登录界面。在“自定义登录”页签,选择需要登录的节点,正确输入数据库用户名和密码,单击“测试连接”。测试连接通过后,单击“登录”,即可登录到数据库。
  • [技术解读] GaussDB数据库引擎版本号说明
    GaussDB数据库引擎版本号说明GaussDB采用点分式版本号。格式为:V2.0-A.BCD。其中:"V2.0":代表GaussDB数据库的第2代体系架构。 “A”:表示年度需求基线版本。 “BCD”:首位(B)代表半年度需求基线版本,第二位(C)和第三位(D)代表三方验证适配补丁。 GaussDB数据库和内核引擎版本对应关系 GaussDB版本的对应关系如表1所示。GaussDB数据库引擎版本和内核引擎版本查询方法请参考查看云数据库GaussDB数据库和内核引擎版本。查看云数据库GaussDB数据库和内核引擎版本登录管理控制台。 单击管理控制台左上角的,选择区域和项目。 在页面左上角单击,选择“数据库 > 云数据库 GaussDB”,进入云数据库 GaussDB信息页面。 在“实例管理”页面,选择指定的实例,单击实例名称,进入基本信息页面。 在实例“基本信息”页面,“配置信息”模块的“数据库引擎版本”和“内核引擎版本”处查看数据库实例和内核的版本号。
  • [技术干货] 2024年12月,GaussDB技术干货汇总
    GaussDB创建和管理数据库 cid:link_11GaussDB提供了以下类型的系统表和系统视图 cid:link_0GaussDB的登陆退出审计功能开启和关闭需要重启集群 cid:link_12创建GaussDB数据库用户 cid:link_13创建GaussDB数据库 cid:link_1GaussDB 使用gs_loader工具导入数据 cid:link_14GaussDB智能运维实践:自动化监控与故障预警实践 cid:link_15使用DAS的导出和导入功能迁移GaussDB数据 cid:link_16GaussDB-对象权限管理 cid:link_17GaussDB的登陆退出审计功能开启和关闭需要重启集群 cid:link_2GaussDB用户/表空间/数据库管理 cid:link_18GaussDB普通表的管理 cid:link_19GaussDB范围分区表的管理 cid:link_20GaussDB索引的管理 cid:link_21GaussDB视图和雾化视图的管理 cid:link_22GaussDB序列的管理 cid:link_3GaussDB同义词管理 cid:link_23GaussDB x86环境下UGO的部署 cid:link_4GaussDB数据库状态,节点状态,实例状态说明 cid:link_24GaussDB主从切换 cid:link_25GaussDB数据库日常维护 cid:link_26GaussDB检查和收集日志 cid:link_5GaussDB检查各个节点时间一致性 cid:link_6GaussDB应用连接数查看 cid:link_7GaussDB表的维护 cid:link_27GaussDB重建索引 cid:link_8GaussDB数据库迁移方案介绍 cid:link_9GaussDB日志级别设置 cid:link_28【GaussDB】慢SQL诊断 cid:link_10【GaussDB】基于提交序列号CSN的闪回查询技术 cid:link_29备注:以上文章来自 Gauss松鼠会小助手2地址:cid:link_30
  • [公告] 【获奖公示】DTSE Tech Talk丨NO.75:GaussDB管理平台TPOPS,DBA高效运维的一站式解决方案
    本次直播获奖名单公示如下(视频号抽奖及直播间未登录问卷用户无用户名):奖项名称奖品名称获奖用户开发者定制保温杯视频号抽奖/开发者定制鼠标垫(小号)视频号抽奖/开发者定制鼠标垫(小号)视频号抽奖/开发者定制鼠标垫(小号)视频号抽奖/华为云云宝手办-盲盒款视频号抽奖/华为FreeBuds SE 2无线耳机(白色)观看时长抽奖1735028****48540开发者定制连帽卫衣 优质提问har****pass开发者定制连帽卫衣 优质提问hw8****353开发者定制不锈钢水杯口令抽奖qiu****020开发者定制不锈钢水杯口令抽奖hid_o6zm****46ywqdo开发者定制不锈钢水杯口令抽奖yi****gl 感谢各位小伙伴参与本次活动,欢迎关注华为云DTSE Tech Talk 技术直播更多活动~
  • [数据库使用] 数据库常用运维操作
    单机加载环境变量 source /opt/huawei/Bigdata/mppdb/.mppdbgs_profile一、 数据库常用命令(一) 集群类常用操作1. 查看集群状态cm_ctl query -Cv2. 查看集群状态(包括实例目录)cm_ctl query -Cvd3. 查看集群不均衡的实例cm_ctl query -Cvs4. 启动集群cm_ctl start5. 停止集群cm_ctl stopcm_ctl stop -mi6. 主备切换cm_ctl switchover -n 1 -D /srv/BigData/mppdb/data1/slave27. 均衡整个集群cm_ctl switchover -a8. 全量buildcm_ctl build -n 1 -D /srv/BigData/mppdb/data2/slave1 -b full -t 108009. 查看build进度gs_ctl querybuild -D /srv/BigData/mppdb/data2/slave110. 查看DN端口cat /srv/BigData/mppdb/data1/slave1/postgresql.conf | grep port11. 登录数据库gsql -d postgres -p 8000 -r12. gsql命令执行单个sql语句gsql -d postgres -p 8000 -r –c “”13. gsql命令执行单个sql文件gsql -d postgres -p 8000 -r -f sql文件(二) 常用系统表、视图、函数1. 查集群CN、DN信息,包括实例编号、IP、port。pgxc_node2. 查询活跃SQL语句:pg_stat_activitypgxc_stat_activityselect count(*) from pg_stat_activity where state = ‘active’ and usename != ‘Ruby’;select usename,state,count(*) from pgxc_stat_activity group by 1,2;3. 查看最大并发配置show max_active_statements;4. 查执行慢的语句和语句等待情况pg_stat_activitypgxc_stat_activitypg_thread_wait_statuspgxc_thread_wait_statuspg_locks5. 查关键系统表pg_classpg_partitionpg_namespacepg_tablespacepg_database6. 查表倾斜信息table_skewness()pg_table_size :指定的表使用的磁盘空间,不计索引(但是包含TOAST,自由空间映射和可见性映射)。pg_relation_size:接受一个表、索引、压缩表的OID或者名字,然后返回它们的字节大小pg_total_relation_size:指定名字的表所使用的全部磁盘空间,包括索引和压缩数据。表名字可以用模式名修饰pg_total_relation_size:指定的表使用的总磁盘空间,包括所有的索引和TOAST数据。pg_relation_filepath(schema.table)pg_classpg_partitionpg_namespace查各个dn上表的记录数SELECT a.count,b.node_name FROM (SELECT count(*) AS count,xc_node_id FROM table_name GROUP BY xc_node_id) a, pgxc_node b WHERE a.xc_node_id=b.node_id ORDER BY a.count desc;7. 查SQL内存使用情况pv_total_memory_detailpgxc_total_memory_detailpv_session_memory_detailpg_shared_memory_detail查占内存最大的100个contextSELECT * FROM pv_session_memory_detail ORDER BY totalsize desc LIMIT 100;查占内存最大的10个sessionSELECT sessid, sum_total, sum_free,sum_used, query_id, query_start, state, waiting, enqueue,query FROM (select sessid, sum(totalsize) as sum_total, sum(freesize) as sum_free, sum(usedsize) as sum_used from pv_session_memory_detail group by sessid ) a , pg_stat_activity b  WHERE  split_part(a.sessid,'.',2) = b.pid order by sum_total desc limit 10;8. 查DN主备追赶catchup状态pgxc_get_senders_catchup_time()9. 取消&终止语句pg_terminate_backend()pg_cancel_backend()10. 查资源视图pgxc_wlm_session_infogs_wlm_session_infoSELECT * FROM gs_wlm_session_info order by max_peak_memory desc limit 10;SELECT * FROM gs_wlm_session_info order by total_cpu_time desc limit 10;SELECT * FROM pgxc_wlm_session_info order by duration desc limit 10;二、 OS常用命令(一) 网络1. 查看网络丢包ifconfig命令,过滤 dropped相关信息。2. 查看端口占用netstat -anp|grep 25308(二) 磁盘1. 查看IO使用情况(沙箱外执行)iostat -xdmt 22. 查看磁盘使用情况df -h(三) 内存查看系统内存使用情况free -g(四) CPU查看各个进程的CPU和内存使用情况top(五) 其他1. 查看操作系统版本lsb_release -a2. 查看进程ps -ef|grep master13. 查看目录大小du -sh *
  • [数据库使用] 【DWS】 【lakeformation外表】ERROR: could not find type OID for relation xxx 问题处理
    【问题版本】830.100【问题现象】执行sql报错ERROR: could not find type OID for relation xxx【原因分析】1. 用户where条件后的列名写错了。2. 用户使用了LakeFormation,存算分离,目标表是一个external的schema,元数据在构造的过程中没有完全mock出来,未找到对应的数据类型,出现报错。【排查方法】1.分析差异点:可执行语句不带最后一个and条件时可执行成功,加上and条件就报错。2.执行如下sql获取表定义:select pg_get_external_schema_table_options('ex_schema','table_name');select pg_get_external_schema_table_col('ex_schema','table_name');3.确认表结构后,对比sql发现,最后一个and条件中:b.pack_qty_desc = h1.pack_qty_desch1表有pack_qty_desc列,而b表中没有pack_qty_desc列,和用户确认,列名写错了。4.根据表定义结果修正列名后执行结果符合预期。
  • [技术解读] 设置GaussDB实例安全组规则
    设置GaussDB实例安全组规则操作场景安全组是一个逻辑上的分组,为同一个虚拟私有云内具有相同安全保护需求,并相互信任的弹性云服务器和GaussDB实例提供访问策略。如果账号已经申请创建时支持不指定安全组的白名单,则不需要执行本章节,而且在实例详情页也不会有内网安全组信息。为了保障数据库的安全性和稳定性,在使用GaussDB实例之前,您需要设置安全组,开通需访问数据库的IP地址和端口。内网连接GaussDB实例时,设置安全组分为以下两种情况: ECS与GaussDB实例在相同安全组时,默认ECS与GaussDB实例互通,无需设置安全组规则。 ECS与GaussDB实例在不同安全组时,需要为GaussDB和ECS分别设置安全组规则。 设置GaussDB安全组规则:为GaussDB所在安全组配置相应的入方向规则。 设置ECS安全组规则:安全组默认规则为出方向上数据报文全部放行,此时,无需对ECS配置安全组规则。当在ECS所在安全组为非默认安全组且出方向规则非全放通时,需要为ECS所在安全组配置相应的出方向规则。 通过弹性公网IP连接实例时,需要为GaussDB所在安全组配置相应的入方向规则。 本节主要介绍如何为GaussDB实例设置相应的入方向规则。关于添加安全组规则的详细要求,可参考《虚拟私有云用户指南》的“添加安全组规则”章节。注意事项因为安全组的默认规则是在出方向上的数据报文全部放行,同一个安全组内的弹性云服务器和GaussDB实例可互相访问。安全组创建后,您可以在安全组中定义各种访问规则,当GaussDB实例加入该安全组后,即受到这些访问规则的保护。默认情况下,一个租户可以创建500条安全组规则。 建议一个安全组内的安全组规则不超过50条。 当需要从安全组外访问安全组内的GaussDB实例时,需要为安全组添加相应的入方向规则。 所有鲲鹏云服务器规格不支持配置不连续端口。 如果您在鲲鹏云服务器中添加安全组规则时,使用了不连续端口号,那么除了该条规则不会生效,该规则后的其他规则也不会生效。比如:您先配置了安全组规则A(不连续端口号22,24),再配置了下一条安全规则B(独立端口号9096),则安全组规则A和B均不会生效。出方向规则通常不适用于数据库实例。仅在数据库实例充当客户端时,出方向规则才适用。数据库实例位于VPC(虚拟私有云 Virtual Private Cloud)中但不可公开访问,则您还可以使用VPN连接。创建分布式版实例时,如果需要修改内网安全组,请确保入方向规则TCP协议端口包含:40000-60480,20050,5000-5001,2379-2380,6000,6500, - ( + 100)。(例如设置的数据库端口为8000,则安全组中需要包含8000-8100)。 创建集中式版实例时,如果需要修改内网安全组,请确保入方向规则TCP协议端口包含:20050,5000-5001,2379-2380,6000,6500, - ( + 100)。(例如设置的数据库端口为8000,则安全组中需要包含8000-8100)。操作步骤登录管理控制台。 单击管理控制台左上角的,选择区域和项目。 在页面左上角单击,选择“数据库 > 云数据库 GaussDB”,进入云数据库 GaussDB信息页面。 在“实例管理”页面,选择目标实例,单击实例名称,进入实例的“基本信息”页面。 设置安全组规则。 在“网络信息”模块,单击安全组名称,进入安全组页面。 点击放大 在“入方向规则”子页签下单击“添加规则”,在“添加入方向规则”弹出框中填写安全组信息,单击“确定”。 单击“+”可以依次增加多条入方向规则。
  • [技术解读] GaussDB-慢SQL发现
    GaussDB- 慢SQL发现可获得性本特性自GaussDB版本开始引入。特性简介本功能是一个SQL语句执行时间预测工具,通过模板化方法,实现在不获取SQL语句执行计划的前提下,依据语句逻辑相似度与历史执行记录,预测SQL语句的执行时间。客户价值工具不需要用户提供SQL执行计划,对数据库性能不会有任何影响。不同于业内其他算法只局限于OLAP或者OLTP,本工具场景更加广泛。特性描述SQLdiag着眼于数据库的历史SQL语句,通过对历史SQL语句的执行表现进行总结归纳,将之再用于推断新的未知业务上。由于短时间内数据库SQL语句执行时长不会有太大的差距,SQLdiag可以从历史数据中检测出与已执行SQL语句相似的语句结果集,并基于SQL向量化技术和模板化方法预测SQL语句执行时长。特性增强无特性约束需要保证用户提供的历史日志及待预测负载的格式符合要求,可以使用数据库GUC参数开启收集,也可以通过监控工具采集。为保证预测准确率,用户提供的历史语句日志应尽可能全面并具有代表性。按照要求配置python环境。依赖关系无
  • [技术解读] GaussDB数据库解析数据库用于管理各类数据对象,与其他数据库隔离
    GaussDB数据库解析数据库用于管理各类数据对象,与其他数据库隔离数据库 数据库用于管理各类数据对象,与其他数据库隔离。创建数据对象时可以指定对应的表空间,如果不指定相应的表空间,相关的对象会默认保存在PG_DEFAULT空间中。数据库管理的对象可分布在多个表空间上。表空间 在GaussDB中,表空间是一个目录,集群中可以存在多个表空间,里面存储的是它所包含的数据库的各种物理文件。由于表空间是一个目录,仅起到了物理隔离的作用,其管理功能依赖于文件系统。模式 GaussDB的模式是对数据库做一个逻辑分割。所有的数据库对象都建立在模式下面。GaussDB的模式和用户是弱绑定,弱绑定是指虽然创建用户的同时会自动创建一个同名模式,但用户也可以单独创建模式,并且为用户指定其他的模式。用户和角色 GaussDB使用用户和角色控制对数据库的访问。根据角色自身的设置不同,一个角色可以看做是一个数据库用户,或者一组数据库用户,一个用户唯一对应一个角色。在GaussDB中角色和用户之间的区别只在于角色默认是没有LOGIN权限的。在GaussDB中可以使用角色叠加来更灵活地进行管理。事务管理 在事务管理上,GaussDB采取了MVCC(多版本并发控制)结合两阶段锁的方式,其特点是读写之间不阻塞。GaussDB的astore存储引擎没有将历史版本数据统一存放,而是和当前元组的版本放在了一起。GaussDB的astore存储引擎没有回滚段的概念,但是为了定期清除历史版本数据,GaussDB的astore存储引擎引入了VACUUM线程。一般情况下,除非用户要做性能调优,否则不用特别关注VACUUM线程。GaussDB的ustore存储引擎是将历史版本数据统一存放到undo回滚段里,由undo回收线程统一清理历史版本数据。此外,GaussDB对于单语句查询(没有使用BEGIN等语句显示启动事务块)是自动提交事务的。
  • [技术解读] GaussDB创建和管理数据库
    GaussDB创建和管理数据库GaussDB创建和管理数据库前提条件 用户必须拥有数据库创建的权限或者是数据库的系统管理员权限才能创建数据库,授予创建数据库的权限请参见用户及权限。背景信息 初始时,GaussDB包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。CREATE DATABASE实际上通过拷贝模板数据库来创建新数据库。只支持拷贝template0。请避免使用客户端或其他方式连接及操作两个模板数据库。说明: 模板数据库中没有用户表,可通过系统表PG_DATABASE查看模板数据库属性。 模板template0不允许用户连接,模板template1只允许数据库初始用户和系统管理员连接,普通用户无法连接。数据库系统中会有多个数据库,但是同一时刻客户端程序只能连接一个数据库。当前,不支持在不同的数据库之间进行相互查询(跨库查询或跨库事务)。当数据库集群中存在多个数据库时,可以通过客户端工具的-d参数指定目标数据库进行登录,也可以在客户端程序登录数据库以后通过\c命令进行数据库切换。注意事项如果数据库的编码为SQL_ASCII(可以通过“show server_encoding”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。针对这种情况,请遵循以下条件:保证数据对象的名称不超过限定长度。使用例如utf-8编码集作为数据库的默认存储编码集(server_encoding)。不要使用多字节字符作为对象名。因为误操作导致在多字节字符的中间截断,从而导致无法删除数据库对象,如果出现这种现象,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删除。操作步骤使用如下命令创建一个新的数据库db_tpcds。gaussdb=# CREATE DATABASE db_tpcds; CREATE DATABASE查看数据库。 使用\l元命令查看数据库系统的数据库列表。gaussdb=# \l使用如下命令通过系统表pg_database查询数据库列表。gaussdb=# SELECT datname FROM pg_database;修改数据库。 用户可以使用如下命令修改数据库属性(比如:owner、名称和默认的配置属性)。使用如下命令为数据库重新命名。gaussdb=# ALTER DATABASE db_tpcds RENAME TO human_tpcds; ALTER DATABASE
  • [技术解读] GaussDB技术解析之删除表中数据
    GaussDB技术解析之删除表中数据在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录。gaussdb=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869;如果执行如下命令之一,会删除表中所有的行。gaussdb=# DELETE FROM customer_t1;或:gaussdb=# TRUNCATE TABLE customer_t1;说明: 全表删除的场景下,建议使用truncate,不建议使用delete。删除创建的表。gaussdb=# DROP TABLE customer_t1;
  • [技术解读] GaussDB技术解析之删除表中数据
    在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录。gaussdb=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869;如果执行如下命令之一,会删除表中所有的行。gaussdb=# DELETE FROM customer_t1;或:gaussdb=# TRUNCATE TABLE customer_t1;说明: 全表删除的场景下,建议使用truncate,不建议使用delete。删除创建的表。gaussdb=# DROP TABLE customer_t1;