Heim > Datenbank > MySQL-Tutorial > Hauptteil

Analysieren Sie die Startmethode und die Parameter des MySQL-Cache (query_cache_size).

怪我咯
Freigeben: 2017-04-01 09:59:32
Original
1753 Leute haben es durchsucht

MySQLAbfrage-Cache wird seit Version 4.1 bereitgestellt, aber es lohnt sich, ihn heute zu studieren. In der Standardkonfiguration ist diese Funktion von MySQL nicht aktiviert. Möglicherweise stellen Sie fest, dass der Wert der Variablen have_query_cache für MYSQL-Anfänger „Ja“ lautet Es ist leicht zu glauben, dass, wenn dieser Parameter JA ist, dies bedeutet, dass Cache aktiviert ist. Tatsächlich ist dies falsch Die aktuelle Version von MYSQL unterstützt den Abfrage-Cache. Ob der Abfrage-Cache aktiviert wird, hängt tatsächlich vom Wert eines anderen Parameters ab: query_cache_size. Der Wert ist 0, was bedeutet, dass der Abfrage-Cache deaktiviert ist und die Standardkonfiguration 0 ist. Konfigurationsmethode:

Suchen Sie den folgenden Inhalt in der

Konfigurationsdatei
my.ini oder my.cnf von MYSQL:

# Der Abfrage-Cache wird verwendet, um SELECT-Ergebnisse zwischenzuspeichern und später zurückzugeben. Wenn Ihre# viele identische Abfragen haben und sich die Tabellen selten ändern, sehen Sie sich die Statusvariable

# „Qcache_lowmem_prunes“ an, um zu überprüfen, ob der aktuelle Wert

# hoch genug ist für Ihre Last.

# Hinweis: Falls sich Ihre Tabellen sehr häufig ändern oder Ihre Abfragen

# sich jedes Mal textlich unterscheiden, kann der Abfragecache zu einem

führen # Verlangsamung statt Leistungsverbesserung.
query_cache_size=0

Die oben genannten Informationen sind die Standardkonfiguration und ihr
Kommentar
bedeutet, dass der Abfragecache von MYSQL zum Zwischenspeichern ausgewählter Abfrageergebnisse verwendet wird. Und wenn die gleiche Abfrageanfrage das nächste Mal eingeht, wird die eigentliche Abfrageverarbeitung nicht mehr durchgeführt, sondern die Ergebnisse werden direkt zurückgegeben. Ein solcher Abfragecache kann die Geschwindigkeit der Abfrage erhöhen und die Abfrageleistung optimieren Eine große Anzahl gleicher oder ähnlicher Abfragen ändert selten die Daten in der Tabelle, andernfalls besteht keine Notwendigkeit, diese Funktion zu verwenden. Sie können anhand des Werts der Variablen Qcache_lowmem_prunes überprüfen, ob der aktuelle Wert Ihrer aktuellen Systemlast entspricht. Hinweis: Wenn die von Ihnen abgefragte Tabelle
häufig aktualisiert wird
und selten dieselbe Abfrage enthält, ist es am besten, den Abfragecache nicht zu verwenden.

Spezifische Konfigurationsmethode:

1. Stellen Sie query_cache_size auf eine bestimmte Größe ein. Die spezifische Größe hängt von der tatsächlichen Situation der Abfrage ab, es ist jedoch am besten, sie auf ein Vielfaches von 1024 mit einem Referenzwert von 32 MB festzulegen. 2. Fügen Sie eine Zeile hinzu: query_cache_type=1Der Parameter query_cache_type wird verwendet, um den Cache-Typ zu steuern. Beachten Sie, dass dieser Wert nicht zufällig festgelegt werden kann und auf eine Zahl gesetzt werden muss.



Wenn auf 0 gesetzt, kann man sagen, dass Ihr Cache überhaupt nutzlos ist, was einer Deaktivierung gleichkommt. Aber muss das System in diesem Fall die durch query_cache_size festgelegte Größe zuweisen? Diese Frage muss getestet werden?

Wenn auf 1 gesetzt, werden alle Ergebnisse zwischengespeichert, es sei denn, Ihre Select-Anweisung verwendet SQL_NO_CACHE, um das Abfrage-Caching zu deaktivieren.

Bei Einstellung auf 2 werden nur die Abfragen zwischengespeichert, die über SQL_CACHE in der SELECT-Anweisung zwischengespeichert werden müssen.
Analysieren Sie die Startmethode und die Parameter des MySQL-Cache (query_cache_size).OK, einige der Dateien nach der Konfiguration lauten wie folgt:

query_cache_size=128M

