From f759a1ceefe4117730e15d3311ead77d0b89392c Mon Sep 17 00:00:00 2001 From: "arcoalien@qq.com" Date: Wed, 13 Sep 2023 16:38:21 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E5=85=B3=E9=97=AD=E5=8F=8C?= =?UTF-8?q?=E5=86=99=E5=90=8E=EF=BC=8C=E6=AE=B5=E9=A1=B5=E5=BC=8F=E6=89=A7?= =?UTF-8?q?=E8=A1=8Cgs=5Fshrink=E4=BC=9Acore=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../storage/smgr/segment/segxlog.cpp | 29 +++++++++++-------- .../storage/smgr/segment/space.cpp | 27 +++++++++-------- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/gausskernel/storage/smgr/segment/segxlog.cpp b/src/gausskernel/storage/smgr/segment/segxlog.cpp index 264c8bb86a..8efa9fa38e 100644 --- a/src/gausskernel/storage/smgr/segment/segxlog.cpp +++ b/src/gausskernel/storage/smgr/segment/segxlog.cpp @@ -780,20 +780,25 @@ void seg_redo_new_page_copy_and_flush(BufferTag *tag, char *data, XLogRecPtr lsn update_max_page_flush_lsn(lsn, t_thrd.proc_cxt.MyProcPid, false); } - bool flush_old_file = false; - uint32 pos = seg_dw_single_flush_without_buffer(*tag, (Block)page, &flush_old_file); - t_thrd.proc->dw_pos = pos; - t_thrd.proc->flush_new_dw = !flush_old_file; - - SegSpace *spc = spc_open(tag->rnode.spcNode, tag->rnode.dbNode, false); - SegmentCheck(spc != NULL); - seg_physical_write(spc, tag->rnode, tag->forkNum, tag->blockNum, page, true); - if (flush_old_file) { - g_instance.dw_single_cxt.recovery_buf.single_flush_state[pos] = true; + if (dw_enabled() && pg_atomic_read_u32(&g_instance.ckpt_cxt_ctl->current_page_writer_count) > 0) { + bool flush_old_file = false; + uint16 pos = seg_dw_single_flush_without_buffer(*tag, (Block)page, &flush_old_file); + t_thrd.proc->dw_pos = pos; + t_thrd.proc->flush_new_dw = !flush_old_file; + SegSpace *spc = spc_open(tag->rnode.spcNode, tag->rnode.dbNode, false); + SegmentCheck(spc != NULL); + seg_physical_write(spc, tag->rnode, tag->forkNum, tag->blockNum, page, true); + if (flush_old_file) { + g_instance.dw_single_cxt.recovery_buf.single_flush_state[pos] = true; + } else { + g_instance.dw_single_cxt.single_flush_state[pos] = true; + } + t_thrd.proc->dw_pos = -1; } else { - g_instance.dw_single_cxt.single_flush_state[pos] = true; + SegSpace *spc = spc_open(tag->rnode.spcNode, tag->rnode.dbNode, false); + SegmentCheck(spc != NULL); + seg_physical_write(spc, tag->rnode, tag->forkNum, tag->blockNum, page, true); } - t_thrd.proc->dw_pos = -1; } diff --git a/src/gausskernel/storage/smgr/segment/space.cpp b/src/gausskernel/storage/smgr/segment/space.cpp index 122ff7884c..be034f835b 100644 --- a/src/gausskernel/storage/smgr/segment/space.cpp +++ b/src/gausskernel/storage/smgr/segment/space.cpp @@ -582,20 +582,23 @@ static void copy_extent(SegExtentGroup *seg, RelFileNode logic_rnode, uint32 log PageSetLSN(pagedata, recptr); /* 2. double write */ - bool flush_old_file = false; - uint32 pos = seg_dw_single_flush_without_buffer(tag, (Block)pagedata, &flush_old_file); - t_thrd.proc->dw_pos = pos; - t_thrd.proc->flush_new_dw = !flush_old_file; - - /* 3. checksum and write to file */ - PageSetChecksumInplace((Page)pagedata, to_block); - df_pwrite_block(seg->segfile, pagedata, to_block); - if (flush_old_file) { - g_instance.dw_single_cxt.recovery_buf.single_flush_state[pos] = true; + if (dw_enabled() && pg_atomic_read_u32(&g_instance.ckpt_cxt_ctl->current_page_writer_count) > 0) { + bool flush_old_file = false; + uint16 pos = seg_dw_single_flush_without_buffer(tag, (Block)pagedata, &flush_old_file); + t_thrd.proc->dw_pos = pos; + t_thrd.proc->flush_new_dw = !flush_old_file; + PageSetChecksumInplace((Page)pagedata, to_block); + df_pwrite_block(seg->segfile, pagedata, to_block); + if (flush_old_file) { + g_instance.dw_single_cxt.recovery_buf.single_flush_state[pos] = true; + } else { + g_instance.dw_single_cxt.single_flush_state[pos] = true; + } + t_thrd.proc->dw_pos = -1; } else { - g_instance.dw_single_cxt.single_flush_state[pos] = true; + PageSetChecksumInplace((Page)pagedata, to_block); + df_pwrite_block(seg->segfile, pagedata, to_block); } - t_thrd.proc->dw_pos = -1; } END_CRIT_SECTION(); -- Gitee