|
PostgreSQL Source Code git master
|
#include "postgres.h"#include <fcntl.h>#include <sys/stat.h>#include <unistd.h>#include "access/slru.h"#include "access/transam.h"#include "access/xlog.h"#include "access/xlogutils.h"#include "miscadmin.h"#include "pgstat.h"#include "storage/fd.h"#include "storage/shmem.h"#include "storage/shmem_internal.h"#include "utils/guc.h"#include "utils/memutils.h"#include "utils/wait_event.h"
Go to the source code of this file.
Data Structures | |
| struct | SlruWriteAllData |
Macros | |
| #define | MAX_WRITEALL_BUFFERS 16 |
| #define | SLRU_BANK_BITSHIFT 4 |
| #define | SLRU_BANK_SIZE (1 << SLRU_BANK_BITSHIFT) |
| #define | SlotGetBankNumber(slotno) ((slotno) >> SLRU_BANK_BITSHIFT) |
| #define | INIT_SLRUFILETAG(a, xx_handler, xx_segno) |
Typedefs | |
| typedef struct SlruWriteAllData | SlruWriteAllData |
| typedef struct SlruWriteAllData * | SlruWriteAll |
Enumerations | |
| enum | SlruErrorCause { SLRU_OPEN_FAILED , SLRU_SEEK_FAILED , SLRU_READ_FAILED , SLRU_WRITE_FAILED , SLRU_FSYNC_FAILED , SLRU_CLOSE_FAILED } |
Variables | |
| static SlruErrorCause | slru_errcause |
| static int | slru_errno |
| #define INIT_SLRUFILETAG | ( | a, | |
| xx_handler, | |||
| xx_segno | |||
| ) |
Definition at line 159 of file slru.c.
| #define SlotGetBankNumber | ( | slotno | ) | ((slotno) >> SLRU_BANK_BITSHIFT) |
| #define SLRU_BANK_SIZE (1 << SLRU_BANK_BITSHIFT) |
| typedef struct SlruWriteAllData* SlruWriteAll |
| Enumerator | |
|---|---|
| SLRU_OPEN_FAILED | |
| SLRU_SEEK_FAILED | |
| SLRU_READ_FAILED | |
| SLRU_WRITE_FAILED | |
| SLRU_FSYNC_FAILED | |
| SLRU_CLOSE_FAILED | |
Definition at line 167 of file slru.c.
Definition at line 377 of file slru.c.
References GUC_check_errdetail, name, newval, and SLRU_BANK_SIZE.
Referenced by check_commit_ts_buffers(), check_multixact_member_buffers(), check_multixact_offset_buffers(), check_notify_buffers(), check_serial_buffers(), check_subtrans_buffers(), and check_transaction_buffers().
| void shmem_slru_attach | ( | void * | location, |
| ShmemStructOpts * | base_options | ||
| ) |
Definition at line 359 of file slru.c.
References fb(), memcpy(), SlruDesc::nbanks, SlruDesc::options, SlruDesc::shared, and SLRU_BANK_SIZE.
Referenced by AttachShmemIndexEntry().
| void shmem_slru_init | ( | void * | location, |
| ShmemStructOpts * | base_options | ||
| ) |
Definition at line 267 of file slru.c.
References Assert, SlruSharedData::bank_cur_lru_count, SlruSharedData::bank_locks, SlruOpts::bank_tranche_id, SlruSharedData::buffer_locks, SlruOpts::buffer_tranche_id, BUFFERALIGN, fb(), SlruSharedData::group_lsn, SlruSharedData::latest_page_number, LWLockPadded::lock, SlruSharedData::lsn_groups_per_page, LWLockInitialize(), LWLockNewTrancheId(), MAXALIGN, memcpy(), SlruOpts::name, NAMEDATALEN, SlruDesc::nbanks, SlruSharedData::num_slots, SlruDesc::options, SlruSharedData::page_buffer, SlruSharedData::page_dirty, SlruSharedData::page_lru_count, SlruSharedData::page_number, SlruSharedData::page_status, pg_atomic_init_u64(), pgstat_get_slru_index(), SlruDesc::shared, SimpleLruShmemSize(), SLRU_BANK_SIZE, SLRU_MAX_ALLOWED_BUFFERS, SLRU_PAGE_EMPTY, SlruSharedData::slru_stats_idx, and snprintf.
Referenced by InitShmemIndexEntry().
Definition at line 235 of file slru.c.
References fb(), Max, Min, NBuffers, and SLRU_BANK_SIZE.
Referenced by CLOGShmemBuffers(), CommitTsShmemBuffers(), and SUBTRANSShmemBuffers().
Definition at line 795 of file slru.c.
References CloseTransientFile(), ctl, endpos, fb(), fd(), MAXPGPATH, OpenTransientFile(), PG_BINARY, pgstat_count_slru_blocks_exists(), result, SlruWriteAllData::segno, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_OPEN_FAILED, SLRU_PAGES_PER_SEGMENT, SLRU_SEEK_FAILED, SlruFileName(), and SlruReportIOError().
Referenced by ActivateCommitTs(), find_multixact_start(), and test_slru_page_exists().
Definition at line 550 of file slru.c.
References Assert, SlruSharedData::buffer_locks, ctl, fb(), LWLockPadded::lock, LW_EXCLUSIVE, LWLockAcquire(), LWLockHeldByMeInMode(), LWLockRelease(), SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, pgstat_count_slru_blocks_hit(), pgstat_count_slru_blocks_read(), SimpleLruGetBankLock(), SimpleLruWaitIO(), SimpleLruZeroLSNs(), SLRU_PAGE_EMPTY, SLRU_PAGE_READ_IN_PROGRESS, SLRU_PAGE_VALID, SLRU_PAGE_WRITE_IN_PROGRESS, SlruSharedData::slru_stats_idx, SlruPhysicalReadPage(), SlruRecentlyUsed(), SlruReportIOError(), and SlruSelectLRUPage().
Referenced by AsyncNotifyFreezeXids(), asyncQueueAddEntries(), GetMultiXactIdMembers(), RecordNewMultiXact(), SerialAdd(), SetXidCommitTsInPage(), SimpleLruReadPage_ReadOnly(), SubTransSetParent(), test_slru_page_read(), TransactionIdSetPageStatusInternal(), TrimCLOG(), and TrimMultiXact().
Definition at line 654 of file slru.c.
References ctl, fb(), LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockRelease(), SlruSharedData::page_number, SlruSharedData::page_status, pgstat_count_slru_blocks_hit(), SimpleLruGetBankLock(), SimpleLruReadPage(), SLRU_BANK_SIZE, SLRU_PAGE_EMPTY, SLRU_PAGE_READ_IN_PROGRESS, SlruSharedData::slru_stats_idx, and SlruRecentlyUsed().
Referenced by asyncQueueProcessPageEntries(), find_multixact_start(), SerialGetMinConflictCommitSeqNo(), SubTransGetParent(), test_slru_page_readonly(), TransactionIdGetCommitTsData(), and TransactionIdGetStatus().
Definition at line 246 of file slru.c.
References Assert, fb(), memcpy(), MemoryContextAlloc(), SHMEM_KIND_SLRU, ShmemRequestInternal(), SimpleLruShmemSize(), and TopMemoryContext.
Definition at line 202 of file slru.c.
References Assert, BUFFERALIGN, fb(), MAXALIGN, SLRU_BANK_SIZE, and SLRU_MAX_ALLOWED_BUFFERS.
Referenced by shmem_slru_init(), and SimpleLruRequestWithOpts().
Definition at line 1458 of file slru.c.
References SlruSharedData::bank_locks, ctl, ereport, errmsg, fb(), SlruSharedData::latest_page_number, LWLockPadded::lock, LOG, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SlruSharedData::num_slots, SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, pg_atomic_read_u64(), pgstat_count_slru_truncate(), SimpleLruWaitIO(), SlotGetBankNumber, SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SlruSharedData::slru_stats_idx, SlruInternalWritePage(), SlruScanDirCbDeleteCutoff(), and SlruScanDirectory().
Referenced by asyncQueueAdvanceTail(), CheckPointPredicate(), clog_redo(), commit_ts_redo(), PerformMembersTruncation(), PerformOffsetsTruncation(), test_slru_page_truncate(), TruncateCLOG(), TruncateCommitTs(), and TruncateSUBTRANS().
Definition at line 492 of file slru.c.
References Assert, SlruSharedData::bank_locks, SlruSharedData::buffer_locks, ctl, fb(), LWLockPadded::lock, LW_EXCLUSIVE, LW_SHARED, LWLockAcquire(), LWLockConditionalAcquire(), LWLockRelease(), SlruSharedData::page_dirty, SlruSharedData::page_status, SlotGetBankNumber, SLRU_PAGE_EMPTY, SLRU_PAGE_READ_IN_PROGRESS, SLRU_PAGE_VALID, and SLRU_PAGE_WRITE_IN_PROGRESS.
Referenced by SimpleLruReadPage(), SimpleLruTruncate(), SlruDeleteSegment(), SlruInternalWritePage(), and SlruSelectLRUPage().
Definition at line 1372 of file slru.c.
References Assert, SlruSharedData::bank_locks, CloseTransientFile(), ctl, fb(), fsync_fname(), i, LWLockPadded::lock, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SlruSharedData::num_slots, SlruSharedData::page_dirty, SlruSharedData::page_status, pgstat_count_slru_flush(), SlotGetBankNumber, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SLRU_PAGES_PER_SEGMENT, SlruSharedData::slru_stats_idx, SlruInternalWritePage(), SlruReportIOError(), and SYNC_HANDLER_NONE.
Referenced by CheckPointCLOG(), CheckPointCommitTs(), CheckPointMultiXact(), CheckPointPredicate(), CheckPointSUBTRANS(), find_multixact_start(), and test_slru_page_writeall().
Definition at line 781 of file slru.c.
References Assert, ctl, fb(), SLRU_PAGE_EMPTY, and SlruInternalWritePage().
Referenced by SimpleLruZeroAndWritePage(), and test_slru_page_write().
Definition at line 466 of file slru.c.
References Assert, ctl, fb(), LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SimpleLruGetBankLock(), SimpleLruWritePage(), and SimpleLruZeroPage().
Referenced by ActivateCommitTs(), BootStrapCLOG(), BootStrapMultiXact(), BootStrapSUBTRANS(), clog_redo(), commit_ts_redo(), and multixact_redo().
Definition at line 450 of file slru.c.
References ctl, fb(), SlruSharedData::group_lsn, SlruSharedData::lsn_groups_per_page, and MemSet.
Referenced by SimpleLruReadPage(), and SimpleLruZeroPage().
Definition at line 397 of file slru.c.
References Assert, ctl, fb(), SlruSharedData::latest_page_number, LW_EXCLUSIVE, LWLockHeldByMeInMode(), MemSet, SlruSharedData::page_buffer, SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, pg_atomic_write_u64(), pgstat_count_slru_blocks_zeroed(), SimpleLruGetBankLock(), SimpleLruZeroLSNs(), SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SlruSharedData::slru_stats_idx, SlruRecentlyUsed(), and SlruSelectLRUPage().
Referenced by asyncQueueAddEntries(), ExtendCLOG(), ExtendCommitTs(), ExtendMultiXactMember(), ExtendMultiXactOffset(), ExtendSUBTRANS(), SerialAdd(), SimpleLruZeroAndWritePage(), StartupSUBTRANS(), test_slru_page_write(), and TrimMultiXact().
Definition at line 1811 of file slru.c.
Referenced by SlruScanDirectory().
Definition at line 1576 of file slru.c.
References SlruSharedData::bank_locks, ctl, fb(), LWLockPadded::lock, LW_EXCLUSIVE, LWLockAcquire(), LWLockRelease(), SlruSharedData::num_slots, SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, SlruWriteAllData::segno, SimpleLruWaitIO(), SlotGetBankNumber, SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SLRU_PAGES_PER_SEGMENT, SlruInternalDeleteSegment(), and SlruInternalWritePage().
Referenced by test_slru_page_delete().
Definition at line 94 of file slru.c.
References Assert, ctl, fb(), INT64CONST, MAXPGPATH, and snprintf.
Referenced by SimpleLruDoesPhysicalPageExist(), SlruInternalDeleteSegment(), SlruPhysicalReadPage(), SlruPhysicalWritePage(), SlruReportIOError(), and SlruSyncFileTag().
Definition at line 1553 of file slru.c.
References ctl, DEBUG2, ereport, errmsg_internal(), fb(), INIT_SLRUFILETAG, MAXPGPATH, RegisterSyncRequest(), SlruWriteAllData::segno, SlruFileName(), SYNC_FORGET_REQUEST, and SYNC_HANDLER_NONE.
Referenced by SlruDeleteSegment(), SlruScanDirCbDeleteAll(), and SlruScanDirCbDeleteCutoff().
|
static |
Definition at line 701 of file slru.c.
References Assert, SlruSharedData::bank_locks, SlruSharedData::buffer_locks, CheckpointStats, CheckpointStatsData::ckpt_slru_written, CloseTransientFile(), ctl, fb(), i, LWLockPadded::lock, LW_EXCLUSIVE, LWLockAcquire(), LWLockHeldByMeInMode(), LWLockRelease(), SlruSharedData::page_dirty, SlruSharedData::page_number, SlruSharedData::page_status, PendingCheckpointerStats, SimpleLruGetBankLock(), SimpleLruWaitIO(), SlotGetBankNumber, SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, SLRU_PAGE_WRITE_IN_PROGRESS, PgStat_CheckpointerStats::slru_written, SlruPhysicalWritePage(), and SlruReportIOError().
Referenced by SimpleLruTruncate(), SimpleLruWriteAll(), SimpleLruWritePage(), SlruDeleteSegment(), and SlruSelectLRUPage().
Definition at line 1653 of file slru.c.
References Assert, ctl, fb(), and SLRU_PAGES_PER_SEGMENT.
Referenced by SlruScanDirCbDeleteCutoff(), and SlruScanDirCbReportPresence().
Definition at line 853 of file slru.c.
References CloseTransientFile(), ctl, ereport, errmsg, fb(), fd(), InRecovery, LOG, MAXPGPATH, MemSet, OpenTransientFile(), SlruSharedData::page_buffer, PG_BINARY, pg_pread, pgstat_report_wait_end(), pgstat_report_wait_start(), SlruWriteAllData::segno, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_OPEN_FAILED, SLRU_PAGES_PER_SEGMENT, SLRU_READ_FAILED, and SlruFileName().
Referenced by SimpleLruReadPage().
|
static |
Definition at line 925 of file slru.c.
References CloseTransientFile(), ctl, END_CRIT_SECTION, fb(), fd(), SlruSharedData::group_lsn, i, INIT_SLRUFILETAG, SlruSharedData::lsn_groups_per_page, MAX_WRITEALL_BUFFERS, MAXPGPATH, OpenTransientFile(), SlruSharedData::page_buffer, PG_BINARY, pg_fsync(), pg_pwrite, pgstat_count_slru_blocks_written(), pgstat_report_wait_end(), pgstat_report_wait_start(), RegisterSyncRequest(), SlruWriteAllData::segno, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_FSYNC_FAILED, SLRU_OPEN_FAILED, SLRU_PAGES_PER_SEGMENT, SlruSharedData::slru_stats_idx, SLRU_WRITE_FAILED, SlruFileName(), START_CRIT_SECTION, SYNC_HANDLER_NONE, SYNC_REQUEST, XLogFlush(), and XLogRecPtrIsValid.
Referenced by SlruInternalWritePage().
|
inlinestatic |
Definition at line 1173 of file slru.c.
References Assert, SlruSharedData::bank_cur_lru_count, fb(), SlruSharedData::page_lru_count, SlruSharedData::page_status, SlotGetBankNumber, and SLRU_PAGE_EMPTY.
Referenced by SimpleLruReadPage(), SimpleLruReadPage_ReadOnly(), and SimpleLruZeroPage().
Definition at line 1097 of file slru.c.
References ctl, data_sync_elevel(), elog, ereport, errcode_for_file_access(), errmsg, ERROR, fb(), MAXPGPATH, SlruWriteAllData::segno, SLRU_CLOSE_FAILED, slru_errcause, slru_errno, SLRU_FSYNC_FAILED, SLRU_OPEN_FAILED, SLRU_PAGES_PER_SEGMENT, SLRU_READ_FAILED, SLRU_SEEK_FAILED, SLRU_WRITE_FAILED, and SlruFileName().
Referenced by SimpleLruDoesPhysicalPageExist(), SimpleLruReadPage(), SimpleLruWriteAll(), and SlruInternalWritePage().
Definition at line 1797 of file slru.c.
References ctl, fb(), SLRU_PAGES_PER_SEGMENT, and SlruInternalDeleteSegment().
Referenced by AsyncShmemInit(), DeactivateCommitTs(), and test_slru_scan_cb().
|
static |
Definition at line 1781 of file slru.c.
References ctl, data, fb(), SLRU_PAGES_PER_SEGMENT, SlruInternalDeleteSegment(), and SlruMayDeleteSegment().
Referenced by SimpleLruTruncate().
Definition at line 1765 of file slru.c.
References ctl, data, fb(), and SlruMayDeleteSegment().
Referenced by TruncateCLOG(), and TruncateCommitTs().
| bool SlruScanDirectory | ( | SlruDesc * | ctl, |
| SlruScanCallback | callback, | ||
| void * | data | ||
| ) |
Definition at line 1844 of file slru.c.
References AllocateDir(), callback(), ctl, data, DEBUG2, elog, fb(), FreeDir(), len, ReadDir(), SLRU_PAGES_PER_SEGMENT, and SlruCorrectSegmentFilenameLength().
Referenced by AsyncShmemInit(), DeactivateCommitTs(), SimpleLruTruncate(), test_slru_delete_all(), TruncateCLOG(), and TruncateCommitTs().
Definition at line 1219 of file slru.c.
References Assert, SlruSharedData::bank_cur_lru_count, ctl, fb(), SlruSharedData::latest_page_number, LWLockHeldByMe(), SlruSharedData::page_dirty, SlruSharedData::page_lru_count, SlruSharedData::page_number, SlruSharedData::page_status, pg_atomic_read_u64(), SimpleLruGetBankLock(), SimpleLruWaitIO(), SLRU_BANK_SIZE, SLRU_PAGE_EMPTY, SLRU_PAGE_VALID, and SlruInternalWritePage().
Referenced by SimpleLruReadPage(), and SimpleLruZeroPage().
Definition at line 1884 of file slru.c.
References CloseTransientFile(), ctl, fb(), fd(), OpenTransientFile(), PG_BINARY, pg_fsync(), pgstat_report_wait_end(), pgstat_report_wait_start(), result, FileTag::segno, and SlruFileName().
Referenced by clogsyncfiletag(), committssyncfiletag(), multixactmemberssyncfiletag(), multixactoffsetssyncfiletag(), and test_slru_page_sync().
|
static |
Definition at line 177 of file slru.c.
Referenced by SimpleLruDoesPhysicalPageExist(), SimpleLruWriteAll(), SlruPhysicalReadPage(), SlruPhysicalWritePage(), and SlruReportIOError().
|
static |
Definition at line 178 of file slru.c.
Referenced by SimpleLruDoesPhysicalPageExist(), SimpleLruWriteAll(), SlruPhysicalReadPage(), SlruPhysicalWritePage(), and SlruReportIOError().