MySQL – forceer om cache niet te gebruiken voor het testen van de snelheid van de zoekopdracht

Ik test de snelheid van sommige zoekopdrachten in MySQL. De database slaat deze zoekopdrachten op in de cache, waardoor het voor mij moeilijk is om betrouwbare resultaten te krijgen wanneer ik test hoe snel deze zoekopdrachten zijn.

Is er een manier om caching voor een zoekopdracht uit te schakelen?

Systeem: MySQL 4 op Linux webhosting, ik heb toegang tot PHPMyAdmin.

Bedankt


Antwoord 1, autoriteit 100%

Probeer de SQL_NO_CACHEte gebruiken (MySQL 5.7) optie in uw zoekopdracht.
(MySQL 5.6-gebruikers klikken HIER)

bijv.

SELECT SQL_NO_CACHE * FROM TABLE

Hiermee stopt MySQL met het cachen van de resultaten, maar houd er rekening mee dat andere besturingssystemen en schijfcaches ook de prestaties kunnen beïnvloeden. Deze zijn moeilijker te omzeilen.


Antwoord 2, autoriteit 24%

Een ander alternatief dat alleen de huidige verbinding beïnvloedt:

SET SESSION query_cache_type=0;

Antwoord 3, autoriteit 11%

Elke verwijzing naar de huidige datum/tijd schakelt de querycache voor die selectie uit:

SELECT *,NOW() FROM TABLE

Zie “Vereisten en opmerkingen voor het gebruik van MySQL-querycache” @ http://dev .mysql.com/tech-resources/articles/mysql-query-cache.html


Antwoord 4, autoriteit 5%

Er is ook een configuratieoptie: query_cache_size=0

Als u de querycache bij het opstarten van de server wilt uitschakelen, stelt u de systeemvariabele query_cache_size in op 0. Door de querycachecode uit te schakelen, is er geen merkbare overhead. Als u MySQL vanaf de broncode bouwt, kunnen querycachemogelijkheden volledig worden uitgesloten van de server door configure aan te roepen met de optie –without-query-cache.

Zie http://dev.mysql.com/doc /refman/5.1/nl/query-cache.html


Antwoord 5, autoriteit 5%

U kunt ook de opdracht follow uitvoeren om de querycache opnieuw in te stellen.

RESET QUERY CACHE

Antwoord 6, autoriteit 4%

Een probleem met de

SELECT SQL_NO_CACHE * FROM TABLE

methode is dat het alleen lijkt te voorkomen dat het resultaat van uw zoekopdracht in de cache wordt opgeslagen. Als u echter een query uitvoert op een database die actief wordt gebruikt met de query die u wilt testen, kunnen andere clients uw query in de cache opslaan, wat van invloed is op uw resultaten. Ik blijf manieren zoeken om dit te omzeilen, zal dit bericht bewerken als ik erachter kom.


Antwoord 7, autoriteit 3%

Ik zou het volgende gebruiken:

SHOW VARIABLES LIKE 'query_cache_type';
SET SESSION query_cache_type = OFF;
SHOW VARIABLES LIKE 'query_cache_type';

Antwoord 8

Het gebruik van een door de gebruiker gedefinieerde variabele binnen een query maakt het hervatten van de query niet meer in cache te vinden. Ik vond het een veel betere indicator dan het gebruik van SQL_NO_CACHE. Maar u moet de variabele op een plaats plaatsen waar de instelling van de variabele de prestaties niet ernstig zou beïnvloeden:

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

Antwoord 9

Als u de Query-cache wilt uitschakelen, stelt u ‘query_cache_size’ in op 0 in uw mysql-configuratiebestand . Als het is ingesteld op 0, zal mysql de querycache niet gebruiken.


Antwoord 10

Hoewel sommige antwoorden goed zijn, is er een belangrijk voorbehoud.

Het kan voorkomen dat de mysql-query’s in de cache worden opgeslagen, maar het verhindert niet dat uw onderliggende OS-cachingschijf toegang krijgt tot het geheugen. Dit kan een grote vertraging zijn voor sommige zoekopdrachten, vooral als ze gegevens van draaiende schijven moeten halen.

Dus hoewel het goed is om de bovenstaande methoden te gebruiken, zou ik ook proberen elke keer te testen met een andere set gegevens/bereik, die waarschijnlijk niet van de schijf naar de schijf/geheugencache worden gehaald.


Antwoord 11

U moet de SQL-tekenreeks wijzigen. Omdat SQL-string een cachesleutel is.
Voeg bijvoorbeeld een tijdstempel toe aan een SQL-opmerking.

Functie voor PHP:

function db_RunSQL($SQL, $NoCacheMode=false)
{
$SQL = (($NoCacheMode) ? '/*'.time().'*/ ' : '') . $SQL;
return mysqli_query(db_SavedConnect(), $SQL);
}

Other episodes