Docs: a vector index on a large label can fail on Postgres in a container with Docker's default 64 MB /dev/shm

Aperta Adatta ai principianti
#432 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
78/100
Tipo di issue
Documentazione
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
docker, postgresql, python

Direzione di ricerca

Leggi le note Postgres del repository e individua la sezione sugli indici vettoriali; l’issue non indica un file. Aggiungi l’errore relativo alla memoria condivisa di Docker e le tre soluzioni documentate: aumentare /dev/shm, ridurre maintenance_work_mem o disabilitare i worker di manutenzione paralleli durante la compilazione. Il lavoro è completato quando le note Postgres spiegano quando si verifica l’errore e come gli utenti possono evitarlo.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

documentation

Docs, for the next train. The same issue is filed in drivine4j, drivine and drivine-python.

What a user can hit

On Postgres, a vector index that Drivine makes is a pgvector HNSW index. When the node table it covers is over min_parallel_table_scan_size (8 MB by default), Postgres builds that index in parallel. A parallel HNSW build asks for nearly all of maintenance_work_mem (64 MB by default) as one dynamic shared memory segment in /dev/shm.

Docker gives a container 64 MB of /dev/shm by default. In such a container, the build fails as soon as anything else holds a little of that memory. For example, a pooled session that ran a parallel VACUUM keeps about 1.2 MB until it ends. The error is:

could not resize shared memory segment "/PostgreSQL.N" to 63999616 bytes: No space left on device

Psycopg raises it as DiskFull; drivine4j and the TypeScript library surface the same error from Postgres. It comes from ensuring the schema, or from making a vector index, on a large label.

What the docs should say

Put this in the Postgres notes, next to vector indexes. Any one of these avoids the failure:

  • give the container more shared memory (--shm-size, or shm_size in Compose);
  • lower maintenance_work_mem for the build;
  • set max_parallel_maintenance_workers = 0 for the build.

Where it showed up

liberation-data/drivine-python#428's CI. Drivine's own timing tests left a large node table and a parallel VACUUM's shared memory in a pooled session, and the next vector-index test failed. That was fixed in the tests (vacuuming without parallel workers, and a graph of their own). Nothing changed in the library.

Lingua principale
Python
Stelle
2
Fork
0
Merge medio
3h 7m
PR unite (30g)
178

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di liberation-data/drivine-python

Tutte le issue di liberation-data/drivine-python

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.