update
This commit is contained in:
122
.paul/phases/07-pre-expansion-fixes/07-01-SUMMARY.md
Normal file
122
.paul/phases/07-pre-expansion-fixes/07-01-SUMMARY.md
Normal file
@@ -0,0 +1,122 @@
|
||||
---
|
||||
phase: 07-pre-expansion-fixes
|
||||
plan: 01
|
||||
subsystem: database
|
||||
tags: [performance, n+1, sql-optimization, indexes, static-cache]
|
||||
|
||||
requires:
|
||||
- phase: 06-sonarqube-quality
|
||||
provides: OrdersRepository refactored (god class split)
|
||||
provides:
|
||||
- Aggregating LEFT JOINs replacing N+1 correlated subqueries in orders list
|
||||
- Static cache for information_schema check
|
||||
- Performance indexes on orders table
|
||||
affects: [07-02, 07-03, 07-04]
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns: [aggregating-left-join, static-property-cache]
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- database/migrations/20260314_000048_add_orders_performance_indexes.sql
|
||||
modified:
|
||||
- src/Modules/Orders/OrdersRepository.php
|
||||
|
||||
key-decisions:
|
||||
- "allegro_order_status_mappings index skipped — already has UNIQUE KEY on allegro_status_code"
|
||||
- "Migration date 20260314 (execution date, not plan date)"
|
||||
|
||||
patterns-established:
|
||||
- "Aggregating LEFT JOIN zamiast correlated subqueries dla countów/sum w listach"
|
||||
- "Static property cache dla information_schema lookups"
|
||||
|
||||
duration: ~8min
|
||||
started: 2026-03-14
|
||||
completed: 2026-03-14
|
||||
---
|
||||
|
||||
# Phase 7 Plan 01: Performance Fixes Summary
|
||||
|
||||
**Eliminacja N+1 subqueries w liście zamówień, static cache dla information_schema, indeksy wydajnościowe na tabeli orders**
|
||||
|
||||
## Performance
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Duration | ~8min |
|
||||
| Started | 2026-03-14 |
|
||||
| Completed | 2026-03-14 |
|
||||
| Tasks | 3 completed |
|
||||
| Files modified | 2 (1 modified, 1 created) |
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| AC-1: Brak correlated subqueries w liście zamówień | Pass | 4 subqueries zastąpione aggregating LEFT JOINs; grep potwierdza zero `SELECT COUNT(*) FROM order_items WHERE oi.order_id` |
|
||||
| AC-2: information_schema nie odpytywany per-request | Pass | `private static ?bool $supportsMappedMedia` + `self::$supportsMappedMedia` — max 1× na cykl PHP |
|
||||
| AC-3: Brakujące indeksy dodane migracją | Pass | Migracja 000048: source, external_status_id, ordered_at, composite (source, external_status_id); IF NOT EXISTS |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- 4 correlated subqueries (items_count, items_qty, shipments_count, documents_count) → 3 aggregating LEFT JOINs — eliminacja ~200 dodatkowych zapytań przy 50 wierszach na stronę
|
||||
- `canResolveMappedMedia()` z instance na static property — information_schema odpytywany max 1× na cykl PHP
|
||||
- 4 brakujące indeksy na tabeli orders dla typowych filtrów/sortowań
|
||||
|
||||
## Files Created/Modified
|
||||
|
||||
| File | Change | Purpose |
|
||||
|------|--------|---------|
|
||||
| `src/Modules/Orders/OrdersRepository.php` | Modified | LEFT JOINs zamiast subqueries w buildListSql(); static cache w canResolveMappedMedia() |
|
||||
| `database/migrations/20260314_000048_add_orders_performance_indexes.sql` | Created | Indeksy: source, external_status_id, ordered_at, composite (source, external_status_id) |
|
||||
| `DOCS/DB_SCHEMA.md` | Modified | Wpis o migracji 000048 |
|
||||
| `DOCS/TECH_CHANGELOG.md` | Modified | Wpis 2026-03-14 o optymalizacjach |
|
||||
|
||||
## Decisions Made
|
||||
|
||||
| Decision | Rationale | Impact |
|
||||
|----------|-----------|--------|
|
||||
| Pominięto indeks na allegro_order_status_mappings.allegro_status_code | Tabela już ma UNIQUE KEY na tej kolumnie (migracja 000025) | Brak duplikatu indeksu |
|
||||
| Data migracji 20260314 zamiast 20260313 | Wykonanie w dniu 2026-03-14 | Numeracja zgodna z datą faktycznego utworzenia |
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Summary
|
||||
|
||||
| Type | Count | Impact |
|
||||
|------|-------|--------|
|
||||
| Auto-fixed | 0 | - |
|
||||
| Scope additions | 0 | - |
|
||||
| Deferred | 0 | - |
|
||||
|
||||
**Total impact:** Plan wykonany zgodnie ze specyfikacją. Jedyna różnica: pominięcie zbędnego indeksu na allegro_order_status_mappings (UNIQUE KEY już istniał).
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
None
|
||||
|
||||
## Verification Results
|
||||
|
||||
```
|
||||
✓ php -l src/Modules/Orders/OrdersRepository.php — No syntax errors
|
||||
✓ grep correlated subqueries — 0 matches (eliminated)
|
||||
✓ grep supportsMappedMedia — static + self:: confirmed
|
||||
✓ Migration 000048 — exists, non-empty, idempotent (IF NOT EXISTS)
|
||||
```
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
**Ready:**
|
||||
- OrdersRepository zoptymalizowany — lista zamówień gotowa na wzrost danych
|
||||
- Plan 07-02 (SSL + cron + migration) niezależny, może być wykonany natychmiast
|
||||
|
||||
**Concerns:**
|
||||
- Migracja 000048 wymaga uruchomienia na środowisku docelowym
|
||||
|
||||
**Blockers:**
|
||||
- None
|
||||
|
||||
---
|
||||
*Phase: 07-pre-expansion-fixes, Plan: 01*
|
||||
*Completed: 2026-03-14*
|
||||
Reference in New Issue
Block a user