MagicStack / MagicStack/asyncpg
Regression in copy records performance between 0.30.0 and 0.31.0
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 8.1k
- Fork
- 468
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
When run on different versions (0.30.0 vs 0.31.0), the following script reproduces the issue and consistently shows a performance regression of approximately 22%:
import asyncio
import asyncpg
import time
COUNT = 5_000
async def run():
conn = await asyncpg.connect("postgresql://user:password@localhost/postgres")
await conn.execute("CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, username TEXT, email TEXT, age INT)")
RECORDS = [("John Doe", "john.doe@example.com", 42)] * 10_000
start = time.perf_counter()
for _ in range(COUNT):
await conn.copy_records_to_table("users", records=RECORDS, columns=["username", "email", "age"])
end = time.perf_counter()
await conn.close()
return end - start
if __name__ == "__main__":
total = asyncio.run(run())
print(f"Total time: {total:.5f} seconds")
print(f"Average time per loop: {total / COUNT:.8f} seconds")
(common) [e.lee@OC0000842]$ pip install asyncpg==0.30.0
(common) [e.lee@OC0000842]$ python -m example
Total time: 89.15468 seconds
Average time per loop: 0.01783094 seconds
(common) [e.lee@OC0000842]$ pip install asyncpg==0.31.0
(common) [e.lee@OC0000842]$ python -m example
Total time: 108.57080 seconds
Average time per loop: 0.02171416 seconds
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia eseguendo lo script asyncio fornito con asyncpg 0.30.0 e 0.31.0 su PostgreSQL, confermando la differenza di tempo segnalata per copy_records_to_table. Segui il percorso di copy_records_to_table per identificare cosa è cambiato tra queste versioni; il lavoro è completo quando la regressione è spiegata e il benchmark non mostra più il rallentamento segnalato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- postgresql, python
- Ambito
- databases, performance
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 48/100