perf(sxyprn): wznawiaj reaper od granicy zamiast mielic potwierdzone zywe
Po wznowieniu przerwanego przebiegu pierwsza porcja dala 498 zywych i ZERO martwych, przy sredniej 35%. Powod: przebieg idzie `ORDER BY id`, a poprzedni zdazyl sprawdzic 151 tys. pozycji. Martwe wypadly ze zbioru, ale 100 763 POTWIERDZONYCH JAKO ZYWE zostalo i skrypt sprawdzal je po raz drugi. To 73% pracy i tyle samo zbednych zadan do sxyprn, czyli dokladnie to, czego chcialem uniknac przy tym zrodle. Dolozony `--after-id`: pomija wszystko o id <= podanego. Granice bierze sie z bazy jako najwyzsze id wsrod juz oznaczonych (`max(id::text)::uuid`), sposob zapisany w komentarzu przy zapytaniu. Sprawdzone, ze granica jest wlasciwa: przed nia 0 martwych na 500, zaraz za nia 6 martwych na 10. Do zrobienia zostalo 37 391 zamiast 138 154.
This commit is contained in:
parent
9219c94c5a
commit
ecca52b8bd
1 changed files with 10 additions and 0 deletions
|
|
@ -78,6 +78,8 @@ def _probe(page_url: str) -> str:
|
||||||
def main(argv: list[str] | None = None) -> int:
|
def main(argv: list[str] | None = None) -> int:
|
||||||
p = argparse.ArgumentParser()
|
p = argparse.ArgumentParser()
|
||||||
p.add_argument("--limit", type=int, default=0, help="ile źródeł sprawdzić (0 = wszystkie żywe)")
|
p.add_argument("--limit", type=int, default=0, help="ile źródeł sprawdzić (0 = wszystkie żywe)")
|
||||||
|
p.add_argument("--after-id", default=None,
|
||||||
|
help="pomin zrodla o id <= podanego (wznowienie przerwanego przebiegu)")
|
||||||
p.add_argument("--dry-run", action="store_true", help="nie oznaczaj, tylko policz")
|
p.add_argument("--dry-run", action="store_true", help="nie oznaczaj, tylko policz")
|
||||||
a = p.parse_args(argv)
|
a = p.parse_args(argv)
|
||||||
|
|
||||||
|
|
@ -87,9 +89,17 @@ def main(argv: list[str] | None = None) -> int:
|
||||||
for noisy in ("httpx", "httpcore", "urllib3"):
|
for noisy in ("httpx", "httpcore", "urllib3"):
|
||||||
logging.getLogger(noisy).setLevel(logging.WARNING)
|
logging.getLogger(noisy).setLevel(logging.WARNING)
|
||||||
|
|
||||||
|
# Wznowienie bez mielenia od nowa: przebieg idzie ZAWSZE `ORDER BY id`, więc wszystko
|
||||||
|
# poniżej podanego id zostało już sprawdzone. Bez tego wznowienie po przerwaniu
|
||||||
|
# sprawdzało ponownie 100 tys. źródeł POTWIERDZONYCH jako żywe, czyli 73% pracy i
|
||||||
|
# tyle samo zbędnych żądań do sxyprn (2026-08-27). Granicę bierzesz z bazy:
|
||||||
|
# SELECT max(id::text)::uuid FROM playback_sources
|
||||||
|
# WHERE dead_reason = 'sxyprn-reap: Post Not Found';
|
||||||
|
_po_id = f"AND id > '{a.after_id}'" if a.after_id else ""
|
||||||
sql = f"""
|
sql = f"""
|
||||||
SELECT id, page_url FROM playback_sources
|
SELECT id, page_url FROM playback_sources
|
||||||
WHERE origin = '{_ORIGIN}' AND dead_at IS NULL AND page_url IS NOT NULL
|
WHERE origin = '{_ORIGIN}' AND dead_at IS NULL AND page_url IS NOT NULL
|
||||||
|
{_po_id}
|
||||||
ORDER BY id
|
ORDER BY id
|
||||||
"""
|
"""
|
||||||
if a.limit:
|
if a.limit:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue