|
PostgreSQL Source Code git master
|
#include "postgres.h"#include "access/xlogprefetcher.h"#include "access/xlogreader.h"#include "catalog/pg_control.h"#include "catalog/storage_xlog.h"#include "commands/dbcommands_xlog.h"#include "funcapi.h"#include "miscadmin.h"#include "port/atomics.h"#include "storage/bufmgr.h"#include "storage/shmem.h"#include "storage/smgr.h"#include "utils/fmgrprotos.h"#include "utils/guc_hooks.h"#include "utils/hsearch.h"#include "utils/timestamp.h"
Go to the source code of this file.
Data Structures | |
| struct | LsnReadQueue |
| struct | XLogPrefetcher |
| struct | XLogPrefetcherFilter |
| struct | XLogPrefetchStats |
Enumerations | |
| enum | LsnReadQueueNextStatus { LRQ_NEXT_NO_IO , LRQ_NEXT_IO , LRQ_NEXT_AGAIN } |
Variables | |
| int | recovery_prefetch = RECOVERY_PREFETCH_TRY |
| static int | XLogPrefetchReconfigureCount = 0 |
| static XLogPrefetchStats * | SharedStats |
| #define PG_STAT_GET_RECOVERY_PREFETCH_COLS 10 |
Definition at line 75 of file xlogprefetcher.c.
| #define XLOGPREFETCHER_DISTANCE_MULTIPLIER 4 |
Definition at line 62 of file xlogprefetcher.c.
| #define XLOGPREFETCHER_SEQ_WINDOW_SIZE 4 |
Definition at line 56 of file xlogprefetcher.c.
Definition at line 50 of file xlogprefetcher.c.
| typedef LsnReadQueueNextStatus(* LsnReadQueueNextFun) (uintptr_t lrq_private, XLogRecPtr *lsn) |
Definition at line 94 of file xlogprefetcher.c.
| Enumerator | |
|---|---|
| LRQ_NEXT_NO_IO | |
| LRQ_NEXT_IO | |
| LRQ_NEXT_AGAIN | |
Definition at line 83 of file xlogprefetcher.c.
Definition at line 1095 of file xlogprefetcher.c.
References AmStartupProcess, fb(), recovery_prefetch, and XLogPrefetchReconfigure().
Definition at line 1081 of file xlogprefetcher.c.
References fb(), GUC_check_errdetail, and RECOVERY_PREFETCH_ON.
|
inlinestatic |
Definition at line 202 of file xlogprefetcher.c.
References Assert, fb(), next, and palloc().
Referenced by XLogPrefetcherReadRecord().
|
inlinestatic |
Definition at line 272 of file xlogprefetcher.c.
References fb(), lrq_prefetch(), and RecoveryPrefetchEnabled.
Referenced by XLogPrefetcherReadRecord().
|
inlinestatic |
Definition at line 239 of file xlogprefetcher.c.
References fb().
Referenced by XLogPrefetcherComputeStats(), and XLogPrefetcherReadRecord().
|
inlinestatic |
Definition at line 227 of file xlogprefetcher.c.
Referenced by XLogPrefetcherFree(), and XLogPrefetcherReadRecord().
|
inlinestatic |
Definition at line 233 of file xlogprefetcher.c.
References fb().
Referenced by XLogPrefetcherComputeStats(), and XLogPrefetcherReadRecord().
|
inlinestatic |
Definition at line 245 of file xlogprefetcher.c.
References Assert, fb(), LRQ_NEXT_AGAIN, LRQ_NEXT_IO, and LRQ_NEXT_NO_IO.
Referenced by lrq_complete_lsn(), and XLogPrefetcherReadRecord().
| Datum pg_stat_get_recovery_prefetch | ( | PG_FUNCTION_ARGS | ) |
Definition at line 824 of file xlogprefetcher.c.
References XLogPrefetchStats::block_distance, fb(), XLogPrefetchStats::hit, i, InitMaterializedSRF(), Int32GetDatum(), Int64GetDatum(), XLogPrefetchStats::io_depth, pg_atomic_read_u64(), PG_STAT_GET_RECOVERY_PREFETCH_COLS, XLogPrefetchStats::prefetch, XLogPrefetchStats::reset_time, SharedStats, XLogPrefetchStats::skip_fpw, XLogPrefetchStats::skip_init, XLogPrefetchStats::skip_new, XLogPrefetchStats::skip_rep, TimestampTzGetDatum(), tuplestore_putvalues(), values, and XLogPrefetchStats::wal_distance.
|
inlinestatic |
Definition at line 856 of file xlogprefetcher.c.
References dlist_delete(), dlist_push_head(), fb(), XLogPrefetcherFilter::filter_from_block, XLogPrefetcherFilter::filter_until_replayed, HASH_ENTER, hash_search(), XLogPrefetcherFilter::link, and Min.
Referenced by XLogPrefetcherNextBlock().
| XLogPrefetcher * XLogPrefetcherAllocate | ( | XLogReaderState * | reader | ) |
Definition at line 362 of file xlogprefetcher.c.
References XLogPrefetchStats::block_distance, ctl, dlist_init(), fb(), HASH_BLOBS, hash_create(), HASH_ELEM, XLogPrefetchStats::io_depth, palloc0_object, SharedStats, XLogPrefetchStats::wal_distance, and XLogPrefetchReconfigureCount.
Referenced by InitWalRecovery().
| void XLogPrefetcherBeginRead | ( | XLogPrefetcher * | prefetcher, |
| XLogRecPtr | recPtr | ||
| ) |
Definition at line 962 of file xlogprefetcher.c.
References fb(), InvalidXLogRecPtr, and XLogBeginRead().
Referenced by FinishWalRecovery(), InitWalRecovery(), PerformWalRecovery(), and ReadCheckpointRecord().
|
inlinestatic |
Definition at line 894 of file xlogprefetcher.c.
References dlist_delete(), dlist_is_empty(), dlist_tail_element, fb(), XLogPrefetcherFilter::filter_until_replayed, HASH_REMOVE, hash_search(), XLogPrefetcherFilter::link, and unlikely.
Referenced by XLogPrefetcherReadRecord().
| void XLogPrefetcherComputeStats | ( | XLogPrefetcher * | prefetcher | ) |
Definition at line 410 of file xlogprefetcher.c.
References XLogPrefetchStats::block_distance, XLogReaderState::decode_queue_tail, fb(), XLogPrefetchStats::io_depth, lrq_completed(), lrq_inflight(), DecodedXLogRecord::lsn, SharedStats, XLogPrefetchStats::wal_distance, and XLOGPREFETCHER_STATS_DISTANCE.
Referenced by ShutdownWalRecovery(), WaitForWALToBecomeAvailable(), and XLogPrefetcherReadRecord().
| void XLogPrefetcherFree | ( | XLogPrefetcher * | prefetcher | ) |
Definition at line 390 of file xlogprefetcher.c.
References fb(), hash_destroy(), lrq_free(), and pfree().
Referenced by ShutdownWalRecovery().
| XLogReaderState * XLogPrefetcherGetReader | ( | XLogPrefetcher * | prefetcher | ) |
|
inlinestatic |
Definition at line 914 of file xlogprefetcher.c.
References RelFileLocator::dbOid, dlist_is_empty(), elog, fb(), XLogPrefetcherFilter::filter_from_block, XLogPrefetcherFilter::filter_until_replayed, HASH_FIND, hash_search(), InvalidOid, InvalidRelFileNumber, LSN_FORMAT_ARGS, RelFileLocator::relNumber, RelFileLocator::spcOid, and unlikely.
Referenced by XLogPrefetcherNextBlock().
|
static |
Definition at line 459 of file xlogprefetcher.c.
References Assert, BKPBLOCK_WILL_INIT, DecodedBkpBlock::blkno, DecodedXLogRecord::blocks, BufferIsValid(), RelFileLocator::dbOid, elog, ERROR, fb(), DecodedBkpBlock::flags, DecodedBkpBlock::forknum, DecodedBkpBlock::has_image, DecodedXLogRecord::header, XLogPrefetchStats::hit, i, DecodedBkpBlock::in_use, PrefetchBufferResult::initiated_io, INVALID_PROC_NUMBER, InvalidBuffer, InvalidOid, InvalidRelFileNumber, InvalidXLogRecPtr, IO_DIRECT_DATA, io_direct_flags, LRQ_NEXT_AGAIN, LRQ_NEXT_IO, LRQ_NEXT_NO_IO, DecodedXLogRecord::lsn, LSN_FORMAT_ARGS, DecodedXLogRecord::main_data, MAIN_FORKNUM, DecodedXLogRecord::max_block_id, pg_unreachable, XLogPrefetchStats::prefetch, DecodedBkpBlock::prefetch_buffer, PrefetchSharedBuffer(), XLogReaderState::ReadRecPtr, PrefetchBufferResult::recent_buffer, RecoveryPrefetchEnabled, RelFileLocatorEquals, DecodedBkpBlock::rlocator, SharedStats, XLogPrefetchStats::skip_fpw, XLogPrefetchStats::skip_init, XLogPrefetchStats::skip_new, XLogPrefetchStats::skip_rep, smgrexists(), smgrnblocks(), smgropen(), XLogRecord::xl_info, XLogRecord::xl_rmid, XLOG_CHECKPOINT_SHUTDOWN, XLOG_DBASE_CREATE_FILE_COPY, XLOG_END_OF_RECOVERY, XLOG_SMGR_CREATE, XLOG_SMGR_TRUNCATE, XLOGPREFETCHER_SEQ_WINDOW_SIZE, XLogPrefetcherAddFilter(), XLogPrefetcherIsFiltered(), XLogPrefetchIncrement(), XLogReadAhead(), and XLogReaderHasQueuedRecordOrError().
Referenced by XLogPrefetcherReadRecord().
| XLogRecord * XLogPrefetcherReadRecord | ( | XLogPrefetcher * | prefetcher, |
| char ** | errmsg | ||
| ) |
Definition at line 981 of file xlogprefetcher.c.
References Assert, errmsg(), fb(), DecodedXLogRecord::header, lrq_alloc(), lrq_complete_lsn(), lrq_completed(), lrq_free(), lrq_inflight(), lrq_prefetch(), DecodedXLogRecord::lsn, maintenance_io_concurrency, RecoveryPrefetchEnabled, unlikely, XLogNextRecord(), XLOGPREFETCHER_DISTANCE_MULTIPLIER, XLogPrefetcherCompleteFilters(), XLogPrefetcherComputeStats(), XLogPrefetcherNextBlock(), XLogPrefetchReconfigureCount, XLogReaderHasQueuedRecordOrError(), and XLogReleasePreviousRecord().
Referenced by ReadRecord().
|
inlinestatic |
Definition at line 351 of file xlogprefetcher.c.
References AmStartupProcess, Assert, IsUnderPostmaster, pg_atomic_read_u64(), and pg_atomic_write_u64().
Referenced by XLogPrefetcherNextBlock().
Definition at line 340 of file xlogprefetcher.c.
References XLogPrefetchReconfigureCount.
Referenced by ApplyWalRecord(), assign_maintenance_io_concurrency(), and assign_recovery_prefetch().
Definition at line 303 of file xlogprefetcher.c.
References GetCurrentTimestamp(), XLogPrefetchStats::hit, pg_atomic_write_u64(), XLogPrefetchStats::prefetch, XLogPrefetchStats::reset_time, SharedStats, XLogPrefetchStats::skip_fpw, XLogPrefetchStats::skip_init, XLogPrefetchStats::skip_new, and XLogPrefetchStats::skip_rep.
Referenced by pg_stat_reset_shared().
Definition at line 315 of file xlogprefetcher.c.
References GetCurrentTimestamp(), XLogPrefetchStats::hit, pg_atomic_init_u64(), XLogPrefetchStats::prefetch, XLogPrefetchStats::reset_time, SharedStats, ShmemInitStruct(), XLogPrefetchStats::skip_fpw, XLogPrefetchStats::skip_init, XLogPrefetchStats::skip_new, and XLogPrefetchStats::skip_rep.
Referenced by CreateOrAttachShmemStructs().
Definition at line 294 of file xlogprefetcher.c.
Referenced by CalculateShmemSize().
| int recovery_prefetch = RECOVERY_PREFETCH_TRY |
Definition at line 68 of file xlogprefetcher.c.
Referenced by assign_recovery_prefetch().
|
static |
Definition at line 199 of file xlogprefetcher.c.
Referenced by pg_stat_get_recovery_prefetch(), XLogPrefetcherAllocate(), XLogPrefetcherComputeStats(), XLogPrefetcherNextBlock(), XLogPrefetchResetStats(), and XLogPrefetchShmemInit().
|
static |
Definition at line 78 of file xlogprefetcher.c.
Referenced by XLogPrefetcherAllocate(), XLogPrefetcherReadRecord(), and XLogPrefetchReconfigure().