Struct mz_adapter::explain::optimizer_trace::OptimizerTrace
source · pub struct OptimizerTrace(Dispatch);
Expand description
Provides functionality for tracing plans generated by the execution of an optimization pipeline.
Internally, this will create a layered tracing::subscriber::Subscriber
consisting of one layer for each supported plan type T
and wrap it into a
dispatcher::Dispatch
instance.
Use OptimizerTrace::as_guard
to activate the dispatcher::Dispatch
and collect a trace.
Use OptimizerTrace::into_rows
or OptimizerTrace::into_plan_insights
to cleanly destroy the OptimizerTrace
instance and obtain the tracing
result.
Tuple Fields§
§0: Dispatch
Implementations§
source§impl OptimizerTrace
impl OptimizerTrace
sourcepub fn new(filter: Option<SmallVec<[NamedPlan; 4]>>) -> OptimizerTrace
pub fn new(filter: Option<SmallVec<[NamedPlan; 4]>>) -> OptimizerTrace
Create a new OptimizerTrace
.
The instance will only accumulate TraceEntry
instances along
the prefix of the given path
if path
is present, or it will
accumulate all TraceEntry
instances otherwise.
sourcepub fn as_guard<'s>(&'s self) -> DispatchGuard<'s>
pub fn as_guard<'s>(&'s self) -> DispatchGuard<'s>
Enter this OptimizerTrace
’s tracing dispatcher::Dispatch
, returning a guard.
Linked to this OptimizerTrace
with a lifetime to ensure
OptimizerTrace::into_rows
isn’t called until the guard is dropped.
sourcepub async fn into_rows(
self,
format: ExplainFormat,
config: &ExplainConfig,
features: &OptimizerFeatures,
humanizer: &dyn ExprHumanizer,
row_set_finishing: Option<RowSetFinishing>,
target_cluster: Option<&Cluster>,
dataflow_metainfo: DataflowMetainfo,
stage: ExplainStage,
stmt_kind: ExplaineeStatementKind,
insights_ctx: Option<Box<PlanInsightsContext>>,
) -> Result<Vec<Row>, AdapterError>
pub async fn into_rows( self, format: ExplainFormat, config: &ExplainConfig, features: &OptimizerFeatures, humanizer: &dyn ExprHumanizer, row_set_finishing: Option<RowSetFinishing>, target_cluster: Option<&Cluster>, dataflow_metainfo: DataflowMetainfo, stage: ExplainStage, stmt_kind: ExplaineeStatementKind, insights_ctx: Option<Box<PlanInsightsContext>>, ) -> Result<Vec<Row>, AdapterError>
Convert the optimizer trace into a vector or rows that can be returned to the client.
sourcepub async fn into_plan_insights(
self,
features: &OptimizerFeatures,
humanizer: &dyn ExprHumanizer,
row_set_finishing: Option<RowSetFinishing>,
target_cluster: Option<&Cluster>,
dataflow_metainfo: DataflowMetainfo,
insights_ctx: Option<Box<PlanInsightsContext>>,
) -> Result<String, AdapterError>
pub async fn into_plan_insights( self, features: &OptimizerFeatures, humanizer: &dyn ExprHumanizer, row_set_finishing: Option<RowSetFinishing>, target_cluster: Option<&Cluster>, dataflow_metainfo: DataflowMetainfo, insights_ctx: Option<Box<PlanInsightsContext>>, ) -> Result<String, AdapterError>
Collect a insights::PlanInsights
with insights about the the
optimized plans rendered as a JSON String
.
sourcefn collect_all(
&self,
format: ExplainFormat,
config: &ExplainConfig,
features: &OptimizerFeatures,
humanizer: &dyn ExprHumanizer,
row_set_finishing: Option<RowSetFinishing>,
target_cluster: Option<&str>,
dataflow_metainfo: DataflowMetainfo,
) -> Result<TraceEntries<String>, ExplainError>
fn collect_all( &self, format: ExplainFormat, config: &ExplainConfig, features: &OptimizerFeatures, humanizer: &dyn ExprHumanizer, row_set_finishing: Option<RowSetFinishing>, target_cluster: Option<&str>, dataflow_metainfo: DataflowMetainfo, ) -> Result<TraceEntries<String>, ExplainError>
Collect all traced plans for all plan types T
that are available in
the wrapped dispatcher::Dispatch
.
sourcefn collect_global_plan(
&self,
) -> Option<DataflowDescription<OptimizedMirRelationExpr>>
fn collect_global_plan( &self, ) -> Option<DataflowDescription<OptimizedMirRelationExpr>>
Collects the global optimized plan from the trace, if it exists.
sourcefn collect_fast_path_plan(&self) -> Option<FastPathPlan>
fn collect_fast_path_plan(&self) -> Option<FastPathPlan>
Collects the fast path plan from the trace, if it exists.
sourcefn collect_explainable_entries<T>(
&self,
format: &ExplainFormat,
context: &mut ExplainContext<'_>,
) -> Result<Vec<TraceEntry<String>>, ExplainError>where
T: Clone + Debug + 'static,
for<'a> Explainable<'a, T>: Explain<'a, Context = ExplainContext<'a>>,
fn collect_explainable_entries<T>(
&self,
format: &ExplainFormat,
context: &mut ExplainContext<'_>,
) -> Result<Vec<TraceEntry<String>>, ExplainError>where
T: Clone + Debug + 'static,
for<'a> Explainable<'a, T>: Explain<'a, Context = ExplainContext<'a>>,
Collect all trace entries of a plan type T
that implements
Explainable
.
sourcefn collect_scalar_entries<T>(&self) -> Vec<TraceEntry<String>>
fn collect_scalar_entries<T>(&self) -> Vec<TraceEntry<String>>
Collect all trace entries of a plan type T
.
sourcefn collect_string_entries(&self) -> Vec<TraceEntry<String>>
fn collect_string_entries(&self) -> Vec<TraceEntry<String>>
Collect all trace entries with plans of type String
.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for OptimizerTrace
impl !RefUnwindSafe for OptimizerTrace
impl Send for OptimizerTrace
impl Sync for OptimizerTrace
impl Unpin for OptimizerTrace
impl !UnwindSafe for OptimizerTrace
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
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> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
source§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
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign
, for types that do not implement AddAssign
.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.