• [问题求助] 【GaussDB】高斯支持gin索引不?
    如题,请问下大神,高斯支持gin索引不?
  • [问题求助] 【GaussDB】GaussDB修改表字段类型时,怎么样可以关掉级联限制吗?
    GaussDB修改表字段类型时,怎么样可以关掉级联限制吗? 现在表字段一旦被其它视图引用,那表字段就不允许修改,想问下,能不关掉这个级联限制。
  • [问题求助] GaussDB删除存储过程的的语法是啥?
    GaussDB删除存储过程的的语法是啥?
  • [问题求助] 什么场景会触发GaussDB主备切换啊
    什么场景会触发GaussDB主备切换啊
  • [问题求助] 请问下,创建临时表报这个错,是什么情况: 
    Store tables do not support global temp table 应该怎么解决
  • [问题求助] 高斯支持在线建索引么,类似Oracle online的方式?
    高斯支持在线建索引么,类似Oracle online的方式?
  • [技术干货] openGauss内核分析(七):SQL by pass & 经典执行器
    执行引擎一般负责查询的执行,执行引擎在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基本工作流程一致。
  • [问题求助] openGauss和GaussDB(for openGauss)差异点有哪些?
    如题,客户不差钱,使用GaussDB(for openGauss),我们自己开发使用的是开源版openGauss, 导致在客户实施时存在一些兼容问题。请问有什么好的解决版本。有没有专门的差异说明文档?或者免费供开发者试用的GaussDB(for openGauss)?
  • [问题求助] GaussDB主从切换的时候回导致我们运行中的任务都失败了,有啥规避方法
    报的都是连接超时错误 
  • [问题求助] GaussDB怎么打开并行创建索引
    GaussDB怎么打开并行创建索引
  • [问题求助] GaussDB存储过程语句执行慢怎么解决
    存储过程语句执行慢怎么解决
  • [问题求助] GaussDB删除数据的时候报这个ERROR: partition table delete conflict,请问下怎么解决?
    删除数据的时候报这个ERROR: partition table delete conflict,请问下怎么解决?
  • [问题求助] opengauss无法启动。。。。急急急
    opengaussdb无法启动,排查是因为数据库时间和系统时间,时区不一致,导致时间差过大能通过nomount方式启动数据库实例。但是以nomount的方式启动的没法修改数据库时间,这种问题有解决方案嘛?
  • [问题求助] 【香港启德项目】【数据平台】用工具登录DWS库,需要把IP地址添加至白名单
    问题一:开通白名单内网:192.168.88.28公网:118.140.112.6
  • [问题求助] springboot2.6.3多数据源引入gsjdbc4.jar报错,如何解决?
    是否是因为gsjbcd4.jar中的 org.postgresql.ds.common.BaseDataSource getUrl为private 导致与springboot2.6.3中org.springframework.boot.jdbc.DataSourceBuilderPostgresDataSourceProperties BaseDataSource::getUrl 报错
总条数:1539 到第
上滑加载中