Shopware | Obacht bei zu vielen Attributen

Vor kurzem kam es bei einem Kunden zu einem ungewöhnlichem Problem beim speichern von Attributen (s_articles_attributes). Diese liesen sich weder im Backend noch über die API speichern.

Fehler

'UPDATE s_articles_attributes attr6 ....'
MySQL: Error Code: 1118 Row size too large (> 8126). Changing some columns to TEXT or BLOB

Datenbankversion
10.1.38-MariaDB-1~stretch

Ursache

Wir haben also das Problem, dass die entsprechende Row einfach zu groß ist. Das passierte in diesem Fall nach ca. 150 Attributsfeldern, von denen viele Text waren.

Shopware Artikel Attribute

Ob diese alle nötig sind oder noch alle gebraucht werden, darüber lässt sich sicher streiten, aber wir wollen ja das Problem lösen. Also wie machen wir das.

Laut MariaDB und MySQL Doku treten solche Probleme auf, wenn Datenbanken aus älteren Versionen migriert wurden, in welchen es das Row Format Dynamic noch nicht gab.

Lösung

Für das Problem gibt es mehrere Lösungen die Ihr hier finden könnt. In dem konkreten Fall hat das anpassen des ROW_FORMAT eine schnelle Lösung erbracht.

Prüfung des Row Formats

SELECT row_format FROM information_schema.tables WHERE table_schema="c1_staging" AND table_name="s_articles_attributes" LIMIT 1;

Aktuelles Format: compact

Anpassung des Row Formats

ALTER TABLE s_articles_attributes ROW_FORMAT=DYNAMIC;

Neues Format: dynamic

Vorsicht: Prüft das ganze natürlich vorher auf einer anderen DB des Servers oder dem Staging System. Dynamic gibt es erst ab einer gewissen Mysql/MariaDB Version und wird nur unterstützt wenn Ihr das Fileformat Barracuda aktiv habt (mehr hier)


Sicherlich kein konkretes Shopware Problem, ich kann mir aber vorstellen, dass der ein oder andere dieses Row Format noch einsetzt und eine ähnlich hohe Anzahl an Attributen hat.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert