====== MySQL teljesítmény és Query Cache problémák ======
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:
query_cache_type = 0
query_cache_size = 0
* 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ó:
SET GLOBAL query_cache_type = OFF;
SET GLOBAL query_cache_size = 0;
- `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:
SET GLOBAL query_cache_size = 0;
- Ezután állítsd a kívánt méretre bájtban:
SET GLOBAL query_cache_size = 134217728; -- 128 MB
- Kapcsolhatod vissza a cache-t:
SET GLOBAL query_cache_type = ON;
---
** 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ő:
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
Hit rate = 1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests)
**Példa számítás:**
- read_requests = 1,000,000
- reads = 5,000
- 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.