====== 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.