diff --git a/src/gausskernel/process/postmaster/pagewriter.cpp b/src/gausskernel/process/postmaster/pagewriter.cpp index f57206f7d2d7fcffecc31161bb593eb87bfa00d6..d6d5b807fd5cbe63baf114cdb33b51f3c7359176 100755 --- a/src/gausskernel/process/postmaster/pagewriter.cpp +++ b/src/gausskernel/process/postmaster/pagewriter.cpp @@ -48,6 +48,7 @@ #define MIN(A, B) ((B) < (A) ? (B) : (A)) #define MAX(A, B) ((B) > (A) ? (B) : (A)) #define FULL_CKPT g_instance.ckpt_cxt_ctl->flush_all_dirty_page +#define MAX_SYNC_REQUEST_HALF (g_instance.ckpt_cxt_ctl->incre_ckpt_sync_shmem->max_requests / 2) const float ONE_HALF = 0.5; const int TEN_MILLISECOND = 10; @@ -1273,6 +1274,7 @@ static void ckpt_pagewriter_main_thread_loop(void) candidate_num = get_curr_candidate_nums(false) + get_curr_candidate_nums(true); while (get_dirty_page_num() == 0 && candidate_num == (uint32)TOTAL_BUFFER_NUM && + g_instance.ckpt_cxt_ctl->incre_ckpt_sync_shmem->num_requests < MAX_SYNC_REQUEST_HALF && !t_thrd.pagewriter_cxt.shutdown_requested) { rc = WaitLatch(&t_thrd.proc->procLatch, WL_TIMEOUT | WL_POSTMASTER_DEATH, (long)TEN_MILLISECOND); if (rc & WL_POSTMASTER_DEATH) { diff --git a/src/gausskernel/storage/sync/knl_usync.cpp b/src/gausskernel/storage/sync/knl_usync.cpp index 2b94b599f829172022fa35ef2704ef2599d172c1..c52b6dde2963b05db86c24a01e6993a42effaefb 100644 --- a/src/gausskernel/storage/sync/knl_usync.cpp +++ b/src/gausskernel/storage/sync/knl_usync.cpp @@ -750,6 +750,10 @@ bool PgwrForwardSyncRequest(const FileTag *ftag, SyncRequestType type) if (incre_ckpt_sync_shmem->pagewritermain_pid == 0 || (incre_ckpt_sync_shmem->num_requests >= incre_ckpt_sync_shmem->max_requests && !CompactPageWriterRequestQueue())) { LWLockRelease(sync_queue_lwlock); + if (incre_ckpt_sync_shmem->pagewritermain_pid !=0 && incre_ckpt_sync_shmem->num_requests >= + incre_ckpt_sync_shmem->max_requests) { + SetLatch(g_instance.proc_base->pgwrMainThreadLatch); + } return false; }