Heim  >  Artikel  >  Datenbank  >  Einige Austausche über MySQL Query Cache

Einige Austausche über MySQL Query Cache

黄舟
黄舟Original
2017-02-16 13:26:031112Durchsuche

Heute ist in MySQL online ein Speichernutzungsalarm aufgetreten. Daher habe ich die Parameter der MySQL-Speichernutzung überprüft und mich dabei auf den Cache, die Verwendung von innodb_buffer_pool_size und den Abfragecache konzentriert.

query_cache_type ist standardmäßig aktiviert und die Standardgröße des Cache-Bereichs query_cache_size beträgt normalerweise 32 MB. Sie können den spezifischen Wert mithilfe der Abfrage-Cache-Parameter anzeigen:


mysql> show variables like '%cache%';
+------------------------------+----------------------+
| Variable_name                | Value                |
+------------------------------+----------------------+
| binlog_cache_size            | 32768                |
| binlog_stmt_cache_size       | 32768                |
| have_query_cache             | YES                  |
| key_cache_age_threshold      | 300                  |
| key_cache_block_size         | 1024                 |
| key_cache_pision_limit     | 100                  |
| max_binlog_cache_size        | 18446744073709547520 |
| max_binlog_stmt_cache_size   | 18446744073709547520 |
| metadata_locks_cache_size    | 1024                 |
| query_cache_limit            | 1048576              |
| query_cache_min_res_unit     | 4096                 |
| query_cache_size             | 33554432             |
| query_cache_type             | ON                   |
| query_cache_wlock_invalidate | OFF                  |
| stored_program_cache         | 256                  |
| table_definition_cache       | 400                  |
| table_open_cache             | 512                  |
| thread_cache_size            | 8                    |
+------------------------------+----------------------+
18 rows in set (0.00 sec)


mysql>



"Qcache_free_blocks": Wie viele verbleibende Blöcke sich derzeit im Abfrage-Cache befinden. Wenn der Wert größer ist,
, bedeutet dies, dass sich mehr Speicherfragmente im Abfragecache befinden und Sie möglicherweise eine geeignete Gelegenheit zum Defragmentieren finden müssen ().
● „Qcache_free_memory“: Die aktuell verbleibende Speichergröße im Abfragecache. Mit diesem Parameter können wir genauer beobachten, ob die Größe des Abfrage-Cache-Speichers im aktuellen System ausreicht, ob sie erhöht werden muss oder zu groß ist.
● „Qcache_hits“: Wie viele Treffer . Durch diesen Parameter können wir den grundlegenden Effekt von Query Cache sehen;
● „Qcache_inserts“: wie viele Fehlschläge und dann Einfügen. Durch die beiden Parameter „Qcache_hits“ und „Qcache_inserts“ können wir die Trefferquote des Abfrage-Cache berechnen:
Abfrage-Cache-Trefferquote = Qcache_hits / ( Qcache_hits + Qcache_inserts ); 🎜>● „Qcache_lowmem_prunes“: Wie viele Abfragen aufgrund von unzureichendem Speicher aus dem Abfrage-Cache gelöscht wurden. Durch die Kombination von
„Qcache_lowmem_prunes“ und „Qcache_free_memory“ können wir klarer verstehen, ob die Speichergröße des Abfragecaches in unserem System wirklich ausreichend ist und ob die Abfrage sehr häufig aufgrund von unzureichendem Speicher ersetzt wird

● „Qcache_not_cached“: Aufgrund der Einstellung von query_cache_type oder der Anzahl der Abfragen, die nicht zwischengespeichert werden können; Qcache_queries_in_cache“: Die Anzahl der Abfragen im aktuellen Abfrage-Cache;
● „Qcache_total_blocks“: Die Anzahl der Blöcke im aktuellen Abfrage-Cache;
Einschränkungen des Abfrage-Caches
Der Abfrage-Cache speichert logisch strukturierte Ergebnismengen anstelle von physischen Datenseiten, sodass die Leistung zwar verbessert wird
, aber auch einigen spezifischen Einschränkungen unterliegt.
a) Versionen vor 5.1.17 können keine Abfragen zwischenspeichern, die beim Festlegen von Variablen helfen, aber ab Version 5.1.17 unterstützt der Abfragecache
Abfragen, die beim Festlegen von Variablen helfen;
b) Die externe Abfrage-SQL in allen Unterabfragen kann nicht zwischengespeichert werden
c) Die Abfrage in Prozedur, Funktion und Trigger kann nicht zwischengespeichert werden; >d) Abfragen, die viele andere Funktionen enthalten, die bei jeder Ausführung unterschiedliche Ergebnisse liefern können, können nicht zwischengespeichert werden.
Angesichts der oben genannten Einschränkungen wird bei der Verwendung des Abfrage-Cache empfohlen, ihn über präzise Einstellungen zu verwenden, sodass nur die Daten der entsprechenden Tabelle verwendet werden können. Geben Sie den Abfrage-Cache ein, um nur bestimmte Daten zuzulassen Abfrageergebnisse, die zwischengespeichert werden sollen.

Wenn außerdem der
Qcache_free_blocks-Wert etwas hoch ist, können Sie ihn mit dem Flush-Query-Cache bereinigen.


Vorschlag eines Freundes:


Erster: Wenn Es gibt viele Lesevorgänge. Schauen Sie sich einfach das Verhältnis an, wenn es sich um eine Benutzerlistentabelle handelt oder das Datenverhältnis relativ fest ist, z. B. eine Produktliste. Die Voraussetzung ist, dass diese Bibliotheken geöffnet werden können relativ konzentriert und die Praxen in der Datenbank sind relativ klein.

Der zweite Punkt:

Wenn wir „schummeln“, z. B. wenn wir während des Bietens einen Stresstest durchführen, können wir durch Einschalten des immer noch Daten empfangen Der Abfragecache ist natürlich identisch mit dem Front-End-Verbindungspool und anderen Konfigurationen, um den QPS-Surge-Effekt zu erzielen. Wenn es viele Schreibvorgänge, aber nicht viele Besuche gibt, dann öffnen Sie es in den meisten Fällen nicht. Auf Social-Networking-Sites generieren beispielsweise 10 % der Menschen Inhalte und die restlichen 90 % konsumieren sie Sehr effektiv, aber wenn es sich um QQ-Nachrichten oder Chats handelt, ist es schrecklich.



Der dritte Punkt:

Es spielt keine Rolle, ob die Website klein ist oder keine hohe Parallelität aufweist Es werden viele Qcache-Sperren angezeigt, daher wird im Allgemeinen bei hoher Parallelität nicht empfohlen, den Abfrage-Cache zu öffnen.


Das Obige ist ein Erfahrungsaustausch zum MySQL-Abfrage-Cache. Für weitere verwandte Inhalte zahlen Sie bitte Achtung auf die chinesische PHP-Website (www.php.cn)!

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