greenplumn CCostModelGPDB 源码

2022-08-18 浏览 (674)

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

相关信息

greenplumn 源码目录

相关文章

greenplumn CCostModelParamsGPDB 源码

  • 所属分类: 大数据
  • 本文标签: greenplum
  • 版权声明: 本文链接 https://seaxiang.com/blog/9811a9aac8c74a5894f4599627dac815