查询导致 Doris BE 宕机

Viewed 22

Doris 版本 :2.1.9
Doris 集信息: 1FE, 3BE。 都是 16c 64G。基于开源社区的Doris自建集群。
表现: 执行一个查询语句时,Doris 固定一个be节点宕机。另外两个不受影响。

be.out的日志

*** Query id: 6b8c599fb5d5474c-af48dba29ec3a488 ***
*** is nereids: 1 ***
*** tablet id: 0 ***
*** Aborted at 1753319539 (unix time) try "date -d @1753319539" if you are using GNU date ***
*** Current BE git commitID: 3390475e02 ***
*** SIGSEGV address not mapped to object (@0x7fb23300d000) received by PID 983513 (TID 985576 OR 0x7fb30dbb7640) from PID 855691264; stack trace: ***
 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /home/zcp/repo_center/doris_release/doris/be/src/common/signal_handler.h:421
 1# os::Linux::chained_handler(int, siginfo*, void*) in /msun/app/jdk/jre/lib/amd64/server/libjvm.so
 2# JVM_handle_linux_signal in /msun/app/jdk/jre/lib/amd64/server/libjvm.so
 3# signalHandler(int, siginfo*, void*) in /msun/app/jdk/jre/lib/amd64/server/libjvm.so
 4# 0x00007FB92B8ABE00 in /usr/lib64/libc.so.6
 5# memcpy at /home/zcp/repo_center/doris_release/doris/be/src/glibc-compatibility/memcpy/memcpy_x86_64.cpp:219
 6# auto doris::vectorized::ColumnStr<unsigned int>::insert_indices_from(doris::vectorized::IColumn const&, unsigned int const*, unsigned int const*)::{lambda(auto:1 const&)#1}::operator()<doris::vectorized::ColumnS
tr<unsigned int> >(doris::vectorized::ColumnStr<unsigned int> const&) const at /home/zcp/repo_center/doris_release/doris/be/src/vec/columns/column_string.cpp:231
 7# doris::vectorized::ColumnStr<unsigned int>::insert_indices_from(doris::vectorized::IColumn const&, unsigned int const*, unsigned int const*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/columns/column
_string.cpp:242
 8# doris::vectorized::ColumnNullable::insert_indices_from(doris::vectorized::IColumn const&, unsigned int const*, unsigned int const*) at /home/zcp/repo_center/doris_release/doris/be/src/vec/columns/column_nullable
.cpp:309
 9# doris::vectorized::ProcessHashTableProbe<8, doris::pipeline::HashJoinProbeLocalState>::build_side_output_column(std::vector<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>, std::allocato
