GitOrigin-RevId: de1403b9fff46dbe78a64a98f178beefb86b11bd
This commit is contained in:
parent
7566a2fe21
commit
df69233f0a
@ -372,9 +372,9 @@ CostEstimate CostEstimator::filterCost(StageType stage,
|
||||
return filterIncrement * ce + incrementalFilterLeafCost * (numIncrementalFilterLeaves * ce);
|
||||
}
|
||||
|
||||
const CostCoefficient CostEstimator::fetchFilterIncrement = makeCostCoefficient(435.38ns);
|
||||
const CostCoefficient CostEstimator::indexFilterIncrement = makeCostCoefficient(132.60ns);
|
||||
const CostCoefficient CostEstimator::collScanFilterIncrement = makeCostCoefficient(202.32ns);
|
||||
const CostCoefficient CostEstimator::fetchFilterIncrement = makeCostCoefficient(nsec(435.38));
|
||||
const CostCoefficient CostEstimator::indexFilterIncrement = makeCostCoefficient(nsec(132.60));
|
||||
const CostCoefficient CostEstimator::collScanFilterIncrement = makeCostCoefficient(nsec(202.32));
|
||||
|
||||
// TODO(SERVER-114546): Use the calibrated coefficients once we estimate the number of
|
||||
// filter leaf evaluations.
|
||||
@ -382,56 +382,57 @@ const CostCoefficient CostEstimator::incrementalFetchFilterLeafCost = minCC;
|
||||
const CostCoefficient CostEstimator::incrementalIndexFilterLeafCost = minCC;
|
||||
const CostCoefficient CostEstimator::incrementalCollScanFilterLeafCost = minCC;
|
||||
|
||||
const CostCoefficient CostEstimator::collScanForwardIncrement = makeCostCoefficient(399.23ns);
|
||||
const CostCoefficient CostEstimator::collScanBackwardIncrement = makeCostCoefficient(404.0ns);
|
||||
const CostCoefficient CostEstimator::collScanForwardIncrement = makeCostCoefficient(nsec(399.23));
|
||||
const CostCoefficient CostEstimator::collScanBackwardIncrement = makeCostCoefficient(nsec(404.0));
|
||||
|
||||
const CostCoefficient CostEstimator::indexScanForwardExamineKey = makeCostCoefficient(435.55ns);
|
||||
const CostCoefficient CostEstimator::indexScanBackwardExamineKey = makeCostCoefficient(459.68ns);
|
||||
const CostCoefficient CostEstimator::incrementalFieldCost = makeCostCoefficient(51.25ns);
|
||||
const CostCoefficient CostEstimator::indexForwardSeek = makeCostCoefficient(1134.71ns);
|
||||
const CostCoefficient CostEstimator::indexBackwardSeek = makeCostCoefficient(1211.58ns);
|
||||
const CostCoefficient CostEstimator::indexScanForwardExamineKey = makeCostCoefficient(nsec(435.55));
|
||||
const CostCoefficient CostEstimator::indexScanBackwardExamineKey =
|
||||
makeCostCoefficient(nsec(459.68));
|
||||
const CostCoefficient CostEstimator::incrementalFieldCost = makeCostCoefficient(nsec(51.25));
|
||||
const CostCoefficient CostEstimator::indexForwardSeek = makeCostCoefficient(nsec(1134.71));
|
||||
const CostCoefficient CostEstimator::indexBackwardSeek = makeCostCoefficient(nsec(1211.58));
|
||||
|
||||
const CostCoefficient CostEstimator::fetchIncrement = makeCostCoefficient(1232.20ns);
|
||||
const CostCoefficient CostEstimator::fetchIncrement = makeCostCoefficient(nsec(1232.20));
|
||||
|
||||
const CostCoefficient CostEstimator::andHashBuild = makeCostCoefficient(216.05ns);
|
||||
const CostCoefficient CostEstimator::andHashProbe = makeCostCoefficient(180.35ns);
|
||||
const CostCoefficient CostEstimator::andHashOutput = makeCostCoefficient(281.46ns);
|
||||
const CostCoefficient CostEstimator::andHashBuild = makeCostCoefficient(nsec(216.05));
|
||||
const CostCoefficient CostEstimator::andHashProbe = makeCostCoefficient(nsec(180.35));
|
||||
const CostCoefficient CostEstimator::andHashOutput = makeCostCoefficient(nsec(281.46));
|
||||
|
||||
const CostCoefficient CostEstimator::sortDefaultStartup = makeCostCoefficient(24067.01ns);
|
||||
const CostCoefficient CostEstimator::sortDefaultIncrement = makeCostCoefficient(216.73ns);
|
||||
const CostCoefficient CostEstimator::sortDefaultSpillIncrement = makeCostCoefficient(653.83ns);
|
||||
const CostCoefficient CostEstimator::sortDefaultLimitStartup = makeCostCoefficient(23761.57ns);
|
||||
const CostCoefficient CostEstimator::sortDefaultLimitC1 = makeCostCoefficient(764.58ns);
|
||||
const CostCoefficient CostEstimator::sortDefaultLimitC2 = makeCostCoefficient(15.81ns);
|
||||
const CostCoefficient CostEstimator::sortDefaultLimitC3 = makeCostCoefficient(233.36ns);
|
||||
const CostCoefficient CostEstimator::sortDefaultStartup = makeCostCoefficient(nsec(24067.01));
|
||||
const CostCoefficient CostEstimator::sortDefaultIncrement = makeCostCoefficient(nsec(216.73));
|
||||
const CostCoefficient CostEstimator::sortDefaultSpillIncrement = makeCostCoefficient(nsec(653.83));
|
||||
const CostCoefficient CostEstimator::sortDefaultLimitStartup = makeCostCoefficient(nsec(23761.57));
|
||||
const CostCoefficient CostEstimator::sortDefaultLimitC1 = makeCostCoefficient(nsec(764.58));
|
||||
const CostCoefficient CostEstimator::sortDefaultLimitC2 = makeCostCoefficient(nsec(15.81));
|
||||
const CostCoefficient CostEstimator::sortDefaultLimitC3 = makeCostCoefficient(nsec(233.36));
|
||||
|
||||
const CostCoefficient CostEstimator::sortSimpleStartup = makeCostCoefficient(22324.54ns);
|
||||
const CostCoefficient CostEstimator::sortSimpleIncrement = makeCostCoefficient(163.56ns);
|
||||
const CostCoefficient CostEstimator::sortSimpleSpillIncrement = makeCostCoefficient(297.03ns);
|
||||
const CostCoefficient CostEstimator::sortSimpleLimitStartup = makeCostCoefficient(21813.35ns);
|
||||
const CostCoefficient CostEstimator::sortSimpleLimitC1 = makeCostCoefficient(739.81ns);
|
||||
const CostCoefficient CostEstimator::sortSimpleLimitC2 = makeCostCoefficient(11.67ns);
|
||||
const CostCoefficient CostEstimator::sortSimpleLimitC3 = makeCostCoefficient(164.50ns);
|
||||
const CostCoefficient CostEstimator::sortSimpleStartup = makeCostCoefficient(nsec(22324.54));
|
||||
const CostCoefficient CostEstimator::sortSimpleIncrement = makeCostCoefficient(nsec(163.56));
|
||||
const CostCoefficient CostEstimator::sortSimpleSpillIncrement = makeCostCoefficient(nsec(297.03));
|
||||
const CostCoefficient CostEstimator::sortSimpleLimitStartup = makeCostCoefficient(nsec(21813.35));
|
||||
const CostCoefficient CostEstimator::sortSimpleLimitC1 = makeCostCoefficient(nsec(739.81));
|
||||
const CostCoefficient CostEstimator::sortSimpleLimitC2 = makeCostCoefficient(nsec(11.67));
|
||||
const CostCoefficient CostEstimator::sortSimpleLimitC3 = makeCostCoefficient(nsec(164.50));
|
||||
|
||||
const CostCoefficient CostEstimator::sortedMergeInput = makeCostCoefficient(481.48ns);
|
||||
const CostCoefficient CostEstimator::sortedMergeOutput = makeCostCoefficient(254.03ns);
|
||||
const CostCoefficient CostEstimator::sortedMergeInput = makeCostCoefficient(nsec(481.48));
|
||||
const CostCoefficient CostEstimator::sortedMergeOutput = makeCostCoefficient(nsec(254.03));
|
||||
|
||||
const CostCoefficient CostEstimator::simpleProjectionIncrement = makeCostCoefficient(317.60ns);
|
||||
const CostCoefficient CostEstimator::coveredProjectionIncrement = makeCostCoefficient(216.77ns);
|
||||
const CostCoefficient CostEstimator::defaultProjectionIncrement = makeCostCoefficient(768.21ns);
|
||||
const CostCoefficient CostEstimator::simpleProjectionIncrement = makeCostCoefficient(nsec(317.60));
|
||||
const CostCoefficient CostEstimator::coveredProjectionIncrement = makeCostCoefficient(nsec(216.77));
|
||||
const CostCoefficient CostEstimator::defaultProjectionIncrement = makeCostCoefficient(nsec(768.21));
|
||||
|
||||
const CostCoefficient CostEstimator::limitIncrement = makeCostCoefficient(109.50ns);
|
||||
const CostCoefficient CostEstimator::limitIncrement = makeCostCoefficient(nsec(109.50));
|
||||
|
||||
const CostCoefficient CostEstimator::skipIncrement = makeCostCoefficient(127.41ns);
|
||||
const CostCoefficient CostEstimator::passIncrement = makeCostCoefficient(113.94ns);
|
||||
const CostCoefficient CostEstimator::skipIncrement = makeCostCoefficient(nsec(127.41));
|
||||
const CostCoefficient CostEstimator::passIncrement = makeCostCoefficient(nsec(113.94));
|
||||
|
||||
const CostCoefficient CostEstimator::orIncrement = makeCostCoefficient(211.52ns);
|
||||
const CostCoefficient CostEstimator::orIncrement = makeCostCoefficient(nsec(211.52));
|
||||
|
||||
const CostCoefficient CostEstimator::andSortedInput = makeCostCoefficient(183.34ns);
|
||||
const CostCoefficient CostEstimator::andSortedOutput = makeCostCoefficient(362.22ns);
|
||||
const CostCoefficient CostEstimator::andSortedInput = makeCostCoefficient(nsec(183.34));
|
||||
const CostCoefficient CostEstimator::andSortedOutput = makeCostCoefficient(nsec(362.22));
|
||||
|
||||
// Virtual scan costs are not calibrated.
|
||||
const CostCoefficient CostEstimator::virtScanStartup = makeCostCoefficient(200.0ns);
|
||||
const CostCoefficient CostEstimator::virtScanIncrement = makeCostCoefficient(100.3ns);
|
||||
const CostCoefficient CostEstimator::virtScanStartup = makeCostCoefficient(nsec(200.0));
|
||||
const CostCoefficient CostEstimator::virtScanIncrement = makeCostCoefficient(nsec(100.3));
|
||||
|
||||
} // namespace mongo::cost_based_ranker
|
||||
|
||||
@ -44,7 +44,12 @@
|
||||
|
||||
namespace mongo::cost_based_ranker {
|
||||
|
||||
using std::literals::chrono_literals::operator""ns;
|
||||
/**
|
||||
* We're using the `nsec(123.45)` constructor to avoid `""ns`,
|
||||
* because floating point UDLs are not constexpr on PPC,
|
||||
* due to a gcc bug handling `long double`.
|
||||
*/
|
||||
using nsec = std::chrono::duration<double, std::nano>;
|
||||
|
||||
template <typename Rep, typename Period>
|
||||
constexpr double toDoubleMillis(std::chrono::duration<Rep, Period> d) {
|
||||
@ -141,10 +146,10 @@ struct CostCoefficientTagParam {
|
||||
// The smallest cost coefficient is equal to the cost of the fastest QE
|
||||
// operation. This is typically the cost of a simple binary comparison of a
|
||||
// scalar value.
|
||||
static constexpr double kMin = toDoubleMillis(11.67ns);
|
||||
static constexpr double kMin = toDoubleMillis(nsec(11.67));
|
||||
// The maximum value of a cost coefficient is the most expensive operation per
|
||||
// document according to the cost model.
|
||||
static constexpr double kMax = toDoubleMillis(1e6ns);
|
||||
static constexpr double kMax = toDoubleMillis(nsec(1e6));
|
||||
// TODO (SERVER-94981): Define this value based on cost model sensitivity.
|
||||
static constexpr double kEpsilon = 1.0e-5;
|
||||
};
|
||||
|
||||
@ -33,7 +33,7 @@ namespace mongo::join_ordering {
|
||||
|
||||
// These coefficients were calibrated in /buildscripts/cost_model/join_start.py,
|
||||
// which indicated that processing a single document takes 612 nanoseconds.
|
||||
const CostCoefficient docProcessCpuIncremental = makeCostCoefficient(612.0ns);
|
||||
const CostCoefficient docProcessCpuIncremental = makeCostCoefficient(nsec(612.0));
|
||||
const CostCoefficient ioSeqIncremental{
|
||||
CostCoefficientType{docProcessCpuIncremental.toDouble() * 261.1}};
|
||||
const CostCoefficient ioRandIncremental{
|
||||
|
||||
@ -53,8 +53,8 @@ CostEstimate estimateCBRCost(const CanonicalQuery& query,
|
||||
auto sampleSize = ce::SamplingEstimatorImpl::calculateSampleSize(
|
||||
qkc.getConfidenceInterval(), qkc.getSamplingMarginOfError());
|
||||
|
||||
const auto randomSampleInc = makeCostCoefficient(1400ns);
|
||||
const auto matchExprInc = makeCostCoefficient(160ns);
|
||||
const auto randomSampleInc = makeCostCoefficient(nsec(1400));
|
||||
const auto matchExprInc = makeCostCoefficient(nsec(160));
|
||||
const CardinalityEstimate sampleCE{CardinalityType{static_cast<double>(sampleSize)},
|
||||
EstimationSource::Code};
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user