mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-24 04:45:45 +08:00
Compare commits
1 Commits
non-mvcc-s
...
hnsw-no-pi
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad71bba602 |
@@ -40,9 +40,6 @@
|
||||
#define IVFFLAT_METAPAGE_BLKNO 0
|
||||
#define IVFFLAT_HEAD_BLKNO 1 /* first list page */
|
||||
|
||||
/* Must correspond to page numbers since page lock is used */
|
||||
#define IVFFLAT_SCAN_LOCK 0
|
||||
|
||||
/* IVFFlat parameters */
|
||||
#define IVFFLAT_DEFAULT_LISTS 100
|
||||
#define IVFFLAT_MIN_LISTS 1
|
||||
@@ -249,7 +246,6 @@ typedef struct IvfflatScanOpaqueData
|
||||
int probes;
|
||||
int dimensions;
|
||||
bool first;
|
||||
bool hasLock;
|
||||
Buffer buf;
|
||||
ItemPointerData heaptid;
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#include "miscadmin.h"
|
||||
#include "pgstat.h"
|
||||
#include "storage/bufmgr.h"
|
||||
#include "storage/lmgr.h"
|
||||
|
||||
/*
|
||||
* Compare list distances
|
||||
@@ -264,7 +263,6 @@ ivfflatbeginscan(Relation index, int nkeys, int norderbys)
|
||||
so = (IvfflatScanOpaque) palloc(offsetof(IvfflatScanOpaqueData, lists) + probes * sizeof(IvfflatScanList));
|
||||
so->buf = InvalidBuffer;
|
||||
so->first = true;
|
||||
so->hasLock = false;
|
||||
ItemPointerSetInvalid(&so->heaptid);
|
||||
so->probes = probes;
|
||||
so->dimensions = dimensions;
|
||||
@@ -349,13 +347,6 @@ ivfflatgettuple(IndexScanDesc scan, ScanDirection dir)
|
||||
if (scan->orderByData == NULL)
|
||||
elog(ERROR, "cannot scan ivfflat index without order");
|
||||
|
||||
/* Get a shared lock for non-MVCC snapshots */
|
||||
if (!so->hasLock && !IsMVCCSnapshot(scan->xs_snapshot))
|
||||
{
|
||||
so->hasLock = true;
|
||||
LockPage(scan->indexRelation, IVFFLAT_SCAN_LOCK, ShareLock);
|
||||
}
|
||||
|
||||
if (scan->orderByData->sk_flags & SK_ISNULL)
|
||||
value = PointerGetDatum(InitVector(so->dimensions));
|
||||
else
|
||||
@@ -431,10 +422,6 @@ ivfflatendscan(IndexScanDesc scan)
|
||||
if (BufferIsValid(so->buf))
|
||||
ReleaseBuffer(so->buf);
|
||||
|
||||
/* Release lock */
|
||||
if (so->hasLock)
|
||||
UnlockPage(scan->indexRelation, IVFFLAT_SCAN_LOCK, ShareLock);
|
||||
|
||||
pairingheap_free(so->listQueue);
|
||||
tuplesort_end(so->sortstate);
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
#include "commands/vacuum.h"
|
||||
#include "ivfflat.h"
|
||||
#include "storage/bufmgr.h"
|
||||
#include "storage/lmgr.h"
|
||||
|
||||
/*
|
||||
* Bulk delete tuples from the index
|
||||
@@ -66,10 +65,14 @@ ivfflatbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
|
||||
|
||||
vacuum_delay_point();
|
||||
|
||||
/* Ensure no in-flight index scans for non-MVCC snapshots */
|
||||
LockPage(index, IVFFLAT_SCAN_LOCK, ExclusiveLock);
|
||||
|
||||
buf = ReadBufferExtended(index, MAIN_FORKNUM, searchPage, RBM_NORMAL, bas);
|
||||
|
||||
/*
|
||||
* ambulkdelete cannot delete entries from pages that are
|
||||
* pinned by other backends
|
||||
*
|
||||
* https://www.postgresql.org/docs/current/index-locking.html
|
||||
*/
|
||||
LockBufferForCleanup(buf);
|
||||
|
||||
state = GenericXLogStart(index);
|
||||
@@ -111,8 +114,6 @@ ivfflatbulkdelete(IndexVacuumInfo *info, IndexBulkDeleteResult *stats,
|
||||
GenericXLogAbort(state);
|
||||
|
||||
UnlockReleaseBuffer(buf);
|
||||
|
||||
UnlockPage(index, IVFFLAT_SCAN_LOCK, ExclusiveLock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user