|
Some checks failed
Backend tests / test (push) Has been cancelled
Trzy zmiany wokol listy scen z filtrem originu, gdzie kandydatow sa dziesiatki tysiecy. 1. Kolejnosc czlonow OR w stub_exclusion_clause. Postgres liczy OR po kolei i przerywa na pierwszym trafieniu, a sam czlonow nie przestawia. "Ma kanon" (jedyny czlon z JOIN-em do sources) stal przed tanszym "ma performera", wiec placilismy za niego takze za sceny, ktore performera mialy. Po zamianie ten czlon liczy sie 5146 razy zamiast 16 191. 2. Indeks scene_external_refs (scene_id, source_id), migracja 0041. Podzapytanie "ma kanon" dociagalo source_id z heapu, bo stary indeks zna tylko scene_id. Teraz idzie Index Only Scanem: Heap Fetches 16 191 -> 1241. Razem: sort=title + origin=hqporner, strona 5 czyta 251 tys. blokow zamiast 294 tys., a na rozgrzanym cache trwa 305 ms zamiast 371 ms (mediana z 3 rund z rotowana kolejnoscia). Zysk jest skromny. Pierwsze wykonanie na zimnym cache trwa 3-5 s i tak zostaje, bo trzeba dotknac ~2 GB; sprawdzilem tez wariant z materializacja scen originu i CTE, czyta wiecej blokow (302 tys.), wiec obecny plan zostaje. 3. has_playback=false RAZEM z filtrem originu to warunek sprzeczny, bo origin wymaga zrodla z dead_at IS NULL. Wynik jest pusty z definicji, ale Postgres przemielal caly katalog, zeby to stwierdzic: 148 s. Teraz zwarte na false(), 4,8 ms, dalej zero wynikow. Przy has_playback=true z originem pomijamy z kolei nadmiarowe EXISTS o zywym playbacku, bo origin sam go wymaga, a kosztowalo sonde na kazdym kandydacie. Wyniki bez zmian: strony 1-5 dla origin=hqporner i dla glownego feedu porownane pozycja po pozycji ze stara wersja daja zero roznic, a sam predykat stub zgadza sie na probce 200 tys. scen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| 20260502_0001_initial.py | ||
| 20260502_0002_playback_sources.py | ||
| 20260503_0003_playback_dead.py | ||
| 20260504_0004_animated_thumbnail.py | ||
| 20260504_0005_favorite_performers.py | ||
| 20260504_0006_blacklists.py | ||
| 20260504_0007_play_progress.py | ||
| 20260506_0008_performer_search_meta.py | ||
| 20260506_0009_movies.py | ||
| 20260506_0010_favorite_scenes.py | ||
| 20260507_0011_origin_pornapp_to_tube.py | ||
| 20260508_0012_favorite_studios.py | ||
| 20260509_0013_bug_reports.py | ||
| 20260509_0014_favorite_movies.py | ||
| 20260510_0015_bug_reports_movie_id.py | ||
| 20260512_0016_realdebrid_cache.py | ||
| 20260512_0017_drop_realdebrid_cache.py | ||
| 20260528_0018_movie_play_progress.py | ||
| 20260531_0019_taxonomy_scene_counts.py | ||
| 20260602_0020_scene_tags_tag_id_index.py | ||
| 20260607_0021_scene_tags_tag_id_stats.py | ||
| 20260608_0022_device_scoped_user_state.py | ||
| 20260612_0023_bug_report_replies.py | ||
| 20260616_0024_saved_searches.py | ||
| 20260622_0025_source_ranking.py | ||
| 20260702_0026_scene_backfill_flag.py | ||
| 20260705_0027_playback_event_error_detail.py | ||
| 20260721_0028_tags_name_altkey_index.py | ||
| 20260727_0025_phash_blacklist.py | ||
| 20260727_0026_scene_performer_source.py | ||
| 20260727_0027_scenes_title_trgm.py | ||
| 20260813_0028_phash_backfill_queue.py | ||
| 20260818_0029_scenes_max_quality.py | ||
| 20260818_0030_scenes_quality_threshold_idx.py | ||
| 20260820_0031_duration_backfill_queue.py | ||
| 20260820_0032_origin_release_sort_idx.py | ||
| 20260820_0033_effective_date_idx.py | ||
| 20260902_0034_favorite_sites.py | ||
| 20260914_0035_scenes_duration_idx.py | ||
| 20260914_0036_clips.py | ||
| 20260914_0037_clip_feed.py | ||
| 20260915_0038_scenes_studio_effective_date_idx.py | ||
| 20260916_0039_scenes_title_created_id_idx.py | ||
| 20260916_0040_drop_scenes_title_normalized_idx.py | ||
| 20260916_0041_scene_external_refs_scene_source_idx.py | ||