it-swarm.com.de

MySQL - Zwinge, den Cache nicht zum Testen der Abfragegeschwindigkeit zu verwenden

Ich teste die Geschwindigkeit einiger Abfragen in MySQL. In der Datenbank werden diese Abfragen zwischengespeichert, sodass ich beim Testen der Geschwindigkeit dieser Abfragen nur schwer zuverlässige Ergebnisse erhalte.

Gibt es eine Möglichkeit, das Caching für eine Abfrage zu deaktivieren?

System: MySQL 4 unter Linux Webhosting, ich habe Zugriff auf PHPMyAdmin.

Vielen Dank

315
Alan

Verwenden Sie in Ihrer Abfrage die Option SQL_NO_CACHE (MySQL 5.7). (MySQL 5.6-Benutzer klicken auf HIER )

z.B.

SELECT SQL_NO_CACHE * FROM TABLE

Dadurch werden die Ergebnisse nicht mehr von MySQL zwischengespeichert. Beachten Sie jedoch, dass auch andere Betriebssystem- und Festplatten-Caches die Leistung beeinträchtigen können. Diese sind schwerer zu umgehen.

500
Jarod Elliott

Eine weitere Alternative, die nur die aktuelle Verbindung betrifft:

SET SESSION query_cache_type=0;
114
John Carter

Jeder Verweis auf das aktuelle Datum/die aktuelle Uhrzeit deaktiviert den Abfrage-Cache für diese Auswahl:

SELECT *,NOW() FROM TABLE

Siehe "Voraussetzungen und Hinweise zur Verwendung von MySQL Query Cache" @ http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html

53
mediobit

Es gibt auch eine Konfigurationsoption: query_cache_size = 0

Um den Abfragecache beim Serverstart zu deaktivieren, setzen Sie die Systemvariable query_cache_size auf 0. Durch Deaktivieren des Abfragecache-Codes entsteht kein spürbarer Overhead. Wenn Sie MySQL aus dem Quellcode erstellen, können Abfrage-Cache-Funktionen vollständig vom Server ausgeschlossen werden, indem Sie configure mit der Option --without-query-cache aufrufen.

Siehe http://dev.mysql.com/doc/refman/5.1/en/query-cache.html

30
barbushin

Sie können auch den Befehl follow ausführen, um den Abfragecache zurückzusetzen.

RESET QUERY CACHE
24
djt

Ein Problem mit dem

SELECT SQL_NO_CACHE * FROM TABLE

diese Methode scheint nur zu verhindern, dass das Ergebnis Ihrer Abfrage zwischengespeichert wird. Wenn Sie jedoch eine Datenbank abfragen, die mit der zu testenden Abfrage aktiv verwendet wird, können andere Clients Ihre Abfrage zwischenspeichern, was sich auf Ihre Ergebnisse auswirkt. Ich recherchiere weiterhin nach Möglichkeiten, diesen Beitrag zu bearbeiten, wenn ich eine herausfinde.

20
wbharding

Ich würde Folgendes verwenden:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';
13
Sergio Costa

Durch die Verwendung einer benutzerdefinierten Variablen in einer Abfrage kann die Abfrage nicht mehr zwischengespeichert werden. Ich fand es ein viel besserer Indikator als die Verwendung von SQL_NO_CACHE. Sie sollten die Variable jedoch an einem Ort ablegen, an dem die Variableneinstellung die Leistung nicht ernsthaft beeinträchtigt:

SELECT t.*
FROM thetable t, (SELECT @a:=NULL) as init;
3
newtover

Wenn Sie den Query-Cache deaktivieren möchten, setzen Sie 'query_cache_size' in Ihrer mysql-Konfigurationsdatei auf 0. Wenn es auf 0 gesetzt ist, verwendet mysql den Abfrage-Cache nicht.

2
Jinesh