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"))