Basing on MySQL version 8.0.18, fixed like this: --- a/storage/innobase/row/row0pread.cc +++ b/storage/innobase/row/row0pread.cc @@ -502,6 +502,12 @@ dberr_t Parallel_reader::Ctx::traverse() { auto cur = pcur->get_page_cur(); if (page_cur_is_after_last(cur)) { + // if interrupted, finish the job as early as possible + if (unlikely(trx_is_interrupted(m_scan_ctx->m_trx))) { + err = DB_INTERRUPTED; + break; + } + mem_heap_empty(heap);