Skip to main content

CostModelConfig

Struct CostModelConfig 

Source
pub struct CostModelConfig {
Show 33 fields pub seq_page_cost: f64, pub random_page_cost: f64, pub cpu_tuple_cost: f64, pub cpu_index_tuple_cost: f64, pub cpu_operator_cost: f64, pub hash_build_overhead: f64, pub sort_comparison_cost: f64, pub memory_sort_threshold: u64, pub external_sort_page_cost: f64, pub edge_traversal_cost: f64, pub multi_hop_penalty: f64, pub neighbor_lookup_cost: f64, pub effective_cache_pages: u64, pub cache_hit_cost_factor: f64, pub shortest_path_base_cost: f64, pub path_enumeration_factor: f64, pub super_node_threshold: u64, pub super_node_penalty: f64, pub default_unwind_list_size: f64, pub default_loop_iterations: u32, pub default_select_branches: usize, pub memory_byte_cost: f64, pub memory_pressure_threshold: usize, pub memory_pressure_penalty: f64, pub simple_expression_cost: f64, pub function_call_base_cost: f64, pub expression_nesting_cost: f64, pub fixed_type_cost_factor: f64, pub variable_type_cost_factor: f64, pub complex_type_cost_factor: f64, pub graph_type_cost_factor: f64, pub row_width_bytes: usize, pub strategy_thresholds: StrategyThresholds,
}
Expand description

Cost Model Configuration

Define the cost parameters for various operations, which are used to calculate the execution cost of the query plan. Refer to the design of the PostgreSQL cost model and extend it to take into account the characteristics of graph databases. These parameters can be adjusted according to the hardware environment.

Unit notes: effective_cache_pages counts pages (ROWS_PER_PAGE rows per page); memory_sort_threshold counts rows. The two must not be compared directly without converting via ROWS_PER_PAGE.

Fields§

§seq_page_cost: f64

Alternative to reading pages in order

The cost of sequentially reading a disk page. Default value 1.0 In an SSD environment, the requirements can be appropriately reduced.

§random_page_cost: f64

Alternative to reading a random page:

The cost of reading a random disk page. Default value 4.0 On traditional mechanical hard drives, random access is much slower than sequential access. In an SSD environment, the value of seq_page_cost can be approached.

§cpu_tuple_cost: f64

Cost of CPU processing per row

CPU cost to process each row of data. Default value 0.01

§cpu_index_tuple_cost: f64

Cost of processing index rows

CPU cost to process each index entry. Default value 0.005 It is usually lower than cpu_tuple_cost because the index entries are smaller.

§cpu_operator_cost: f64

The cost of operator calculations

The CPU cost of executing each operator or function. Default value 0.0025

§hash_build_overhead: f64

Hash construction overhead coefficient

Extra overhead factor for building the hash table. Default value 0.1

§sort_comparison_cost: f64

Sorting and comparing cost coefficients

The cost factor for each comparison operation. Default value 1.0

§memory_sort_threshold: u64

Memory sorting threshold (number of rows)

If this threshold is exceeded, external sorting will be used. The default value is 10000.

§external_sort_page_cost: f64

Cost of external sorting pages

The cost of reading and writing temporary files while externally sorting. Default value 2.0

§edge_traversal_cost: f64

Edge traversal cost

The cost of traversing an edge, which is more complex than vertex processing. Default value 0.02

§multi_hop_penalty: f64

Multi-hop traversal with an incrementing coefficient at each step

The factor by which the cost is incremented for each additional hop. Default value 1.2

§neighbor_lookup_cost: f64

Cost of neighbor node lookup

The cost of finding a neighbor node. Default value 0.015

§effective_cache_pages: u64

Effective cache size (number of pages)

Used for cost calculation in cache-aware scenarios. Default value: 10000

§cache_hit_cost_factor: f64

Cache Hit Cost Coefficient

The cost factor for when the data is in the cache. Default value 0.1

§shortest_path_base_cost: f64

Fundamentals of the cost in shortest path algorithms

Fixed overhead for the shortest path algorithm. Default value 10.0

§path_enumeration_factor: f64

Path enumeration exponent coefficient

The complexity factor when enumerating all paths. Default value 2.0

§super_node_threshold: u64

Super Node Threshold (Degree)

Nodes that exceed this degree are considered super nodes. The default value is 10000.

§super_node_penalty: f64

Super Node Additional Cost Coefficient

Additional cost when super nodes are involved. Default value 2.0

§default_unwind_list_size: f64

The default list size for “Unwind”.

Default value used when the list size cannot be inferred from an expression. Default value 3.0

§default_loop_iterations: u32

The default number of iterations for the Loop function

The default value used when the number of iterations cannot be determined from the conditions. The default value is 3.

§default_select_branches: usize

Select the default number of branches.

The default value used when the number of branches cannot be determined. The default value is 2.

§memory_byte_cost: f64

Cost per byte of memory usage

Cost per byte of memory usage (used to estimate memory pressure). Default value 0.0001

§memory_pressure_threshold: usize

Memory pressure threshold (bytes)

Memory pressure threshold (exceeding this value increases the cost penalty). Default value 100MB

§memory_pressure_penalty: f64

Memory pressure penalty factor

Memory pressure penalty factor. Default value 2.0

§simple_expression_cost: f64

Simple expression (leaf node) cost

Simple expression (leaf node) cost. Default value 0.001

§function_call_base_cost: f64

Function call base cost

The function call base cost. Default value 0.01

§expression_nesting_cost: f64

Expression nesting cost per level

Nesting cost per level for complex expressions. Default value 0.005

§fixed_type_cost_factor: f64

Fixed-size type cost factor

Fixed size type processing cost factor. Default value 1.0

§variable_type_cost_factor: f64

Variable-length type cost factor

Variable length type processing cost factor. Default value 1.5

§complex_type_cost_factor: f64

Complex type cost factor

Complex type processing cost factor. Default value 2.0

§graph_type_cost_factor: f64

Graph type cost factor

Chart type processing cost factor. Default value 3.0

§row_width_bytes: usize

Average row width in bytes for memory estimates.

Stack size of one Value (ESTIMATED_ROW_WIDTH_BYTES); heap payloads of variable-length values are not included, so wide rows are systematically underestimated. All memory estimates (sort, hash join, aggregation, budget allocation) share this single source instead of private copies; per-space overrides flow through the existing cost-config mechanism.

§strategy_thresholds: StrategyThresholds

Strategy threshold configuration

Policy threshold configuration for controlling the behavior of various optimization policies

Implementations§

Source§

impl CostModelConfig

Source

pub fn new() -> Self

Create the default configuration.

Source

pub fn for_ssd() -> Self

Optimizations for SSD storage

The random access performance of SSDs is close to that of sequential access; therefore, reducing the value of random_page_cost has a positive impact on overall system performance.

Source

pub fn for_in_memory() -> Self

Optimizations for in-memory databases

There are no disk I/O overheads in memory; the main consideration is the cost associated with the CPU.

Source

pub fn for_hdd() -> Self

Optimizations for mechanical hard drives (conservative configuration)

Traditional mechanical hard drives have poor random access performance.

Source

pub fn with_seq_page_cost(self, cost: f64) -> Self

Set the order for reading pages as an alternative option.

Source

pub fn with_random_page_cost(self, cost: f64) -> Self

Set a substitute price for random page reading.

Source

pub fn with_cpu_tuple_cost(self, cost: f64) -> Self

Setting the CPU cost for line processing

Source

pub fn with_cpu_index_tuple_cost(self, cost: f64) -> Self

Setting the cost of processing index rows

Source

pub fn with_cpu_operator_cost(self, cost: f64) -> Self

Setting the cost of operator calculations

Trait Implementations§

Source§

impl Clone for CostModelConfig

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for CostModelConfig

Source§

impl Debug for CostModelConfig

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CostModelConfig

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl PartialEq for CostModelConfig

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for CostModelConfig

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more