diff --git a/src/logservice/archiveservice/ob_archive_scheduler.cpp b/src/logservice/archiveservice/ob_archive_scheduler.cpp index 7954be8c51..4600ec9111 100644 --- a/src/logservice/archiveservice/ob_archive_scheduler.cpp +++ b/src/logservice/archiveservice/ob_archive_scheduler.cpp @@ -91,6 +91,7 @@ int ObArchiveScheduler::modify_thread_count_() { int ret = OB_SUCCESS; int64_t archive_concurrency = 0; + const int64_t MIN_ARCHIVE_THREAD_COUNT = 2L; omt::ObTenantConfigGuard tenant_config(TENANT_CONF(tenant_id_)); const int64_t log_archive_concurrency = tenant_config.is_valid() ? tenant_config->log_archive_concurrency : 0L; @@ -99,7 +100,7 @@ int ObArchiveScheduler::modify_thread_count_() if (0 == log_archive_concurrency) { const int64_t max_cpu = MTL_CPU_COUNT(); if (max_cpu <= 8) { - archive_concurrency = max_cpu; + archive_concurrency = std::min(max_cpu * 2, 8L); } else if (max_cpu <= 32) { archive_concurrency = std::max(max_cpu / 2, 8L); } else { @@ -108,8 +109,8 @@ int ObArchiveScheduler::modify_thread_count_() } else { archive_concurrency = log_archive_concurrency; } - const int64_t fetcher_currency = std::max(1L, archive_concurrency / 3); - const int64_t sender_concurrency = std::max(1L, archive_concurrency - fetcher_currency); + const int64_t fetcher_currency = std::max(MIN_ARCHIVE_THREAD_COUNT, archive_concurrency / 3); + const int64_t sender_concurrency = std::max(MIN_ARCHIVE_THREAD_COUNT, archive_concurrency - fetcher_currency); if (OB_FAIL(sender_->modify_thread_count(sender_concurrency))) { ARCHIVE_LOG(WARN, "modify sender thread failed", K(ret)); } else if (OB_FAIL(fetcher_->modify_thread_count(fetcher_currency))) {