-
执行引擎一般负责查询的执行,执行引擎在SQL执行栈中起到接收优化器生成的执行计划Plan、并对通过存储引擎提供的数据读写接口,实现对数据进行计算得到查询的结果集。在典型的OLTP场景中,简单查询占了很大一部分比例。这种查询的特征是只涉及单表和简单表达式的查询,因此为了加速这类查询,openGauss提出了SQL by pass框架,在parse层对这类查询做简单的模式判别后,进入到特殊的执行路径里,跳过经典的执行器执行框架,包括算子的初始化与执行、表达式与投影等经典框架,直接重写一套简洁的执行路径,并且直接调用存储接口,这样可以大大加速简单查询的执行速度。SQL by passenable_opfusion用于控制是否对简单增删改查进行优化,简单insert语句在开启enable_opfusion时的执行计划如下由于开启SQL BY PASS,从exec_simple_query过来的语句,会判断可以走SQL BY PASS,否则进入CreatePortal走经典执行流程。static void exec_simple_query(const char* query_string, MessageType messageType, StringInfo msg = NULL){ … /* SQL bypass */ if (runOpfusionCheck) { // 进入SQL by pass (void)MemoryContextSwitchTo(oldcontext); void* opFusionObj = OpFusion::FusionFactory( OpFusion::getFusionType(NULL, NULL, plantree_list), oldcontext, NULL, plantree_list, NULL); if (opFusionObj != NULL) { ((OpFusion*)opFusionObj)->setCurrentOpFusionObj((OpFusion*)opFusionObj); if (OpFusion::process(FUSION_EXECUTE, NULL, completionTag, isTopLevel, NULL)) { CommandCounterIncrement(); finish_xact_command(); EndCommand(completionTag, dest); MemoryContextReset(OptimizerContext); break; } Assert(0); } (void)MemoryContextSwitchTo(t_thrd.mem_cxt.msg_mem_cxt); } /* * Create unnamed portal to run the query or queries in. If there * already is one, silently drop it. */ portal = CreatePortal("", true, true); // 经典执行流程 …}进入InsertFusion::execute完成数据插入操作。#0 InsertFusion::execute (this=0x7fd93a4104f8, max_rows=9223372036854775807, completionTag=0x7fd933e67020 "@p\346\063\331\177") at opfusion_insert.cpp:297#1 0x0000000001ac00d9 in OpFusion::fusionExecute (this=0x7fd93a4104f8, msg=0x0, completionTag=0x7fd933e67020 "@p\346\063\331\177", isTopLevel=true, isQueryCompleted=0x0) at opfusion.cpp:453#2 0x0000000001ac0389 in OpFusion::process (op=0, msg=0x0, completionTag=0x7fd933e67020 "@p\346\063\331\177", isTopLevel=true, isQueryCompleted=0x0) at opfusion.cpp:491#3 0x000000000193a910 in exec_simple_query (query_string=0x7fd966ad2060 "insert into t1 values(1,200);", messageType=QUERY_MESSAGE, msg=0x7fd933e67210) at postgres.cpp:2624SQL by pass适应的场景有:只支持indexscan和indexonlyscan,且全部WHERE语句的过滤条件都在索引上。只支持单表增删改查,不支持join、using。只支持行存表,不支持分区表,表不支持有触发器。不支持active sql、QPS等信息统计特性。不支持正在扩容和缩容的表。不支持查询或者修改系统列。只支持简单SELECT语句,例如SELECT c3 FROM t1 WHERE c1 = ? and c2 =10;仅可以查询目标表的列,c1和c2列为索引列,后边可以是常量或者参数,可以使用 for update。只支持简单INSERT语句,例如:INSERT INTO t1 VALUES (?,10,?);仅支持一个VALUES,VALUES里面的类型可以是常量和参数,不支持returning。只支持简单DELETE语句,例如:DELETE FROM t1 WHERE c1 = ? and c2 = 10; c1和c2列为索引列,后边可以是常量或者参数。只支持简单UPDATE语句,例如UPDATE t1 SET c3 = c3+? WHERE c1 = ? and c2 = 10;c3列修改的值可以是常量和参数,也可以是一个简单的表达式,c1和c2列为索引列,后边可以是常量或者参数。经典的执行器关闭enable_opfusion,简单insert的执行计划是这样的在这种执行流程中Portal是执行SQL语句的载体,每一条SQL对应唯一的Portal,不同的查询类型对应的Portal类型也有区别。typedef enum PortalStrategy { PORTAL_ONE_SELECT, // SQL语句包含单一的SELECT查询 PORTAL_ONE_RETURNING, // INSERT/UPDATE/DELETE语句包含Returning PORTAL_ONE_MOD_WITH, // 查询语句包含With PORTAL_UTIL_SELECT, // 工具类型查询语句,如explain PORTAL_MULTI_QUERY // 所有其他类型查询语句} PortalStrategy;Portal的生命周期管理在exec_simple_query函数中实现,该函数负责Portal创建、执行和清理。Portal执行的主要执行流程包括PortalStart函数、PortalRun函数、PortalDrop函数几个部分。其中PortalStart函数负责进行Portal结构体初始化工作,包括执行算子初始化、内存上下文分配等;PortalRun函数负责真正的执行和运算,它是执行器的核心;PortalDrop函数负责最后的清理工作,主要是数据结构、缓存的清理。PortalRun函数根据查询类型进入不同的处理函数bool PortalRun( Portal portal, long count, bool isTopLevel, DestReceiver* dest, DestReceiver* altdest, char* completionTag){ … switch (portal->strategy) { case PORTAL_ONE_SELECT: … case PORTAL_MULTI_QUERY: // insert从这里进入 PortalRunMulti(portal, isTopLevel, dest, altdest, completionTag); /* Prevent portal's commands from being re-executed */ MarkPortalDone(portal); /* Always complete at end of RunMulti */ result = true; break;…}最终执行ExecInsertT完成数据插入。#0 ExecInsertT (state=0x7fdbf1836060, slot=0x7fdbf0c86460, planSlot=0x7fdbf0c86460, estate=0x7fdbf0c74060, canSetTag=true, options=0, partitionList=0x7fdbf3125860) at nodeModifyTable.cpp:800#1 0x0000000001a684cd in ExecModifyTable (node=0x7fdbf1836060) at nodeModifyTable.cpp:3043#2 0x00000000019f3f93 in ExecModifyTableWrap (node=0x7fdbf1836060) at execProcnode.cpp:785#3 0x00000000019f43b5 in ExecProcNode (node=0x7fdbf1836060) at execProcnode.cpp:1038#4 0x00000000019ed9d5 in ExecutePlan (estate=0x7fdbf0c74060, planstate=0x7fdbf1836060, operation=CMD_INSERT, sendTuples=false, numberTuples=0, direction=ForwardScanDirection, dest=0x7fdbf13bb9c8, motJitContext=0x0) at execMain.cpp:2163#5 0x00000000019ea25a in standard_ExecutorRun (queryDesc=0x7fdbf1558060, direction=ForwardScanDirection, count=0) at execMain.cpp:608#6 0x000000000181d6ef in explain_ExecutorRun (queryDesc=0x7fdbf1558060, direction=ForwardScanDirection, count=0) at auto_explain.cpp:121#7 0x00000000019e9dee in ExecutorRun (queryDesc=0x7fdbf1558060, direction=ForwardScanDirection, count=0) at execMain.cpp:486#8 0x000000000194fed6 in ProcessQuery (plan=0x7fdbf0b7b2e0, sourceText=0x7fdbf13ba060 "insert into t1 values(1,200);", params=0x0, isMOTTable=false, motJitContext=0x0, dest=0x7fdbf13bb9c8, completionTag=0x7fdbf3126020 "") at pquery.cpp:292#9 0x0000000001953fa1 in PortalRunMulti (portal=0x7fdbf0c7a060, isTopLevel=true, dest=0x7fdbf13bb9c8, altdest=0x7fdbf13bb9c8, completionTag=0x7fdbf3126020 "") at pquery.cpp:1889#10 0x00000000019525e0 in PortalRun (portal=0x7fdbf0c7a060, count=9223372036854775807, isTopLevel=true, dest=0x7fdbf13bb9c8, altdest=0x7fdbf13bb9c8, completionTag=0x7fdbf3126020 "") at pquery.cpp:1191#11 0x000000000193ac65 in exec_simple_query (query_string=0x7fdbf13ba060 "insert into t1 values(1,200);", messageType=QUERY_MESSAGE, msg=0x7fdbf3126210) at postgres.cpp:2720以上分析了简单insert语句的两种执行流程,对于delete,update,select基本工作流程一致。
-
如题,客户不差钱,使用GaussDB(for openGauss),我们自己开发使用的是开源版openGauss, 导致在客户实施时存在一些兼容问题。请问有什么好的解决版本。有没有专门的差异说明文档?或者免费供开发者试用的GaussDB(for openGauss)?
-
报的都是连接超时错误
-
GaussDB怎么打开并行创建索引
-
存储过程语句执行慢怎么解决
-
删除数据的时候报这个ERROR: partition table delete conflict,请问下怎么解决?
-
opengaussdb无法启动,排查是因为数据库时间和系统时间,时区不一致,导致时间差过大能通过nomount方式启动数据库实例。但是以nomount的方式启动的没法修改数据库时间,这种问题有解决方案嘛?
-
问题一:开通白名单内网:192.168.88.28公网:118.140.112.6
-
是否是因为gsjbcd4.jar中的 org.postgresql.ds.common.BaseDataSource getUrl为private 导致与springboot2.6.3中org.springframework.boot.jdbc.DataSourceBuilderPostgresDataSourceProperties BaseDataSource::getUrl 报错
-
所谓元命令就是在gsql里输入的任何以不带引号的反斜杠开头的命令。本课程通过实际使用gsql实践,介绍GaussDB数据库gsql所提供的元命令。本课程仅展示基础的元命令使用,如果想要了解更多元命令使用方法,请单击此处。操作步骤步骤1 使用gsql连接到GaussDB实例。gsql工具使用-d参数指定目标数据库名、-U参数指定数据库用户名、-h参数指定主机名、-p参数指定端口号信息。若未指定数据库名称,则使用初始化时默认生成的数据库名称;若未指定数据库用户名,则默认使用当前操作系统用户作为数据库用户名;当某个值没有前面的参数(-d、-U等)时,若连接的命令中没有指定数据库名(-d)则该参数会被解释成数据库名;如果已经指定数据库名(-d)而没有指定数据库用户名(-U)时,该参数则会被解释成数据库用户名。示例,使用root用户连接到远程主机postgres数据库的8000端口。gsql -h 10.180.123.163 -d postgres -U root -p 8000步骤2 使用元命令查看所有的数据库。l回显如下: Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+---------+-------+----------------------- postgres | rdsAdmin | UTF8 | C | C | template0 | rdsAdmin | UTF8 | C | C | =c/rdsAdmin + | | | | | rdsAdmin=CTc/rdsAdmin template1 | rdsAdmin | UTF8 | C | C | =c/rdsAdmin + | | | | | rdsAdmin=CTc/rdsAdmin (3 rows)可以看到,新创建的实例默认存在postgres库和两个模板数据库。步骤3 使用元命令,查看或设置客户端字符编码格式。encodingUTF8使用encoding ENCODING,在元命令后指定对应的字符集类型即可设置客户端字符编码格式。步骤4 使用元命令查看实例的所有角色。du回显如下:Role name | Attributes | Member of -----------+------------------------------------------------------------------------------------------------------------------+-------------------------------- ------------------------------------------------------------------------- rdsAdmin | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {} rdsBackup | Operatoradmin, Persistence | {} rdsMetric | Monitoradmin, Persistence | {} rdsRepl | Replication, Persistence | {} root | Create role, Create DB, Monitoradmin | {gs_role_copy_files,gs_role_sig nal_backend,gs_role_tablespace,gs_role_replication,gs_role_account_lock}可以看到当前数据库的所有角色,以及角色所拥有的所有权限。也可以使用如下方法模糊查找指定角色。du ro?tRole name | Attributes | Membe o -----------+--------------------------------------+--------------------------------------------------------------------------------------------------------- root | Create role, Create DB, Monitoradmin | {gs_role_copy_files,gs_role_signal_backend,gs_role_tablespace,gs_role_replication,gs_role_account_lock} 步骤5 使用元命令,查看当前连接的数据库的信息。conninfoYou are connected to database "postgres" as user "root" on host "10.xxx.xxx.xxx" at port "8000".步骤6 创建一个新的库,并使用元命令快速切换至新的数据库。执行如下语句,创建新的数据库。CREATE DATABASE db_tpcds;执行如下元命令,快速切换至新库。c db_tpcds输入密码,成功切换至新库。Password for user root: SSL connection (cipher: ECDHE-RSA-AES128-GCM-SHA256, bits: 128) You are now connected to database "db_tpcds" as user "root". db_tpcds=>步骤7 执行元命令,退出数据库。q更多元命令请参见元命令参考。
-
GaussDB(for openGauss)直接支持地理空间字段吗?还是需要安装其它扩展?如PostGIS在tryme上CREATE EXTENSION postgis;CREATE TABLE geometries (name varchar, geom geometry);一没有扩展控制文件,二没有geometry类型
-
近日,以“因聚而生 为你所能”为主题的华为伙伴暨开发者大会终于圆满落幕。在大会的高校分会中,华为云GaussDB数据库的七位布道师分别走进重庆大学、桂林电子科技大学、湖南大学、华南理工大学、宁波大学、西安邮电大学、浙江工业大学,围绕云数据库,与学生们展开面对面的分享与交流,带来数据库的前沿趋势和最新技术解读,足迹遍布了全国六大省份。华为云GaussDB布道师走进七所高校在现场,布道师们向各位学子们详细介绍了数据库行业的诞生、兴起、发展、转型、新玩家加入、未来演进等历程,并对中国数据库自80年代以来从院校科研、国家重大科研专项到后来的商业市场萌芽、壮大等发展历程做了详细介绍。近年来国产数据库呈现出百花齐放的蓬勃状态,根据第三方社区墨天轮“中国数据库排行”显示,目前已有231款国产数据库在排行榜中。数字化时代,数据量呈爆发式增长,面对企业日益增长的需求,传统数据库已无法支撑,而华为云GaussDB结合多年的技术积累和客户实践,正在打造世界级的数据库产品和全场景的云服务。技术创新是永无止境的,布道师们在现场发布并解读了GaussDB数据库HTAP混合负载技术,该技术的商用意味着企业能有效避免传统解决方案中数据抽取、转换和装载等繁琐步骤,极大提升数据处理的时效性,为业务提供实时数据分析,助力企业精准商业决策;另一个重磅消息是,华为将GaussDB时序时空数据库内核开源,并命名为openGemini, openGemini时序时空数据库面向物联网、运维监控等业务场景,具备创新的架构设计、卓越的读写性能、高效的数据分析能力和数据压缩能力,能帮助企业经济高效地处理海量时序数据。openGemini是继openGauss开源之后,华为开源的又一数据库根技术,会场布道师们也诚邀院校学生、数据库行业未来主力军加入社区,共同繁荣openGemini技术生态!人才的培养、就业、未来发展是院校和学生们最为关注的问题,也是企业长期布局、生态建设离不开的话题。分会现场,布道师们还就同学们关心的职业生涯规划问题进行了现场答疑,并基于当前数据库人才的发展趋势,提出了未来职业发展的实质性建议。数据库是专家密集型的行业,数据库产业的发展离不开多类型行业人才的持续加入,在现场,布道师们也以华为云数据库全球人才布局、高端专家为例,呼吁更多的学生加入数据库行业,为数据库产业的繁荣和壮大共同努力。在最后,布道师们还就正在进行的第八届“互联网+”大学生创新创业大赛华为云GaussDB数据库创新应用赛进行命题解读,鼓励大家积极报名参赛,在更大的平台上发挥潜能、展示才华。桂林电子科技大学分享现场当前,我国数据库产业的发展欣欣向荣,尤其是分布式、云原生数据库发展蒸蒸日上。同时,数据库产业的繁荣离不开数据库人才力量的支撑,这次GaussDB布道师走进高校不仅有助于学子们清楚地看到现在数据库产业的发展现状,从而对自己未来的职业发展规划形成清晰的认知,也有助于他们看到将来更广阔的职业空间,为数据库产业的发展贡献自己的智慧和力量,成为改变数据库行业的下一代。一直以来,华为云GaussDB积极参与和推进产教融合,推动校企合作,取得了许多成果。当前,华为云GaussDB已与国内100+所院校建立起合作关系,在教育部2022年第一批“产学合作协同育人”项目中,基于华为云GaussDB数据库的新工科建设项目有11项成功入围,项目将把GaussDB数据库课程引入高校教学体系中,作为高校数据库课程的学习范本和实验平台。未来,华为云GaussDB将持续与高校紧密合作,积极推进产教融合,为学生们输送更多行业前沿动态和技术探索,完善华为云GaussDB数据库的人才培养体系,保障数据库产业未来人才供给!
-
6月16日,2022年华为伙伴暨开发者大会正在以线上的方式火热进行,会上集结了众多行业专家、合作伙伴和客户,一起共话行业前沿趋势,探索技术新发展。在“探秘GaussDB,打造坚实金融数据新底座”专场,华为云数据库首席架构师冯柯、工商银行软件开发中心高级经理董勇明、上海掌数科技有限公司首席顾问邹昌根和华为云数据库创新LAB主任张文亮以线上的形式现身,与观众分享了GaussDB最新技术趋势,以及华为云GaussDB与伙伴合作背后的故事和实践经验。 华为云GaussDB 技术创新之路永不停歇持续创新是华为云一直以来坚持在做的事。当前,随着5G、IoT、AI、大数据的快速发展,数据量爆发式增长,数据库云化进一步提升,数据库行业也迎来了云原生2.0时代,这对数据库的性能、可靠性、可用性都有了更高的要求。华为云GaussDB多年来持续聚焦技术创新,构建以应用为中心的新型数据库云服务,让客户聚焦业务创新。在此次大会上,华为云数据库首席架构师冯柯重点介绍了刚刚正式商用的GaussDB云原生HTAP,分享如何为业务提供更加及时精准的数据分析,助力商业决策;ALT应用无损透明技术如何在遭遇故障、运维以及实例变更时保持业务不中断,实现真正的业务高可用;创新性地将NDP(Near Data Processing, 近数据处理) 和PQ(Parallel Query, 并行查询)相结合,打造了NDPQ(近数据并行处理),打破复杂查询性能天花板。华为云GaussDB的技术优势正在赋能越来越多的企业客户实现数字化高效转型。 工商银行核心系统转型 聚焦技术硬实力 夯实数据底座“在数字化升级的道路上,我们选择了华为云GaussDB作为优秀的合作伙伴。”工商银行软件开发中心高级经理董勇明在分享中提到,工商银行对自身的核心交易系统的诉求有清晰的认知,自2019年和GaussDB联创以来,已有20多个业务系统相继试点上线。去年,在开放平台大型业务系统传统集中式数据库转型领域,双方持续技术攻关,初步形成了整套的系统性技术资产和解决方案,为金融行业提供了低成本、高效可控的转型借鉴。“这一路的联创实践,充分验证了传统集中式数据库向分布式数据库转型的可行性,为大型商业银行核心系统转型趟出了一条宽阔的道路。未来,工商银行将继续依托产学研联合创新机制,与包括华为在内业界领先企业深入开展联合技术攻关与融合共建,共建金融科技新生态”董勇明说。持续技术攻关,联手共建金融科技新生态 掌数科技&华为云GaussDB 助力证券行业金融创新 打造行业标杆“数据库技术作为根技术,在华为生态体系建设中是非常重要的,这也是我们所看重的。”上海掌数科技有限公司首席顾问邹昌根说到。掌数科技是一家聚焦于证券和大资管行业,面向数据库和大数据技术、智能化场景应用以及行业信息技术应用创新领域的金融科技企业,服务于全国80+大型金融机构客户。掌数科技作为华为在金融证券行业首家数据库技术领域的全面合作伙伴,以法人清算系统为行业典型应用场景,形成了以GaussDB为数据底座的一系列全栈式金融创新方案,并已经在证券行业展开试点应用。该方案不仅规划设计了两地三中心的网络高可用架构,也提供了完善的容灾安全保障,以及一整套、全面的基于GaussDB的技术支撑与服务体系。 联创形成基于法人清算系统的GaussDB全栈式金融创新方案 邹昌根表示:“我们期待通过与华为云GaussDB的合作,能够从多个维度保障创新项目的实施落地,让行业充分感知价值,展现我们优秀的实践经验;我们也将共同推进服务能力与体系建设,从而真正形成完整的GaussDB生态体系。” 探秘openGemini 共建开源时序数据库新生态同时,在GaussDB 数据库专场,华为云数据库创新LAB主任张文亮也对刚刚开源的时序时空数据库做了技术解读。“为了更好地推动数字化产业的创新发展,我们决定把自己的时序数据库GaussDB(for Influx)对外开源,开源社区叫openGemini,这是继openGauss开源之后,华为开源的又一数据库根技术。”张文亮说。openGemini时序时空数据库面向物联网、运维监控等业务场景,具备创新的架构设计、卓越的读写性能、高效的数据分析能力和数据压缩能力,帮助企业经济高效地处理海量时序数据。openGemini开源后将秉持着“基于创新技术、贡献产业发展,开放合作,共建共享”的生态策略,和开发者、企业一起,完善周边工具和南北向的生态,共同繁荣openGemini的技术生态。汇聚各界力量,共建openGemini繁荣生态 展望未来,华为云GaussDB将持续深耕技术创新,继续携手工商银行和掌数科技,以及越来越多的企业伙伴,以技术赋能业务数字化升级,并持续贡献openGauss和openGemini开源生态,为行业发展创造更多价值!
-
华为云GaussDB精彩议程来袭,重磅特性升级,优秀实践,重大产品开源……更多精彩内容,请锁定6月16日10:30GaussDB专场直播~
-
Windows操作系统自带ODBC数据源管理器,无需用户手动安装管理器便可直接进行配置。操作步骤步骤一 下载客户端GaussDB驱动程序并进行安装:下载地址:cid:link_0 在本地(例如D:/download)下载ZIP文件后进行解压缩,解压缩后文件如下。由于本实验openGauss安装在ECS(openEuler ARM)上,所以进入Euler2.8_arm_64文件夹,显示如下:解压缩GaussDB-Kernel-V500R001C10-Windows-Odbc.tar.gz文件,显示如下:点击psqlodbc_x86.msi进行安装:默认设置,直到安装完毕。步骤二 打开驱动管理器。在配置数据源时,请使用对应的驱动管理器(假设操作系统安装盘符为C盘,如果是其他盘符,请对路径做相应修改):64位操作系统上进行64位程序开发,安装64位驱动程序后,使用64位的驱动管理器:C:\Windows\System32\odbcad32.exe 或者直接使用“控制面板 > 管理工具 > ODBC 数据源(64 位)。步骤三 配置数据源。在打开的驱动管理器上,选择“用户DSN > 添加 > PostgreSQL Unicode(x64)”,然后进行配置:Data Source:openGauss (数据源名称,可以自定义)。Database:db_tpcc (需要连接的Datebase名称)。Server:openGauss数据库服务器的公网IP,请根据实际情况填写。Pot:26000 (端口号)。User Name:joe (连接数据库的用户名,不能使用omm用户,需要在数据库中创建)Password:dbuser用户的密码,请根据实际情况填写。步骤四 验证并保存设置。点击Test,显示 Connection successful 表示设置成功:点击保存:配置成功!
上滑加载中
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签