Page 1 of 1

MariaDB Frage

Posted: Mon 21. Mar 2022, 15:37
by klicksor
Hallo,

ich habe eine Vermutung, aber bin mir nicht so ganz sicher.
Ich habe Keyhelp 21.3 (Build 2344) am laufen mit MariaDB 10.5.12.

Kann es sein, dass hier standardmäßig was gecached wird?
D.h. wenn ich was in die DB schreibe (über PHP) dann dauert es ne Weile bis ich es von der DB ausgelesen bekomme.

Kann man das irgendwo deaktivieren?


Gruß

Re: MariaDB Frage

Posted: Mon 21. Mar 2022, 15:48
by Jolinar
klicksor wrote: Mon 21. Mar 2022, 15:37 Kann es sein, dass hier standardmäßig was gecached wird?
AFAIK eigentlich nicht, aber ich arbeite eher auf OS-Ebene als auf Anwendungsebene. Vllt. kann ein Dev Genaueres dazu sagen.

klicksor wrote: Mon 21. Mar 2022, 15:37 wenn ich was in die DB schreibe (über PHP)
Kannst du das eventuell etwas näher erläutern?

Re: MariaDB Frage

Posted: Mon 21. Mar 2022, 16:03
by 24unix
klicksor wrote: Mon 21. Mar 2022, 15:37 D.h. wenn ich was in die DB schreibe (über PHP) dann dauert es ne Weile bis ich es von der DB ausgelesen bekomme.
Nein, das passiert sofort.

Hast Du ein konkretes Beispiel?

Re: MariaDB Frage

Posted: Mon 21. Mar 2022, 16:05
by tab-kh
Schreibst und liest du parallel oder ist das Schreiben abgeschlossen, bevor du versuchst das Geschriebene zu lesen? Bis dahin sagen wir mal so, solange du an den Defaulteinstellungen nichts verstellt hast (z.B. autocommit auf 0 gestellt, Default ist 1) und das Schreiben fertig war bevor du anfängst zu lesen, dürfte das eigentlich nicht passieren. Wenn autocommit allerdings nicht aktiviert ist, musst du jede Transaktion mit COMMIT explizit abschliessen. Passiert das nicht und die Verbindung wird vorher beendet, wird ein Rollback der kompletten Transaktion ausgeführt, so dass deine eventuell geschriebenen Daten nicht mehr in der Datenbank stehen. Das könnte man als eine Art Cache ansehen, der erst durch das COMMIT geflusht wird.

Re: MariaDB Frage

Posted: Tue 22. Mar 2022, 07:34
by klicksor
hi,

danke für die Antworten!

Wenn ich in die DB schreibe, dann ist es erst nach einer Zeit in der DB wirklich ersichtlich. Auch das Auslesen über PHP liefert mir das Ergebnis nicht sofort. Bekomme es erst nach einer Zeit und dann seh ich es auch erst in der DB.

Hab mal etwas nachgelesen.

Wenn Ich z.B. das hier ausführe, dann liefert er mir "YES" zurück. Somit muss ein Caching an sein.

Code: Select all

SHOW VARIABLES LIKE 'have_query_cache';
Wenn ich dann die Cache Size auf "0" stelle

Code: Select all

SET GLOBAL query_cache_size = 0;
Funktioniert alles einwandfrei. D.h. gleich nach dem Schreiben gibt er mir auch die Daten aus. Jedoch halt nur bis zu dem Zeitpunkt, wo ich MariaDB neu starte oder Keyhelp es neu startet.

Ich benötige das Caching nicht und in meinem Fall ist es auch ziemlich schlecht tatsächlich, da viele User am System arbeiten und dadurch doppelte Kundennummern z.B. entstehen können.

Wenn ich es jedoch in der "50_server" direkt reinschreibe übernimmt er es mir nicht als Standard.


Gruß

Re: MariaDB Frage  [GELÖST]

Posted: Tue 22. Mar 2022, 09:22
by Alexander
Hallo,
klicksor wrote: Tue 22. Mar 2022, 07:34 Wenn Ich z.B. das hier ausführe, dann liefert er mir "YES" zurück. Somit muss ein Caching an sein.

Code: Select all

SHOW VARIABLES LIKE 'have_query_cache';
Nur zum richtig-stellen: Das sagt laut Dokumentation (https://mariadb.com/kb/en/query-cache/) nichts darüber aus, ob es aktiv ist oder nicht, es sagt nur aus, ob es theoretisch verfügbar wäre:
Unless MariaDB has been specifically built without the query cache, the query cache will always be available, although inactive. The have_query_cache server variable will show whether the query cache is available.

Um das von dir gewünschte zu ermitteln solltest du eher das folgende abfragen:
SHOW VARIABLES LIKE 'query_cache_type';
(https://mariadb.com/kb/en/server-system ... cache_type)


In der 90-tuning.cnf stehen übrigens ein paar Werte zum Cache, dein Eintrag in der 50-server wird durch den 90-tuning überschrieben.

Code: Select all

# Query Cache Configuration
query_cache_limit       = 64M
query_cache_size        = 128M
query_cache_type        = 1

Re: MariaDB Frage

Posted: Tue 22. Mar 2022, 11:07
by l_fish
Hei

Der Query Cache kann hier meiner Meinung nach eigentlich nicht Ursache des Problems sein, siehe

https://mariadb.com/kb/en/query-cache/# ... ache-works
Each time changes are made to the data in a table, all affected results in the query cache are cleared. It is not possible to retrieve stale data from the query cache.
D.h. ein INSERT, UPDATE, ... leert den Cache für die betreffenden Queries auf der Tabelle, so dass ein erneutes SELECT nicht aus dem query cache bedient wird, sondern die Daten frisch holt. Alles andere würde einen query cache auch komplett unbrauchbar machen in einem Datenbank-Kontext.


Grüße,
Lars

Re: MariaDB Frage

Posted: Tue 22. Mar 2022, 13:07
by klicksor
Hi,
Der Query Cache kann hier meiner Meinung nach eigentlich nicht Ursache des Problems sein, siehe

https://mariadb.com/kb/en/query-cache/# ... ache-works

Each time changes are made to the data in a table, all affected results in the query cache are cleared. It is not possible to retrieve stale data from the query cache.

D.h. ein INSERT, UPDATE, ... leert den Cache für die betreffenden Queries auf der Tabelle, so dass ein erneutes SELECT nicht aus dem query cache bedient wird, sondern die Daten frisch holt. Alles andere würde einen query cache auch komplett unbrauchbar machen in einem Datenbank-Kontext.
die Seite hab ich auch gelesen, aber leider macht er das bei mir offensichtlich nicht.
Nur eben wenn ich den Wert in der DB den query_cache_size auf 0 setze.
Um das von dir gewünschte zu ermitteln solltest du eher das folgende abfragen:

SHOW VARIABLES LIKE 'query_cache_type';

(https://mariadb.com/kb/en/server-system ... cache_type)
Das habe ich tatsächlich auch. Aber danke für die 90-tuning.cnf Info! Dann werde ich es da mal direkt deaktivieren um zu schauen, ob das Bestand hat, wenn ein Keyhelp Update kommt. Denke aber schon.

Danke!


Gruß
Thomas