risingwave icon indicating copy to clipboard operation
risingwave copied to clipboard

streaming: hash join executor causing slow compile

Open skyzh opened this issue 2 years ago • 12 comments

cargo bloat result:

 File  .text    Size                   Crate Name
 0.1%   0.2% 70.6KiB         risingwave_expr risingwave_expr::expr::expr_binary_nonnull::new_binary_expr
 0.1%   0.1% 55.1KiB     risingwave_frontend risingwave_frontend::handler::handle::{{closure}}
 0.0%   0.1% 47.1KiB              aws_sdk_s3 aws_sdk_s3::operation_deser::parse_head_object_response
 0.0%   0.1% 42.9KiB              aws_sdk_s3 aws_sdk_s3::operation_deser::parse_get_object
 0.0%   0.1% 30.8KiB        risingwave_batch <risingwave_batch::executor::row_seq_scan::RowSeqScanExecutorBuilder as risingwave_batch::ex...
 0.0%   0.1% 29.9KiB                   regex <regex::exec::ExecNoSync as regex::re_trait::RegularExpression>::captures_read_at
 0.0%   0.1% 29.4KiB                zstd_sys _ZSTD_compressBlock_doubleFast_dictMatchState
 0.0%   0.1% 29.1KiB         risingwave_meta risingwave_meta::stream::stream_manager::GlobalStreamManager<S>::create_materialized_view::{...
 0.0%   0.1% 29.1KiB         risingwave_meta risingwave_meta::stream::stream_manager::GlobalStreamManager<S>::create_materialized_view::{...
 0.0%   0.1% 28.8KiB               [Unknown] _LZ4HC_compress_generic_dictCtx
 0.0%   0.1% 26.6KiB        risingwave_batch <risingwave_batch::executor::row_seq_scan::RowSeqScanExecutorBuilder as risingwave_batch::ex...
 0.0%   0.1% 25.2KiB         risingwave_meta risingwave_meta::rpc::server::rpc_serve_with_store::{{closure}}
 0.0%   0.1% 25.2KiB         risingwave_meta risingwave_meta::rpc::server::rpc_serve_with_store::{{closure}}
 0.0%   0.1% 24.8KiB               [Unknown] _LZ4HC_compress_generic_noDictCtx
 0.0%   0.1% 23.8KiB          risingwave_ctl risingwave_ctl::cmd_impl::hummock::list_kv::list_kv::{{closure}}
 0.0%   0.1% 23.8KiB             rdkafka_sys _rd_kafka_parse_Metadata
 0.0%   0.1% 21.1KiB             etcd_client etcd_client::client::Client::connect::{{closure}}
 0.0%   0.1% 21.0KiB                zstd_sys _ZSTD_compressBlock_fast_dictMatchState
 0.0%   0.1% 20.9KiB      risingwave_storage risingwave_storage::monitor::state_store_metrics::StateStoreMetrics::new
 0.0%   0.1% 20.7KiB     risingwave_frontend risingwave_frontend::session::FrontendEnv::with_meta_client::{{closure}}
 0.0%   0.0% 20.5KiB              aws_config aws_config::loader::ConfigLoader::load::{{closure}}
 0.0%   0.0% 20.2KiB                zstd_sys _ZSTD_compressBlock_fast
 0.0%   0.0% 18.9KiB      risingwave_cmd_all risingwave_cmd_all::playground::playground::{{closure}}
 0.0%   0.0% 18.8KiB                curl_sys _Curl_vsetopt
 0.0%   0.0% 18.4KiB       risingwave_source risingwave_source::parser::avro_parser::read_schema_from_s3::{{closure}}
 0.0%   0.0% 18.2KiB               [Unknown] __mh_execute_header
 0.0%   0.0% 18.0KiB              aws_config aws_config::loader::ConfigLoader::load::{{closure}}
 0.0%   0.0% 18.0KiB    risingwave_connector risingwave_connector::pulsar::source::reader::PulsarSingleSplitReader::new::{{closure}}
 0.0%   0.0% 17.9KiB         risingwave_meta risingwave_meta::hummock::hummock_manager::HummockManager<S>::new_with_config::{{closure}}
 0.0%   0.0% 17.9KiB         risingwave_meta risingwave_meta::hummock::hummock_manager::HummockManager<S>::new_with_config::{{closure}}
 0.0%   0.0% 17.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.6KiB              aws_config aws_config::loader::ConfigLoader::load::{{closure}}
 0.0%   0.0% 17.4KiB                zstd_sys _ZSTD_decompressBlock_internal
 0.0%   0.0% 17.4KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.4KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.4KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.4KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.4KiB               [Unknown] _rd_kafka_fetch_reply_handle
 0.0%   0.0% 17.3KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.3KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 17.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.6KiB     risingwave_frontend risingwave_frontend::binder::expr::<impl risingwave_frontend::binder::Binder>::bind_expr
 0.0%   0.0% 16.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.4KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.4KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.4KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.3KiB     risingwave_frontend prost::encoding::hash_map::encode_with_default
 0.0%   0.0% 16.3KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.3KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.3KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.3KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.2KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.1KiB     risingwave_frontend risingwave_frontend::binder::relation::<impl risingwave_frontend::binder::Binder>::bind_tabl...
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB         risingwave_expr risingwave_expr::expr::expr_unary::new_unary_expr
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 16.0KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB                zstd_sys _ZSTD_compressBlock_doubleFast
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB                 pulsar? <pulsar::message::proto::BaseCommand as prost::message::Message>::encoded_len
 0.0%   0.0% 15.9KiB                 pulsar? <pulsar::message::proto::BaseCommand as prost::message::Message>::encoded_len
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.9KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB                   regex regex::exec::ExecBuilder::build
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.8KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB                  pulsar prost::message::Message::decode
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.7KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB         risingwave_meta <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.6KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}
 0.0%   0.0% 15.5KiB       risingwave_stream risingwave_stream::executor::hash_join::HashJoinExecutor<K,S,_>::into_stream::{{closure}}

HashJoinExecutor could produce ~30 variants, each 15KiB, which (might) cause codegen to be very slow. Currently, compiling risingwave_stream crate would take as much as 5min on EC2, and ~4min on M1 MacBook Pro in release mode.

Another experiment: remove the body of into_stream and flush_data of HashJoinExecutor. After this change, recompile only takes 2m10s (previously 3m30s, 1.5x faster!). risingwave_stream crate immediately finishes compile, and most time is spent on recompile risingwave_cmd_all.

We should consider move HashJoin into a separate crate, or reduce generics in HashJoin, so that it can compile faster.

skyzh avatar Jun 04 '22 08:06 skyzh

One feasible solution is to shrink the scope of generics. e.g. only have JoinSide on critical sections, instead of over full join executor. In this way, we can generate as few code as possible for those async functions.

skyzh avatar Jun 04 '22 08:06 skyzh

Indeed hash join might be using const generic to generate duplicate code for non-critical sections. I'll take a look to see if this can be improved.

yuhao-su avatar Jun 04 '22 08:06 yuhao-su

After dropping support for TiKV and RocksDB state backend, 3m30s -> 2m37s 🤪

skyzh avatar Jun 04 '22 12:06 skyzh

After changing all start functions' signature to:

pub fn start(opts: ComputeNodeOpts) -> Pin<Box<dyn Future<Output = ()> + Send>> {

(previously, we use pub async fn start so that the async will be expanded in risingwave_cmd_all crate instead of compiling in-place)

2m37s -> 1m 59s!

skyzh avatar Jun 04 '22 12:06 skyzh

After also dropping memory state backend support (only in release mode), 1m 30s :)

The time is measured by: changing the LOCAL_CHANNEL_OUTPUT size and recompile using

cargo build -p risingwave_cmd_all --release

skyzh avatar Jun 04 '22 12:06 skyzh

Okay, so the remaining is for @yuhao-su to optimize hash join 🤣

skyzh avatar Jun 04 '22 12:06 skyzh

I'm curious if a struct has a generic K, will those functions of the struct that does not use K be expanded and compiled multiple time?

yuhao-su avatar Jun 04 '22 16:06 yuhao-su

After a closer look, I think it is hard to make improvements by adjusting generic use. generic K (join key type) is already used across the hash join executor. We should know the hash map type when creating the executor. The only two functions s do not involve K are row_concat and bool_from_array_ref.

The bottlenecks that have to do with most expanding are eq_join_oneside and HashJoinChunkBuilder.

eq_join_oneside requires K (key types) T(join type) and SIDE(join side). That means it needs a lot of expanding. But indeed there is a potential optimization. K is only needed for getting matched rows, and we can separate this function from the build join output function. But this separation will natively be done at concurrent fetching refactor.

HashJoinChunkBuilder requires T(join type) and SIDE(join side). Those expanding can't be improved.

After all, hash join does require a lot of expanding (mainly caused by the number of join types and the optimization of join key type). So if we really want to shorten the compile time, we'd better just put it in another crate.

yuhao-su avatar Jun 04 '22 17:06 yuhao-su

Is it possible to have some inner parts of code to return Box<dyn Stream>, Box<dyn Future> instead opaque type and async fn? So that this "boxed" part can be re-used by compilers.

skyzh avatar Jun 05 '22 04:06 skyzh

I guess the main overhead of compile is expanding the async function body (which requires constructing a state machine). If we can make non critical sections to have Box<dyn Future>, then this part won't be included in the state machine, and thus improving compile speed.

skyzh avatar Jun 05 '22 04:06 skyzh

Hmmm, it might be possible. We can make the fetching from remote part return Box<dyn Future>.

But this will make our code looks less readable and harder to refactor those code in the future, also the impact to performance is unknow. So I'm not sure if it is worth to do this. Maybe we can consider splitting some parts into different crates to improve recompiling?

yuhao-su avatar Jun 05 '22 06:06 yuhao-su

I think we need further investigation on the trade-off between the runtime performance and compile speed after we're in production🤣. For now, I think it's okay to apply some type-erasure mechanisms for this.

BugenZhao avatar Jun 08 '22 04:06 BugenZhao