Felhasználói eszközök

Eszközök a webhelyen


mysql-esettanulmany-1

Ez a dokumentum egy előző változata!


MySQL teljesítmény és Query Cache problémák

Szia! mit érdemes tenni, ha a mysql processlistben rengeteg a „Waiting for query cache lock”?

Válasz:

A `Waiting for query cache lock` üzenet a MySQL processlistben azt jelzi, hogy a Query Cache-t használod, és a folyamatok sorban állnak, mert egyszerre csak egy query írhat/érvényesíthet bejegyzést a cache-be.
===Probléma oka és megoldás:===
- A Query Cache globális lockot használ → sok írás/törlés esetén a cache állandóan érvénytelenítve lesz.
- Emiatt a párhuzamos lekérdezések blokkolják egymást.
===Megoldási javaslatok:===
* Kapcsold ki a Query Cache-t:
  <code>
  query_cache_type = 0
  query_cache_size = 0
  </code>
* Alternatívaként csökkentsd a cache méretét vagy állítsd `DEMAND`-re.
* Modern környezetben érdemes alkalmazás szintű cache-t használni (Redis/Memcached).
  • * Bevált a query_cache_type = DEMAND; alacsony query cache méret mellett. — Lehet online is kikapcsolni a query cache-t, vagy csak újraindítással? ===Válasz:=== Igen, online is kikapcsolható: <code> SET GLOBAL query_cache_type = OFF; SET GLOBAL query_cache_size = 0; </code> - `query_cache_type` dinamikusan állítható. - `query_cache_size` csak 0-ra állítható futás közben, visszaállítani új értékre csak 0 után lehet. - Tartós kikapcsoláshoz módosítani kell a my.cnf-t és újraindítani. — ==== Hogyan lehet beállítani 128 MB-ra a query cache-t online?==== ===Válasz:=== - Ha `query_cache_size` jelenleg nem 0, először állítsd 0-ra: <code> SET GLOBAL query_cache_size = 0; </code> - Ezután állítsd a kívánt méretre bájtban: <code> SET GLOBAL query_cache_size = 134217728; – 128 MB </code> - Kapcsolhatod vissza a cache-t: <code> SET GLOBAL query_cache_type = ON; </code> — A terhelés nem csökkent, egy gyakori lekérdezés indexelésével javítottunk a problémán. — === Buffer pool méretének növelése === Lépések: - 1 GB → 8 GB - Ezzel a gyakran használt adatok és indexek memóriában maradnak. - Hit rate ellenőrizhető: <code> SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%'; Hit rate = 1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) </code> Példa számítás:**
  1. read_requests = 1,000,000
  2. reads = 5,000
  3. Hit rate = 1 - 5000/1,000,000 = 0.995 = 99.5%

Tanulságok

  • Query Cache modern környezetben gyakran hátrányos → kikapcsolás javasolt.
  • Kompozit indexek létrehozása jelentősen csökkenti a beolvasott sorok számát.
  • Buffer pool növelése javítja a memóriából történő kiszolgálás arányát.
  • Ezek kombinációja gyorsabb, stabilabb MySQL működést biztosít.
mysql-esettanulmany-1.1757669375.txt.gz · Utolsó módosítás: 2025/09/12 09:29 szerkesztette: daevidt