r<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn> > >&, std::vector<bool, std::allocator<bool> > const&, int, bool, bool) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/join/pr
ocess_hash_table_probe_impl.h:122
10# doris::Status doris::vectorized::ProcessHashTableProbe<8, doris::pipeline::HashJoinProbeLocalState>::do_process<true, true, doris::vectorized::MethodSerialized<doris::JoinHashTable<doris::StringRef, DefaultHash<
doris::StringRef, void> > >, true, false>(doris::vectorized::MethodSerialized<doris::JoinHashTable<doris::StringRef, DefaultHash<doris::StringRef, void> > >&, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const*, doris::vectorized::MutableBlock&, doris::vectorized::Block*, unsigned long) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/join/process_hash_table_probe_impl.h:286
11# auto doris::vectorized::ProcessHashTableProbe<8, doris::pipeline::HashJoinProbeLocalState>::process<true, true, doris::vectorized::MethodSerialized<doris::JoinHashTable<doris::StringRef, DefaultHash<doris::StringRef, void> > > >(doris::vectorized::MethodSerialized<doris::JoinHashTable<doris::StringRef, DefaultHash<doris::StringRef, void> > >&, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const*, doris::vectorized::MutableBlock&, doris::vectorized::Block*, unsigned long, bool, bool)::{lambda(auto:1, auto:2)#1}::operator()<std::integral_constant<bool, false>, std::integral_constant<bool, true> >(std::integral_constant<bool, false>, std::integral_constant<bool, true>) const at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/join/process_hash_table_probe_impl.h:670
12# doris::Status doris::vectorized::ProcessHashTableProbe<8, doris::pipeline::HashJoinProbeLocalState>::process<true, true, doris::vectorized::MethodSerialized<doris::JoinHashTable<doris::StringRef, DefaultHash<doris::StringRef, void> > > >(doris::vectorized::MethodSerialized<doris::JoinHashTable<doris::StringRef, DefaultHash<doris::StringRef, void> > >&, doris::vectorized::PODArray<unsigned char, 4096ul, Allocator<false, false, false, DefaultMemoryAllocator>, 16ul, 16ul> const*, doris::vectorized::MutableBlock&, doris::vectorized::Block*, unsigned long, bool, bool) at /home/zcp/repo_center/doris_release/doris/be/src/vec/exec/join/process_hash_table_probe_impl.h:676
13# _ZNSt8__detail9__variant17__gen_vtable_implINS0_12_Multi_arrayIPFNS0_21__deduce_visit_resultIvEEOZNK5doris8pipeline22HashJoinProbeOperatorX4pullEPNS5_12RuntimeStateEPNS5_10vectorized5BlockEPbE3$_0RSt7variantIJSt9monostateNSA_16MethodSerializedINS5_13JoinHashTableINS5_9StringRefE11DefaultHashISK_vEEEEENSA_15MethodOneNumberIhNSJ_Ih9HashCRC32IhEEEEENSP_ItNSJ_ItSQ_ItEEEEENSP_IjNSJ_IjSQ_IjEEEEENSP_ImNSJ_ImSQ_ImEEEEENSP_INSA_7UInt128ENSJ_IS13_SQ_IS13_EEEEENSP_INSA_7UInt256ENSJ_IS17_SQ_IS17_EEEEENSA_15MethodKeysFixedIS11_Lb1EEENS1B_IS11_Lb0EEENS1B_IS15_Lb1EEENS1B_IS15_Lb0EEENS1B_IS19_Lb1EEENS1B_IS19_Lb0EEENS1B_INSJ_INSA_7UInt136ESQ_IS1I_EEE
Lb1EEENS1B_IS1K_Lb0EEEEERSG_IJSH_NSA_21ProcessHashTableProbeILi0ENS6_23HashJoinProbeLocalStateEEENS1P_ILi2ES1Q_EENS1P_ILi8ES1Q_EENS1P_ILi1ES1Q_EENS1P_ILi4ES1Q_EENS1P_ILi3ES1Q_EENS1P_ILi5ES1Q_EENS1P_ILi7ES1Q_EENS1P_I
Li9ES1Q_EENS1P_ILi10ES1Q_EENS1P_ILi11ES1Q_EEEEOSG_IJSt17integral_constantIbLb0EES24_IbLb1EEEES28_EJEEESt16integer_sequenceImJLm1ELm3ELm1ELm1EEEE14__visit_invokeESF_S1O_S23_S28_S28_ at /var/local/ldb-toolchain/bin/..
/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/variant:1013
14# doris::pipeline::HashJoinProbeOperatorX::pull(doris::RuntimeState*, doris::vectorized::Block*, bool*) const at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/exec/hashjoin_probe_operator.cpp:312
15# doris::pipeline::StatefulOperatorX<doris::pipeline::HashJoinProbeLocalState>::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeli
ne_x/operator.cpp:571
16# doris::pipeline::OperatorXBase::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:288
17# doris::pipeline::StatefulOperatorX<doris::pipeline::StreamingAggLocalState>::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) in /msun/app/doris/be/lib/doris_be
18# doris::pipeline::OperatorXBase::get_block_after_projects(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/operator.cpp:293
19# doris::pipeline::PipelineXTask::execute(bool*) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/pipeline_x/pipeline_x_task.cpp:353
20# doris::pipeline::TaskScheduler::_do_work(unsigned long) at /home/zcp/repo_center/doris_release/doris/be/src/pipeline/task_scheduler.cpp:347
21# doris::ThreadPool::dispatch_thread() in /msun/app/doris/be/lib/doris_be
22# doris::Thread::supervise_thread(void*) at /home/zcp/repo_center/doris_release/doris/be/src/util/thread.cpp:499
23# 0x00007FB92B8F631A in /usr/lib64/libc.so.6
24# 0x00007FB92B978F10 in /usr/lib64/libc.so.6

简化后sql

			select
				coalesce(main.hos_id, '-1') as `hos_id`,
				coalesce(main.hos_id, '-1') as `医院id`,
				max(main.医院名称) as `医院名称`,
				max(main.医院别名) as `医院别名`,
				coalesce(sum(coalesce(main.总金额, 0)-coalesce(main.优惠金额, 0)+ coalesce(main.加收金额, 0)), 0) as `inhos_medi_sv_icom_C1`,
				1001001
			from
				(
				select
					a.hos_id as hos_id,
					a.org_id as org_id,
					a.setlmt_time as 结算时间,
					h.hos_name as 医院名称,
					h.hos_alias as 医院别名,
					a.total_amount as 总金额,
					a.pretal_amount as 优惠金额,
					a.add_rec_amount as 加收金额,
					a.invoice_item_id as 发票项目ID
									from
										dw_dwb_rs_mi_inhos_setlmt_d a
									left join dw_dwb_sv_is_inhos_pat c on
										a.inhos_regst_id = c.inhos_regst_id
										and a.org_id = c.org_id
										and a.hos_id = c.hos_id
									left join dw_dwb_rs_dm_drug_dic d on
										a.drug_id = d.drug_id
										and a.org_id = d.org_id
									left join dwd_dwd_dept dd on
										a.bill_dept_id = dd.dept_id
										and a.org_id = dd.org_id
										and a.hos_id = dd.hos_id
									left join dwd_dwd_hospital h on
										a.hos_id = h.hos_id
										and a.org_id = h.org_id
									left join dwd_dwd_dict_material_main mm on
										coalesce(a.charge_item_id, a.drug_id) = mm.material_id
											and a.charge_category_id = '2'
											and a.hos_id = mm.hos_id
											and a.org_id = mm.org_id
										left join dwd_dwd_dept ddd on
											a.exec_dept_id = ddd.dept_id
											and a.org_id = ddd.org_id
											and a.hos_id = ddd.hos_id
										left join dwd_dwd_dict_account_item da on
											a.account_item_id = da.account_item_id
											and a.org_id = da.org_id
										left join dw_dwb_rs_mi_charge_item t on
											a.charge_item_id = t.charge_item_id
											and a.org_id = t.org_id
											and a.hos_id = t.hos_id
										left join dwd_dwd_identity i on
											a.bill_doc_id = i.ident_id
											and a.org_id = i.org_id) as main
			where
				1 = 1
				and main.结算时间 between '2024-01-01' and '2024-07-24'
				and main.hos_id in ( 10412001 , 10480018 , 10480016 , 10480015 , 10480012 , 10480019 , 10480008 , 10480004 , 10480006 , 10480002 , 10480010 , 10480009 , 10480007 , 10480005 , 10480003 , 10480001 , 10480017 , 10480011 , 10480014 )
					and main.发票项目id not in (
					select
						item.dict_id
					from
						dwd_dwd_dict_group_item item
					left join dwd_dwd_dict_group item2 on
						item.dict_group_id = item2.group_id
					where
					1=1
					
					 and item.dict_id = main.发票项目id
					 	and item.org_id = main.org_id
					 	and (item.hos_id = main.hos_id )
							and item2.parent_id = '13'
							and item.dict_group_id in ('16', '19', '25', '26', '15', '112')
								and item.invalid_flag = '0'
					)
				group by
					coalesce(main.hos_id, '-1'),
					1 = 1
					

另外: 当上边的查询,将in 中的子查询和外层的main 表关联去掉后, 就不会宕机。

0 Answers