@@ -31,6 +31,7 @@ use databend_common_pipeline::core::ProcessorPtr;
3131use futures_util:: FutureExt ;
3232use futures_util:: future:: BoxFuture ;
3333use futures_util:: future:: Either ;
34+ use log:: error;
3435use log:: warn;
3536use petgraph:: prelude:: NodeIndex ;
3637use tokio:: time:: sleep;
@@ -41,6 +42,8 @@ use crate::pipelines::executor::QueryExecutorTasksQueue;
4142use crate :: pipelines:: executor:: RunningGraph ;
4243use crate :: pipelines:: executor:: WorkersCondvar ;
4344
45+ const TARGET_DUMP_GRAPH : & str = "databend::log::dump_graph" ;
46+
4447pub enum ExecutorTasksQueue {
4548 QueryExecutorTasksQueue ( Arc < QueryExecutorTasksQueue > ) ,
4649 QueriesExecutorTasksQueue ( Arc < QueriesExecutorTasksQueue > ) ,
@@ -124,9 +127,11 @@ impl ProcessorAsyncTask {
124127 let processor_id = unsafe { processor. id ( ) } ;
125128 let processor_name = unsafe { processor. name ( ) } ;
126129 let queue_clone = queue. clone ( ) ;
130+ let graph_clone = graph. clone ( ) ;
127131 let inner = async move {
128132 let start = Instant :: now ( ) ;
129133 let mut inner = inner. boxed ( ) ;
134+ let mut log_graph = false ;
130135
131136 loop {
132137 let interval = Box :: pin ( sleep ( Duration :: from_secs ( 5 ) ) ) ;
@@ -139,6 +144,20 @@ impl ProcessorAsyncTask {
139144 "Slow async task detected - query: {:?}, processor: {:?} ({}), elapsed: {:?}, active workers: {:?}" ,
140145 query_id, processor_id, processor_name, elapsed, active_workers
141146 ) ;
147+ if elapsed >= Duration :: from_secs ( 200 ) && active_workers == 0 && !log_graph
148+ {
149+ log_graph = true ;
150+ error ! (
151+ target: TARGET_DUMP_GRAPH ,
152+ "Slow async task running graph dump - query: {:?}, processor: {:?} ({}), elapsed: {:?}, active workers: {:?}, {}" ,
153+ query_id,
154+ processor_id,
155+ processor_name,
156+ elapsed,
157+ active_workers,
158+ graph_clone. format_graph_nodes( false )
159+ ) ;
160+ }
142161 }
143162 Either :: Right ( ( res, _) ) => {
144163 return res;
0 commit comments