Heim  >  Artikel  >  Datenbank  >  Geben Sie die MySQL-Cache-Abfrage frei und löschen Sie den Befehlsbeispielcode

Geben Sie die MySQL-Cache-Abfrage frei und löschen Sie den Befehlsbeispielcode

零下一度
零下一度Original
2017-04-22 17:02:501125Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung von Abfrage- und Löschbefehlen des MySQL-Cache vorgestellt. Für einige Tabellen, die nicht häufig Daten ändern und eine große Anzahl derselben SQL-Abfragen haben, ist der Abfrage-Cache bei Bedarf nützlicher kann darauf verweisen

MySQL-Abfragecache
Die Rolle des Abfragecaches besteht darin, dass der Server die Ergebnisse abruft, wenn die Abfrage eine Abfrage empfängt, die mit der zuvor identisch ist den Abfragecache, anstatt die letzte Abfrage erneut zu analysieren und auszuführen. Dies verbessert die Leistung erheblich und spart Zeit.
1. Abfrage-Cache konfigurieren
Ändern Sie die Konfigurationsdatei, ändern Sie query_cache_size und query_cache_type unter [mysqld] (fügen Sie hinzu, falls nicht). Unter diesen gibt query_cache_size die Größe des Caches an, und query_cache_type hat drei Werte, die den Typ der zwischengespeicherten ausgewählten Ergebnismenge angeben. Die Werte von query_cache_type lauten wie folgt:
0 oder off schaltet den Cache aus
1 oder on schaltet den Cache ein, speichert ihn aber nicht zur Verwendung. Die select-Anweisung von sql_no_cache: Wenn Sie den Namen „select sql_no_cache“ aus wei, wobei id=2
2 nicht zwischengespeichert wird oder die Aktivierung des bedingten Cachings erfordert, nur zwischenspeichern die select-Anweisung mit sql_cache, Cache select sql_cache name from wei where id=4
example Die Konfiguration ist wie folgt. Nachdem die Konfiguration abgeschlossen ist, starten Sie den MySQL-Server neu.


query_cache_size=10M 
query_cache_type=1

Mit dem folgenden Befehl können Sie überprüfen, ob es aktiviert ist. Dabei gibt have_query_cache an, ob es aktiviert ist, und query_cache_limit gibt die mögliche Puffergröße an Wird von einer einzelnen Abfrage verwendet, der Standardwert ist 1M; query_cache_min_res_unit ist die vom System zugewiesene Mindestcacheblockgröße. Der Standardwert ist 4 KB. Ein großer Einstellungswert ist für große Datenabfragen gut, aber wenn es sich bei Ihren Abfragen ausschließlich um kleine Datenabfragen handelt Die Konfiguration von query_cache_wlock_invalidate gibt an, ob das Cache-Ergebnis zurückgegeben oder gewartet werden soll, wenn andere Clients in die MyISAM-Tabelle schreiben bis der Schreibvorgang abgeschlossen ist, bevor die Tabelle gelesen wird, um das Ergebnis zu erhalten.


mysql> show variables like '%query_cache%'; 
+------------------------------+----------+ 
| Variable_name        | Value  | 
+------------------------------+----------+ 
| have_query_cache       | YES   | 
| query_cache_limit      | 1048576 | 
| query_cache_min_res_unit   | 4096   | 
| query_cache_size       | 10485760 | 
| query_cache_type       | ON    | 
| query_cache_wlock_invalidate | OFF   | 
+------------------------------+----------+ 
6 rows in set (0.00 sec)

2. Wir führen es zuerst einmal aus, wählen count(*) aus wei aus und führen es dann erneut aus, wie Sie sehen können dass die zweite Ausführung diesmal viel kürzer ist als bei der ersten Ausführung, da das Auswahlergebnis beim zweiten Mal aus dem Cache gelesen wird.


mysql> select count(*) from wei ; 
+----------+ 
| count(*) | 
+----------+ 
| 4194304 | 
+----------+ 
1 row in set (3.92 sec) 
mysql> select count(*) from wei ; 
+----------+ 
| count(*) | 
+----------+ 
| 4194304 | 
+----------+ 
1 row in set (0.00 sec)
Wir können den aktuellen Cache-Status mit dem folgenden Befehl überprüfen



mysql> show status like 'qcache%'; 
+-------------------------+----------+ 
| Variable_name      | Value  | 
+-------------------------+----------+ 
| Qcache_free_blocks   | 1    | 
| Qcache_free_memory   | 10475424 | 
| Qcache_hits       | 1    | 
| Qcache_inserts     | 1    | 
| Qcache_lowmem_prunes  | 0    | 
| Qcache_not_cached    | 0    | 
| Qcache_queries_in_cache | 1    | 
| Qcache_total_blocks   | 4    | 
+-------------------------+----------+ 
8 rows in set (0.00 sec)
Die Bedeutung jedes Parameters ist wie folgt:

  • Qcache_free_blocks: Die Anzahl benachbarter Speicherblöcke im Cache. Eine große Zahl weist darauf hin, dass möglicherweise Fragmente vorhanden sind. FLUSH QUERY CACHE defragmentiert den Cache, um einen freien Block zu erhalten.

  • Qcache_free_memory: Speicher im Cache freigeben.

  • Qcache_hits: Wird jedes Mal erhöht, wenn eine Abfrage im Cache landet.

  • Qcache_inserts: Wird jedes Mal erhöht, wenn eine Abfrage eingefügt wird. Die Anzahl der Treffer dividiert durch die Anzahl der Einfügungen ergibt die Fehlschussquote.

  • Qcache_lowmem_prunes: Die Häufigkeit, mit der der Cache nicht mehr über genügend Speicher verfügte und geleert werden musste, um Platz für weitere Abfragen zu schaffen. Diese Zahl lässt sich am besten über einen längeren Zeitraum hinweg betrachten. Wenn diese Zahl zunimmt, kann dies auf eine starke Fragmentierung oder einen geringen Speicherbedarf hinweisen. (Die oben genannten free_blocks und free_memory können Ihnen sagen, um welche Situation es sich handelt)

  • Qcache_not_cached: Die Anzahl der Abfragen, die nicht zum Caching geeignet sind, normalerweise weil diese Abfragen keine SELECT-Anweisungen sind oder jetzt verwendet werden ( ) und andere Funktionen.

  • Qcache_queries_in_cache: Die Anzahl der aktuell zwischengespeicherten Abfragen (und Antworten).

  • Qcache_total_blocks: Anzahl der Blöcke im Cache.

Cache leeren

MySQLs FLUSH-Syntax (Cache leeren)


FLUSH flush_option [,flush_option]
Wenn Sie einen Teil des von MySQL verwendeten internen Caches löschen möchten, sollten Sie den FLUSH-Befehl verwenden. Um FLUSH auszuführen, müssen Sie über die Berechtigung zum erneuten Laden verfügen.

flush_option kann eine der folgenden Optionen sein:

  • HOSTS Dies wird am häufigsten verwendet und kommt am häufigsten vor. Wird hauptsächlich zum Löschen der Host-Cache-Tabelle verwendet. Wenn einige Ihrer Hosts die IP-Nummern ändern oder wenn Sie die Fehlermeldung „Host... ist blockiert“ erhalten, sollten Sie die Hosttabelle leeren. Wenn für einen bestimmten Host beim Herstellen einer Verbindung zum MySQL-Server kontinuierlich mehr als max_connect_errors-Fehler auftreten, blockiert MySQL aus Sicherheitsgründen weitere Verbindungsanfragen vom Host. Durch das Löschen der Host-Tabelle kann der Host erneut versuchen, eine Verbindung herzustellen.

  • LOGS Schließen Sie die aktuelle Binärprotokolldatei und erstellen Sie eine neue Datei. Der Name der neuen Binärprotokolldatei wird um 1 zur Nummer der aktuellen Binärdatei addiert.

  • PRIVILEGEN Dies wird auch häufig nach der erneuten Autorisierung verwendet, damit die neuen Berechtigungen für den Fall der Fälle sofort wirksam werden. Der Zweck besteht darin, sie zu erhalten die Berechtigungstabelle aus der Datenbank. Laden Sie die Berechtigungen erneut in den Cache.

  • TABELLEN Schließen Sie alle geöffneten Tabellen. Durch diesen Vorgang wird der Inhalt des Abfragecaches gelöscht.

  • FLUSH TABLES WITH READ LOCK Schließen Sie alle offenen Tabellen und fügen Sie eine Lesesperre für alle Tabellen in der Datenbank hinzu, bis das Entsperren von Tabellen explizit ausgeführt wird. Dieser Vorgang wird häufig zur Datensicherung verwendet.

  • STATUS Setzt die meisten Statusvariablen auf 0 zurück.

  • MASTER Löschen Sie alle Binärprotokolldateien in der Binärprotokoll-Indexdatei, setzen Sie die Indexdatei der Binärprotokolldatei auf leer zurück und erstellen Sie eine neue Binärprotokolldatei. Dies ist jedoch nicht der Fall länger empfohlen. Verwendung, geändert auf Reset-Master. Wie Sie sich vorstellen können, war ich früher sehr naiv, aber es waren mehrere Befehle erforderlich. Die vorherige Methode bestand darin, zuerst den Namen der aktuellen Binärprotokolldatei herauszufinden und dann die Bereinigung durchzuführen Betrieb.

  • ABFRAGE-CACHE Reorganisiert den Abfrage-Cache, eliminiert Fragmente und verbessert die Leistung, hat jedoch keinen Einfluss auf die vorhandenen Daten im Abfrage-Cache. Dies ist dasselbe wie „Tabelle leeren“ und „Abfrage-Cache zurücksetzen“. Löscht den Inhalt des Abfragecaches) sind unterschiedlich.

  • SLAVE Es ähnelt dem Zurücksetzen der Replikation. Dadurch vergisst die Slave-Datenbank den Replikationsspeicherort der Master-Datenbank und löscht auch das heruntergeladene Relay-Protokoll empfohlen. Geändert in „Slave zurücksetzen“. Das ist auch sehr nützlich.

Im Allgemeinen werden Flush-Vorgänge in binären Protokolldateien aufgezeichnet, FLUSH LOGS, FLUSH MASTER, FLUSH SLAVE und FLUSH TABLES WITH READ LOCK werden jedoch nicht aufgezeichnet, wenn also das oben Genannte zutrifft Vorgänge werden in der binären Protokolldatei aufgezeichnet und wirken sich auf die Slave-Datenbank aus. Hinweis: Der Reset-Vorgang spielt tatsächlich die Rolle einer erweiterten Version des Flush-Vorgangs.

Das obige ist der detaillierte Inhalt vonGeben Sie die MySQL-Cache-Abfrage frei und löschen Sie den Befehlsbeispielcode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn