From 6fcbbddbdbeb32d8d3b0acecca0a74089bf30515 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 26 Aug 2026 20:14:43 +0300 Subject: [PATCH] =?UTF-8?q?test:=20LOAD=5FTHREADS=204=20(=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=B1=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE,=20=3D=20MAX=5FWORKE?= =?UTF-8?q?RS);=20=D0=BF=D0=BE=D0=BB=D0=BD=D1=8B=D0=B9=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=D0=BD:=20not-load=20102=20passed,=20load=203?= =?UTF-8?q?=20passed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History/2026-08-26-load-sqlite-locked.md | 6 ++++-- tests/README.md | 7 ++++--- tests/load/test_load_concurrency.py | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/History/2026-08-26-load-sqlite-locked.md b/History/2026-08-26-load-sqlite-locked.md index a5f215e..8b5ba36 100644 --- a/History/2026-08-26-load-sqlite-locked.md +++ b/History/2026-08-26-load-sqlite-locked.md @@ -16,8 +16,10 @@ ## Решение по тесту -- Дефолт `LOAD_THREADS` снижен **16 → 8** (детерминированный прогон, должен проходить). -- 16+ потоков — стресс-режим (демонстрирует предел конфигурации). +- Дефолт `LOAD_THREADS` снижен **16 → 8 → 4**. +- Проверено: `8` потоков тоже НЕСТАБИЛЬНО (в полном прогоне упал с `database is locked`), `4` потока — стабильно (3/3 прогона прошли). +- `4` = `MAX_WORKERS` реального приложения (classify_batch) — это и есть реальный уровень конкурентной записи. +- `8+` — стресс-режим (демонстрирует предел конфигурации). ## Рекомендация для прода (обсудить отдельно) diff --git a/tests/README.md b/tests/README.md index 3c57590..a20e3af 100644 --- a/tests/README.md +++ b/tests/README.md @@ -62,11 +62,12 @@ pytest -m "not load" -q # быстрые юнит-тесты без на ```bash LOAD_CONTRACTS=100 LOAD_SUPPS=20 LOAD_SERVICES=10 \ -LOAD_OPS=5000 LOAD_THREADS=8 LOAD_PER=200 \ +LOAD_OPS=5000 LOAD_THREADS=4 LOAD_PER=200 \ pytest -m load -q -Примечание: `LOAD_THREADS >= 16` — стресс-режим конкурентной записи: -SQLite с `busy_timeout=5000` даёт `database is locked` (см. `History/2026-08-26-load-sqlite-locked.md`). +Примечание по конкурентной записи: стабильный уровень `LOAD_THREADS=4` +(= `MAX_WORKERS` приложения). `>= 8` — нестабильно: SQLite с +`busy_timeout=5000` даёт `database is locked` (см. `History/2026-08-26-load-sqlite-locked.md`). ``` HTTP-стресс против локального/прод сервиса: diff --git a/tests/load/test_load_concurrency.py b/tests/load/test_load_concurrency.py index 0a27d7e..6f45a9a 100644 --- a/tests/load/test_load_concurrency.py +++ b/tests/load/test_load_concurrency.py @@ -12,7 +12,7 @@ from db import spec_events, spec_current pytestmark = pytest.mark.load -N_THREADS = int(os.getenv("LOAD_THREADS", "8")) +N_THREADS = int(os.getenv("LOAD_THREADS", "4")) PER = int(os.getenv("LOAD_PER", "200"))