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: f64Alternative 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: f64Alternative 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: f64Cost of CPU processing per row
CPU cost to process each row of data. Default value 0.01
cpu_index_tuple_cost: f64Cost 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: f64The cost of operator calculations
The CPU cost of executing each operator or function. Default value 0.0025
hash_build_overhead: f64Hash construction overhead coefficient
Extra overhead factor for building the hash table. Default value 0.1
sort_comparison_cost: f64Sorting and comparing cost coefficients
The cost factor for each comparison operation. Default value 1.0
memory_sort_threshold: u64Memory sorting threshold (number of rows)
If this threshold is exceeded, external sorting will be used. The default value is 10000.
external_sort_page_cost: f64Cost of external sorting pages
The cost of reading and writing temporary files while externally sorting. Default value 2.0
edge_traversal_cost: f64Edge traversal cost
The cost of traversing an edge, which is more complex than vertex processing. Default value 0.02
multi_hop_penalty: f64Multi-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: f64Cost of neighbor node lookup
The cost of finding a neighbor node. Default value 0.015
effective_cache_pages: u64Effective cache size (number of pages)
Used for cost calculation in cache-aware scenarios. Default value: 10000
cache_hit_cost_factor: f64Cache Hit Cost Coefficient
The cost factor for when the data is in the cache. Default value 0.1
shortest_path_base_cost: f64Fundamentals of the cost in shortest path algorithms
Fixed overhead for the shortest path algorithm. Default value 10.0
path_enumeration_factor: f64Path enumeration exponent coefficient
The complexity factor when enumerating all paths. Default value 2.0
super_node_threshold: u64Super Node Threshold (Degree)
Nodes that exceed this degree are considered super nodes. The default value is 10000.
super_node_penalty: f64Super Node Additional Cost Coefficient
Additional cost when super nodes are involved. Default value 2.0
default_unwind_list_size: f64The 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: u32The 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: usizeSelect 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: f64Cost per byte of memory usage
Cost per byte of memory usage (used to estimate memory pressure). Default value 0.0001
memory_pressure_threshold: usizeMemory pressure threshold (bytes)
Memory pressure threshold (exceeding this value increases the cost penalty). Default value 100MB
memory_pressure_penalty: f64Memory pressure penalty factor
Memory pressure penalty factor. Default value 2.0
simple_expression_cost: f64Simple expression (leaf node) cost
Simple expression (leaf node) cost. Default value 0.001
function_call_base_cost: f64Function call base cost
The function call base cost. Default value 0.01
expression_nesting_cost: f64Expression nesting cost per level
Nesting cost per level for complex expressions. Default value 0.005
fixed_type_cost_factor: f64Fixed-size type cost factor
Fixed size type processing cost factor. Default value 1.0
variable_type_cost_factor: f64Variable-length type cost factor
Variable length type processing cost factor. Default value 1.5
complex_type_cost_factor: f64Complex type cost factor
Complex type processing cost factor. Default value 2.0
graph_type_cost_factor: f64Graph type cost factor
Chart type processing cost factor. Default value 3.0
row_width_bytes: usizeAverage 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: StrategyThresholdsStrategy threshold configuration
Policy threshold configuration for controlling the behavior of various optimization policies
Implementations§
Source§impl CostModelConfig
impl CostModelConfig
Sourcepub fn for_ssd() -> Self
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.
Sourcepub fn for_in_memory() -> Self
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.
Sourcepub fn for_hdd() -> Self
pub fn for_hdd() -> Self
Optimizations for mechanical hard drives (conservative configuration)
Traditional mechanical hard drives have poor random access performance.
Sourcepub fn with_seq_page_cost(self, cost: f64) -> Self
pub fn with_seq_page_cost(self, cost: f64) -> Self
Set the order for reading pages as an alternative option.
Sourcepub fn with_random_page_cost(self, cost: f64) -> Self
pub fn with_random_page_cost(self, cost: f64) -> Self
Set a substitute price for random page reading.
Sourcepub fn with_cpu_tuple_cost(self, cost: f64) -> Self
pub fn with_cpu_tuple_cost(self, cost: f64) -> Self
Setting the CPU cost for line processing
Sourcepub fn with_cpu_index_tuple_cost(self, cost: f64) -> Self
pub fn with_cpu_index_tuple_cost(self, cost: f64) -> Self
Setting the cost of processing index rows
Sourcepub fn with_cpu_operator_cost(self, cost: f64) -> Self
pub fn with_cpu_operator_cost(self, cost: f64) -> Self
Setting the cost of operator calculations
Trait Implementations§
Source§impl Clone for CostModelConfig
impl Clone for CostModelConfig
impl Copy for CostModelConfig
Source§impl Debug for CostModelConfig
impl Debug for CostModelConfig
Source§impl Default for CostModelConfig
impl Default for CostModelConfig
Source§impl PartialEq for CostModelConfig
impl PartialEq for CostModelConfig
impl StructuralPartialEq for CostModelConfig
Auto Trait Implementations§
impl Freeze for CostModelConfig
impl RefUnwindSafe for CostModelConfig
impl Send for CostModelConfig
impl Sync for CostModelConfig
impl Unpin for CostModelConfig
impl UnsafeUnpin for CostModelConfig
impl UnwindSafe for CostModelConfig
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
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
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
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
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.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
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.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
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.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
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.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
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.