查询执行完成

src\network\ClientMessageHandleJob.cpp:921 查询执行完成


void ClientMessageHandleJob::completeQuery()
{
    const scidb::SciDB& scidb = getSciDBExecutor();


    const QueryID queryID = _messageDesc->getQueryID();
    try
    {
        scidb.completeQuery(queryID);
        _connection->detachQuery(queryID);
        std::shared_ptr<MessageDesc> msg(makeOkMessage(queryID));
        sendMessageToClient(msg);


       	/


        LOG4CXX_TRACE(logger, "The query " << queryID << " execution was completed")
    }
    catch (const Exception& e)
    {
        LOG4CXX_ERROR(logger, e.what()) ;
        std::shared_ptr<MessageDesc> msg(makeErrorMessageFromException(e, queryID));
        sendMessageToClient(msg);
    }
}


Oracle查询执行过程可以大致分为以下几个步骤: 1. 语法解析:首先,Oracle会对查询语句进行语法解析,确保语句的正确性。如果语句中存在语法错误,Oracle会返回相应的错误信息。 2. 语义分析:在语义分析阶段,Oracle会验证查询语句中各个对象的存在性和访问权限,并进行表达式的类型检查。如果存在对象不存在或者权限不足等问题,Oracle会返回相应的错误信息。 3. 查询优化器:在查询优化器阶段,Oracle会根据查询语句的复杂度和数据表的统计信息等因素,生成多个可能的执行计划。执行计划是一种描述查询执行方式的逻辑和物理操作序列。 4. 执行计划选择:在执行计划选择阶段,Oracle会评估每个生成的执行计划,并选择一个最优的执行计划。最优执行计划通常是根据成本估算模型选择的,即估计执行每个执行计划所需的资源消耗,并选择成本最低的执行计划。 5. 执行计划执行:当最优执行计划确定后,Oracle将按照该计划开始执行查询操作。查询操作可能涉及数据读取、排序、连接等操作,Oracle会根据执行计划中定义的逻辑和物理操作序列来完成这些操作。 6. 结果返回:当查询操作完成后,Oracle会将查询结果返回给客户端。如果查询结果较大,Oracle可能会使用临时表空间等机制来保存结果数据。 需要注意的是,以上步骤是一个简化的描述,实际执行过程中还涉及到缓存、锁定、并发控制等多个细节处理。此外,Oracle还提供了一些调优手段,如索引、分区等,可以进一步提升查询性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值