# Probleme mit MariaDB

**URL:** <https://forum.shopware.com/t/probleme-mit-mariadb/72014>\
**Category:** Programmierung\
**Created:** [11. Januar 2021 um 13:33 UTC](https://forum.shopware.com/t/probleme-mit-mariadb/72014 "2021-01-11T13:33:10Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [11. Januar 2021 um 13:33 UTC](https://forum.shopware.com/t/probleme-mit-mariadb/72014/1 "2021-01-11T13:33:10Z")

</div>

Maria DB scheint Querys und dessen Resultate zu cachen. Ähnliche (Selbe WHERE und LIMIT Eigenschaften, jedoch andere Sortierung mit einem fiktiven/generierten Datenbank-Feld) Querys erhalten anschließend die selben (aber unerwünshten) Resultate. Nach ca 10-15min werden dann die richtigen Resultate geliefert. Sieht mir deshalb stark danach aus, dass MariaDB in der Grundeinstellung einen Cache hat. Würde mich deshalb mal interessieren ob man via DAL oder MySQL diesen Cache für eine bestimmte Tabelle unterbinden kann. Hat da jmd schon Erfahrungen mit?

Bei MySQL gibts an dieser Stelle auch keinerlei Probleme!

&nbsp;

---

<div class="post-metadata">

**Author:** ![0xf76](https://avatars.discourse-cdn.com/v4/letter/0/ed8c4c/32.png) [@0xf76](https://forum.shopware.com/u/0xf76)\
**Post date:** [11. Januar 2021 um 14:04 UTC](https://forum.shopware.com/t/probleme-mit-mariadb/72014/2 "2021-01-11T14:04:42Z")

</div>

Hallo Moorleiche,

MariaDB kommt zwar grundsätzlich mit dem Cache Modul - es sollte aber eigentlich inaktiv sein.

Mit folgendem Befehl schaust du, ob dein MariaDB mit Cache gebaut wurde:

```
SHOW VARIABLES LIKE 'have_query_cache';

```

Wenn du MariaDB \<=10.1.6 einsetzt, ist der Cache zwar standardmäßig ein, aber die Cache Size (query\_cache\_size) auf 0.&nbsp;

MariaDB \>=10.1.7 setzt den Cache auf aus, hat aber eine Cache Size von default 1MB.&nbsp;

Mit folgendem Befehl lässt du dir anzeigen, ob der Cache an oder aus ist:

```
SHOW VARIABLES LIKE 'query_cache_type';

```

Wenn der Wert ‚1‘ ist, ist der Cache an. Du kannst ihn so für alles deaktivieren.

Wenn du eine bestimmte Querry nicht cachen willst, geht es folgendermaßen (immer nach dem ersten SELECT):

```
SELECT SQL_NO_CACHE 

```

Wenn du nur bestimmte Querrys cachen willst, kannst du das folgend machen:

Setze den&nbsp;[query\_cache\_type](https://mariadb.com/kb/en/server-system-variables/#query_cache_type)&nbsp;auf 2. Dann kannst du mit&nbsp;SQL\_CACHE statt SQL\_NO\_CACHE (also wie eine Whitelist statt Blacklist) den Cache für bestimmte Abfragen einschalten. Diese landen dann im Cache.

Der Cache cacht keinen bestimmten Table sondern immer Abfragen.

&nbsp;

Gruß

0xf76

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [11. Januar 2021 um 15:14 UTC](https://forum.shopware.com/t/probleme-mit-mariadb/72014/3 "2021-01-11T15:14:07Z")

</div>

Hi danke für die Erklärung 😉

Ich finde die Lösung eigentlich ganz gut:&nbsp;SELECT SQL\_NO\_CACHE, da der Cache sicherlich idR aus Performance Gründen Sinn macht. Aber das wäre eien Baustelle für den Shopware Core.

VG

---

<div class="post-metadata">

**Author:** ![shyim](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/shyim/32/7681_2.png) [@shyim](https://forum.shopware.com/u/shyim)\
**Post date:** [11. Januar 2021 um 15:36 UTC](https://forum.shopware.com/t/probleme-mit-mariadb/72014/4 "2021-01-11T15:36:36Z")

</div>

Für mich klingt das erstmal nach einen MariaDB Fehler. Von daher würde ich eher versuchen eine Reproduzierbare Query zu haben und einen Bug Report bei MariaDB zu machen.  
Der Query Cache wird invalidiert, sobald etwas an der Tabelle bearbeitet wird

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [11. Januar 2021 um 20:09 UTC](https://forum.shopware.com/t/probleme-mit-mariadb/72014/5 "2021-01-11T20:09:31Z")

</div>

> [@Shyim schrieb:](https://forum.shopware.com/profile/20792/Shyim "Shyim")
> 
> Für mich klingt das erstmal nach einen MariaDB Fehler. Von daher würde ich eher versuchen eine Reproduzierbare Query zu haben und einen Bug Report bei MariaDB zu machen.  
> Der Query Cache wird invalidiert, sobald etwas an der Tabelle bearbeitet wird

&nbsp;

Das weiß ich nicht, das liegt an meinem&nbsp;FieldAccessorBuilder, dort berechne ich eine fiktive Tabellen-Spalte und setze darauf eine Sortierung an. In MariaDB wird der Query wohl nicht als ein Anderer erkannt und wird deshalb gecached. Ich kann das natürlich auch umgehen indem ich einen zusätzlichen WHERE Filter einbaue der sich bei jedem Query ändert - aber eine&nbsp;SQL\_NO\_CACHE Abfrage halte ich für etwas eleganter.

```
getExtension('DistanceField')) {
            return null;
        }

        $lat = (float) $context->getExtension('DistanceField')['lat'];
        $lon = (float) $context->getExtension('DistanceField')['lon'];

        return sprintf(
            '(ACOS(SIN(RADIANS(%F)) * SIN(RADIANS(`%s`.`%s`)) + COS(RADIANS(%F)) * COS(RADIANS(`%s`.`%s`)) * COS(RADIANS(%F) - RADIANS(`%s`.`%s`))) * 6380)',
            $lat,
            $root,
            $field->getLat(),
            $lat,
            $root,
            $field->getLat(),
            $lon,
            $root,
            $field->getLon()
        );
    }
}

```

Ich habe leider keine Möglichkeit gefunden diesen Teil so zu verpacken:

SELECT&nbsp;(ACOS(SIN(RADIANS(%F)) \* SIN(RADIANS(`%s`.`%s`)) + COS(RADIANS(%F)) \* COS(RADIANS(`%s`.`%s`)) \* COS(RADIANS(%F) - RADIANS(`%s`.`%s`))) \* 6380) AS `distance` FROM merchant

Aber es funktioniert, leider hat MariaDB damit aktuell (Caching-) Probleme…

---

<div class="post-metadata">

**Author:** ![Moorleiche](https://avatars.discourse-cdn.com/v4/letter/m/6f9a4e/32.png) [@Moorleiche](https://forum.shopware.com/u/Moorleiche)\
**Post date:** [15. Januar 2021 um 19:09 UTC](https://forum.shopware.com/t/probleme-mit-mariadb/72014/6 "2021-01-15T19:09:42Z")

</div>

Problem ist gelöst, in der WHERE Abfrage wird nun zusätzlich eine Bounding-Box für die Umkreissuche via Range Filter eingefügt. Somit ändert sich die Abfrage selbst, es wird nicht an Stelle einer anderen Abfrage gecached und es ist sogar etwas schneller 🙂
