Neu: Der Indexer-Audit (copex:performance:recommendations --group=indexers) prüft jetzt
die Stellschrauben, die Lock-Waits zwischen Reindex und ERP-/API-Schreibzugriffen verursachen:
db/transaction_isolation und db/binlog_format der Magento-Verbindung. Unter
REPEATABLE-READ hält das INSERT … SELECT des Reindex Shared-Next-Key-Locks auf jeder
gelesenen EAV-Zeile, unter READ-COMMITTED liest es lockfrei (MySQL-Handbuch 17.7.3).
WARN, sobald mindestens ein Indexer auf Schedule läuft; die Notiz zeigt den Weg über
db/connection/default/driver_options in der env.php, der nur Magento betrifft
db/innodb_lock_wait_timeout (INFO ab 30 s)
catalog_product_price/dimensions_mode — INFO bei none, wenn mehr als eine Website
oder mehr als acht Kundengruppen in einer Preistabelle liegen
indexer/use_application_lock (INFO, wenn nicht gesetzt; magento/magento2#12266)
Changelog-Backlog je Indexer: MAX(version_id) der _cl-Tabelle gegen mview_state;
INFO ab 10 000, WARN ab 100 000 offenen Einträgen
Modus- und Status-Check zusätzlich für cataloginventory_stock, inventory,
catalogsearch_fulltext und catalog_product_attribute. Indexer, die auf der Instanz
nicht existieren (z. B. inventory ohne MSI), werden übersprungen
Geändert: Die Batch-Size-Empfehlung für catalog_product_price rechnet jetzt wie der Core
(BatchSizeManagement): Zeilen × geschätzte Zeilengröße (max. Relationen × Websites ×
Kundengruppen × 200 B) müssen unter 20 % von innodb_buffer_pool_size bleiben. Die bisher
pauschale Empfehlung „10 000 ab 20 K Produkten" entfällt — sie widersprach der Adobe-Doku,
in der das Senken von 5000 auf 1000 einen 4-h-Reindex halbiert hat. Der geprüfte Pfad ist
indexer/batch_size/catalog_product_price/default, der Default für
catalog_category_product wird mit dem korrekten Core-Wert 100 000 ausgegeben
Fix: ProductCollectionLoadPlugin legt geladene Collection-Items nicht mehr in der
Registry-Domain product_instances ab. copex/module-preloaders bis 1.2.0 hat daraus
ProductRepository::getById() beantwortet und so unvollständige Produkte ausgeliefert —
ein Collection-Item enthält nur die selektierten Attribute. Das Batch-Preloading
(preloadFor('product', …)) läuft unverändert. Die Konstante DOMAIN bleibt als
@deprecated erhalten, weil preloaders 1.2.0 sie importiert, und fällt im nächsten Minor weg
Neu: bin/magento copex:performance:flags zeigt alle copex/*-Schalter aus der env.php
mit Wert und Default — und meldet jeden Schlüssel, den kein Modul auswertet. Magento
ignoriert einen unbekannten Schlüssel kommentarlos, ein Tippfehler oder ein veralteter
Pfad sieht deshalb aus wie eine korrekte Konfiguration. --strict liefert dafür
Exit-Code 1, etwa für eine Deploy-Pipeline. Module melden ihre Flags über das
knownFlags-Argument von ConfigCommand an
Doku-Fix: Der Aktivierungsschalter heißt copex/performance/preloaders/enabled. Die bisher
dokumentierten Pfade copex/performance/enabled und copex/performance/preloaders_enabled
werden von keinem Modul ausgewertet — wer sie gesetzt hatte, lief ohne Preloader. Zusätzlich korrigiert: min_batch_size und chunk_size liegen unter preloaders, der Default für chunk_size ist 1000 (nicht 500); disabled_domains existierte nie
copex:performance:benchmark erhält die Optionen --store und --sku. Die Werte werden über den neuen, prozessweit geteilten BenchmarkParameters-Halter (Api\BenchmarkParametersInterface) an die einzelnen Benchmarks weitergereicht. Benchmarks, die einen Store/eine SKU brauchen (Cart, PDP), nehmen ihn von dort statt automatisch zu raten oder aus der Config zu lesen — fehlt der Wert, brechen sie mit klarer Meldung ab
Audit-Befehle konsolidiert: die vier Einzelbefehle copex:performance:audit:layout-cache|redis|modules|indexers wurden entfernt und in copex:performance:recommendations zusammengeführt. Die Prüflogik lebt jetzt in wiederverwendbaren Model\Audit\*Auditor-Services
copex:performance:recommendations erhält den Filter --group=layout,redis,modules,indexers,production, um gezielt ein Subsystem zu prüfen (steuert auch den Exit-Code)
copex:performance:http-benchmark fragt jetzt Store-View, SKU und Kategorie ab (bzw. Optionen --store, --sku, --category), statt Produkt-/Kategorieseite automatisch zu erraten
Neuer interceptor_dispatch_100k-Benchmark: misst den reinen Plugin-Dispatch-Overhead (isoliert) — zeigt den Gewinn der Compiled Interceptors im di:compile-A/B (gemessen ~134 ms → ~35 ms, −74 %)
Config::getRuntimeOverride() ergänzt, damit weitere Suite-Optimierungen (EAV-Precompile) demselben --compare-Toggle folgen
suggest-Einträge ergänzt: copex/module-eav-precompile, copex/module-compiled-interceptors (experimentell) und das Upstream-Paket creatuity/magento2-interceptors
copex:performance:benchmark führt die Messung jetzt in einer Frontend-Area-Emulation aus, damit die area-gateten Preloader im CLI überhaupt feuern — --compare zeigt dadurch den echten Nutzen statt 0 Differenz (z. B. Kategorieseite −83 SELECTs / −85 %)
Benchmarks zeigen jetzt zusätzlich zur Zeit (ms, median + p95) die DB-Last als SELECT-Anzahl pro Lauf
Neuer --compare-Modus für copex:performance:benchmark: misst mit Preloadern AUS und AN und zeigt die Ersparnis (ms + Queries)
Neuer Befehl copex:performance:http-benchmark: Black-Box-Messung der echten Frontend-Antwortzeit (total + TTFB) gegen automatisch erkannte Produkt-, Kategorie- und Startseiten; Optionen --no-cache (kalter Render per Cache-Bust, ohne Cache-Flush) und --compare (OFF/ON mit Produktions-Schutz)