Persistente Datenbankverbindungen

Hallo liebes Shopware Forum,

ich habe ein vermeintlich leichtes Problem bei den Datenbankeinstellungen für Shopware. Wir würden gerne persistente Datenbankverbindungen nutzen um die Performance zu optimieren. Sämtliche andere System (z.B. Revive Adserver) die wir nutzen bieten eine Einstellungsmöglichkeit, um Datenbankverbindungen persistent zu machen. Normalerweise kann ich persistente Verbindungen auch ermöglichen indem beim Host ein p: vorgestellt wird, also z.B p:127.0.0.1 anstatt 127.0.0.1. Wenn ich dies allerdings in der config.php von Shopware mache, lädt die Seite nicht mehr. Ich finde auch keinerlei Infos zum Thema persistente Datenbankverbindungen mit Shopware bei Google & Co. Ich hoffe ihr könnt mir helfen.

Danke

Martin

Hallo Martin! Hier mein Tipp! Kümmert euch lieber erst mal um euer SSL-Zertifikat.

Eure Domain wird von 3 Browsern als nicht sicher eingestuft.

Im IE, in Chrome und Firefox.

Mein Tipp: Das Zertifikat ist auf eine …server.com Adresse ausgestellt.

Das leidliche Thema mit dem Umleiten von HTTPS. Ist eher einfach zu lösen, hilft Martin aber nicht bei seinem eigentlichen Problem, dass, soweit ich das auf die schnelle sehe, nicht so einfach zu lösen ist.

Laut Doku muss PDO::ATTR_PERSISTENT direkt im Konstruktor übergeben werden, alle nachträglichen Aktionen, das noch zu setzen, sind nicht erfolgreich. Jetzt ist es aber so, dass in engine/Shopware/Components/DependencyInjection/Bridge/Db.php das setzen eines solchen Flags gar nicht vorgesehen ist. 

Auch engine/Shopware/Configs/Default.php (dort sind alle möglichen Config-Flags gelistet) kennt für db kein persistent-Flag. Evtl. kann man noch was über die nicht dokumentiert Config-Variable ‚factory‘ erreichen, das hab ich mir aber nicht näher angesehen.

Matt

War auch nur ein gut gemeinter Tipp. Was nützt einem eine schnelle Performance, wenn die Besucher nicht auf die Seite kommen.

Wenn du dich durchgeklickt hättest wüsstest du, dass es gar nicht um die URL im Profil geht.

Matt

Hi,

persistente Verbindungen sind ja grundsätzlich ein zweischneides Schwert - ob das sinnvoll ist oder nicht hängt unter anderem von der Konfiguration deines Apaches / deiner PHP Worker, der Anzahl der Webserver und der Frage ab, ob die DB auf einem eigenen Server läuft oder nicht. Insofern würde ich das an deiner Stelle probeweise erstmal in die \Shopware\Components\DependencyInjection\Bridge\Db::createPDO patchen und prüfen, ob das überhaupt zum erhofften Ergebnis führt. Da haben wir auch schon mit experimentiert und hatten durchwachsene Ergebnisse.

Falls dein Test aber positiv ist, hast du ab Shopware 5.2.22 (wenn ich das richtig sehe) die Möglichkeit, in deinem Datenbank-Konfigurations-Array zusätzlich eine PDO-Factory zu hinterlegen: 

 [
        'username' => 'root',
        'password' => 'geheim',
        'dbname' => 'shopware',
        'host' => 'localhost',
        'factory' => '\Namespace\deiner\PdoFactory',
     ]
];

In deiner eigenen PDO-Factory bekommst du dann ebenfalls die $dbConfig reingereicht und kannst dann quasi die Shopware-PDO-Factory nachbauen und zusätzlich den gewünschten Constructor-Parameter setzen.

Auch wenn das bewusst ein undokumentiertes Feature ist (insofern keine Gewähr dafür :)), hast du damit zumindest die Möglichkeit an die PDO-Factory zu kommen, ohne dass das bei jedem SW-Update überschrieben wird. 

Besten Gruß

Daniel