query_cache_type=1
Speichern Sie die Datei, starten Sie den MYSQL-Dienst neu und starten Sie dann Abfrage durch Folgendes Überprüfen Sie, ob es wirklich aktiviert ist:





Hängt hauptsächlich davon ab, ob die Werte von query_cache_size und query_cache_type mit dem übereinstimmen, was wir festgelegt haben:

Der Wert von query_cache_size ist hier 134217728, wir setzen 128M, was eigentlich derselbe ist, aber die Einheiten sind unterschiedlich. Sie können ihn selbst umrechnen: 134217728 = 128*1024*1024.

query_cache_type ist auf 1 gesetzt und wird als ON angezeigt. Dies wurde bereits erwähnt.

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             | 134217728 |

| query_cache_type             | ON        |

| query_cache_wlock_invalidate | OFF       |

+——————————+———–+

6 rows in set (0.00 sec)
Nach dem Login kopieren
Kurz gesagt bedeutet die obige Anzeige, dass die Einstellungen korrekt sind. Ob die Abfrage jedoch in der tatsächlichen Abfrage zwischengespeichert werden kann, muss noch manuell getestet werden. Wir können dies über den Anzeigestatus wie „%Qcache“ testen %';-Anweisung Nachdem wir nun die Abfrage-Cache-Funktion aktiviert haben, schauen wir uns zunächst die Werte der relevanten Parameter an:



mysql> show status like ‘%Qcache%';

+————————-+———–+

| Variable_name           | Value     |

+————————-+———–+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134208800 |

| Qcache_hits             | 0         |

| Qcache_inserts          | 0         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 2         |

| Qcache_queries_in_cache | 0         |

| Qcache_total_blocks     | 1         |

+————————-+———–+

8 rows in set (0.00 sec)
Nach dem Login kopieren


这里顺便解释下这个几个参数的作用:

Qcache_free_blocks:表示查询缓存中目前还有多少剩余的blocks,如果该值显示较大,则说明查询缓存中的内存碎片过多了,可能在一定的时间进行整理。

Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,DBA可以根据实际情况做出调整。

Qcache_hits:表示有多少次命中缓存。我们主要可以通过该值来验证我们的查询缓存的效果。数字越大,缓存效果越理想。

Qcache_inserts: 表示多少次未命中然后插入,意思是新来的SQL请求在缓存中未找到,不得不执行查询处理,执行查询处理后把结果insert到查询缓存中。这样的情况的次数,次数越多,表示查询缓存应用到的比较少,效果也就不理想。当然系统刚启动后,查询缓存是空的,这很正常。

Qcache_lowmem_prunes:该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。

Qcache_not_cached: 表示因为query_cache_type的设置而没有被缓存的查询数量。

Qcache_queries_in_cache:当前缓存中缓存的查询数量。

Qcache_total_blocks:当前缓存的block数量。
下边我们测试下:

比如执行如下查询语句

mysql> select * from user where id = 2;

+—-+——-+

| id | name  |

+—-+——-+

|  2 | test2 |

+—-+——-+

1 row in set (0.02 sec)
Nach dem Login kopieren


然后执行show status like ‘%Qcache%',看看有什么变化:

mysql> show status like ‘%Qcache%';

+————————-+———–+

| Variable_name           | Value     |

+————————-+———–+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134207264 |

| Qcache_hits             | 0         |

| Qcache_inserts          | 1         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 3         |

| Qcache_queries_in_cache | 1         |

| Qcache_total_blocks     | 4         |

+————————-+———–+

8 rows in set (0.00 sec)
Nach dem Login kopieren


对比前面的参数值,我们发现Qcache_inserts变化了。Qcache_hits没有变,下边我们在执行同样的查询

select * from user where id = 2,按照前面的理论分析:Qcache_hits应该等于1,而Qcache_inserts应该值不变(其他参数的值变化暂时不关注,读者可以自行测试),再次执行:
show status like ‘%Qcache%',看看有什么变化:

mysql> show status like ‘%Qcache%';

+————————-+———–+

| Variable_name           | Value     |

+————————-+———–+

| Qcache_free_blocks      | 1         |

| Qcache_free_memory      | 134207264 |

| Qcache_hits             | 1         |

| Qcache_inserts          | 1         |

| Qcache_lowmem_prunes    | 0         |

| Qcache_not_cached       | 4         |

| Qcache_queries_in_cache | 1         |

| Qcache_total_blocks     | 4         |

+————————-+———–+

8 rows in set (0.00 sec)
Nach dem Login kopieren


OK,果然跟我们分析的完全一致。



Das obige ist der detaillierte Inhalt vonAnalysieren Sie die Startmethode und die Parameter des MySQL-Cache (query_cache_size).. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage