Sunday, August 16, 2009

Mysql Sorgu Onbellegi (Query Cache)

MySql birbirinin aynisi olan, ardi ardina yapilan sorgulari onbellege alip tekrar servis etme yetenegine sahiptir. Ubuntu Server uzerinden kurulacak mysql-server paketinde (versiyon 5) bu ozellik otomatik olarak aktif durumdadir. Kontrol etmek icin bir mysql komut satirindan
mysql> show status like 'qc%';
isletmek, sorgu onbelleginin nasil kullanildigini gosterecektir. Eger test ettiginiz islem sonrasi (web sayfalarindan hemen test edilebilir) Qcache_hits sayisi artiyorsa, o zaman onbellek devrede demektir.

Hibernate kullananlar icin bir not: Eger PreparedStatement kullanimi devrede ise (ki paketten ciktigi haliyle Hibernate'de bu aktif) o zaman MySql sorgu onbellegi islemiyor. Kullanabilmek icin "useServerPrepStmts=false" ibaresini jdbc url olustururken url icinde Hibernate'e vermek gerekiyor. Schemafree bu ayari artik otomatik olarak yapiyor.

Aslinda biz SF icinde zaten memcached ile tekil objeleri onbellege aliyorduk. O zaman MySql cozumu gereksiz olmaz mi? Soyle soyleyelim: IdentiferCollection, yani bir obje listesi dondurdugumuz zamanlarda memcached kullanamiyorduk, cunku bir listenin onbellekte olan baska bir tekil objeyi, birden fazla kez, icerme olasiligi mevcuttur, ve tekil obje degisirse listedeki obje(ler) eskimis olacaktir - bu tur uyumsuzluklar veri dogrulugu mekanizmasini zedeler, bu yuzden listelerde onbellek kullanimi mumkun degildi.. Fakat bu noktada pur MySql mekanizmalarini kullanmak hala mumkun (veri butunlugunu tabanin kendisinden kim daha iyi idare edebilir?) iste sorgu onbellegi burada devreye giriyor.

Kaynak

No comments: