greenplumn CCostModelGPDB 源码
greenplumn CCostModelGPDB 代码
文件路径:/src/backend/gporca/libgpdbcost/include/gpdbcost/CCostModelGPDB.h
//---------------------------------------------------------------------------
// Greenplum Database
// Copyright (C) 2014 VMware, Inc. or its affiliates.
//
// @filename:
// CCostModelGPDB.h
//
// @doc:
// GPDB cost model
//---------------------------------------------------------------------------
#ifndef GPDBCOST_CCostModelGPDB_H
#define GPDBCOST_CCostModelGPDB_H
#include "gpos/base.h"
#include "gpos/common/CDouble.h"
#include "gpdbcost/CCostModelParamsGPDB.h"
#include "gpopt/cost/CCost.h"
#include "gpopt/cost/ICostModel.h"
#include "gpopt/cost/ICostModelParams.h"
#include "gpopt/operators/COperator.h"
namespace gpdbcost
{
using namespace gpos;
using namespace gpopt;
using namespace gpmd;
//---------------------------------------------------------------------------
// @class:
// CCostModelGPDB
//
// @doc:
// GPDB cost model
//
//---------------------------------------------------------------------------
class CCostModelGPDB : public ICostModel
{
private:
// memory pool
CMemoryPool *m_mp;
// number of segments
ULONG m_num_of_segments;
// cost model parameters
CCostModelParamsGPDB *m_cost_model_params;
// return cost of processing the given number of rows
static CCost CostTupleProcessing(DOUBLE rows, DOUBLE width,
ICostModelParams *pcp);
// helper function to return cost of producing output tuples from Scan operator
static CCost CostScanOutput(CMemoryPool *mp, DOUBLE rows, DOUBLE width,
DOUBLE num_rebinds, ICostModelParams *pcp);
// helper function to return cost of a plan rooted by unary operator
static CCost CostUnary(CMemoryPool *mp, CExpressionHandle &exprhdl,
const SCostingInfo *pci, ICostModelParams *pcp);
// cost of spooling
static CCost CostSpooling(CMemoryPool *mp, CExpressionHandle &exprhdl,
const SCostingInfo *pci, ICostModelParams *pcp);
// add up children cost
static CCost CostChildren(CMemoryPool *mp, CExpressionHandle &exprhdl,
const SCostingInfo *pci, ICostModelParams *pcp);
// returns cost of highest costed child
static CCost CostMaxChild(CMemoryPool *mp, CExpressionHandle &exprhdl,
const SCostingInfo *pci, ICostModelParams *pcp);
// check if given operator is unary
static BOOL FUnary(COperator::EOperatorId op_id);
// cost of scan
static CCost CostScan(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of filter
static CCost CostFilter(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of index scan
static CCost CostIndexScan(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of index only scan
static CCost CostIndexOnlyScan(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of bitmap table scan
static CCost CostBitmapTableScan(CMemoryPool *mp,
CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of sequence project
static CCost CostSequenceProject(CMemoryPool *mp,
CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of CTE producer
static CCost CostCTEProducer(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of CTE consumer
static CCost CostCTEConsumer(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of const table get
static CCost CostConstTableGet(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of DML
static CCost CostDML(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of hash agg
static CCost CostHashAgg(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of scalar agg
static CCost CostScalarAgg(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of stream agg
static CCost CostStreamAgg(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of sequence
static CCost CostSequence(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of sort
static CCost CostSort(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of TVF
static CCost CostTVF(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of UnionAll
static CCost CostUnionAll(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of hash join
static CCost CostHashJoin(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of merge join
static CCost CostMergeJoin(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of nljoin
static CCost CostNLJoin(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of inner or outer index-nljoin
static CCost CostIndexNLJoin(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of motion
static CCost CostMotion(CMemoryPool *mp, CExpressionHandle &exprhdl,
const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci);
// cost of bitmap scan when the NDV is small
static CCost CostBitmapSmallNDV(const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci, CDouble dNDV);
// cost of bitmap scan when the NDV is large
static CCost CostBitmapLargeNDV(const CCostModelGPDB *pcmgpdb,
const SCostingInfo *pci, CDouble dNDV);
// cost of compute scalar
static CCost CostComputeScalar(CMemoryPool *mp, CExpressionHandle &exprhdl,
const SCostingInfo *pci,
ICostModelParams *pcp,
const CCostModelGPDB *pcmgpdb);
public:
// ctor
CCostModelGPDB(CMemoryPool *mp, ULONG ulSegments,
CCostModelParamsGPDB *pcp = nullptr);
// dtor
~CCostModelGPDB() override;
// number of segments
ULONG
UlHosts() const override
{
return m_num_of_segments;
}
// return number of rows per host
CDouble DRowsPerHost(CDouble dRowsTotal) const override;
// return cost model parameters
ICostModelParams *
GetCostModelParams() const override
{
return m_cost_model_params;
}
// main driver for cost computation
CCost Cost(CExpressionHandle &exprhdl,
const SCostingInfo *pci) const override;
// cost model type
ECostModelType
Ecmt() const override
{
return ICostModel::EcmtGPDBCalibrated;
}
}; // class CCostModelGPDB
} // namespace gpdbcost
#endif // !GPDBCOST_CCostModelGPDB_H
// EOF
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