Tag Archives: MySQL

PHP, MySQL & PECL – memcache

Eram bulversat. Deodata, situl la care lucram si era destul de nou, reusea cumva sa supraincarce procesorul serverului in asa hal, incat nici macar nu ma puteam loga in mai putin de 20 de secunde… daramite sa mai dau un banal “grep”!

“El maestro” ma bazaie pe GTalk: “Sefu’! Imi omori serveru’! Pune si tu un memcache, ceva!

Huh?! Parca am auzit de memcache. Dai pe google! In 3 secunde “yum install php-pecl-memcache”, instaleaza “El maestro” demonul, opreste httpd-ul ca sa il configureze (asa era de incarcat procesorul incat nu putea sa configureze demonul de memcache!) si ii da drumul.

Repornesc apache-ul si in 5 minute 50% din rezultatele query-urilor de mysql erau mutate pe memcache:

$memcache = new Memcache;
$memcache->connect('localhost', 11211);
$rows = $memcache->get("UNIQUE_ID".$query);
if (!$rows)
{
  $query = "select bla_bla from bla limit 10";
  $result = mysql_query($query);
  $rows = array();
  while ($row = mysql_fetch_assoc($result))
    $rows[] = $row;
  $memcache->set("UNIQUE_ID".$query, $rows, false, 2600 + rand(0, 3600));
}
foreach($rows as $row)
{
  //do your thing
}

Rezultatele? Infricosator de bune!

[root@- www]# telnet localhost 11211
Trying 127.0.0.1.
Connected to localhost.localdomain (127.0.0.1).
Escape character is .^]..
stats
STAT pid 22162
STAT uptime 94932
STAT time 1273161939
STAT version 1.2.8
STAT pointer_size 32
STAT rusage_user 9.150608
STAT rusage_system 25.857069
STAT curr_items 22086
STAT total_items 27106
STAT bytes 5533400
STAT curr_connections 5
STAT total_connections 33875
STAT connection_structures 76
STAT cmd_flush 0
STAT cmd_get 110985
STAT cmd_set 27106
STAT get_hits 84537
STAT get_misses 26448
STAT evictions 0
STAT bytes_read 14775620
STAT bytes_written 100118868
STAT limit_maxbytes 33554432
STAT threads 5
STAT accepting_conns 1
STAT listen_disabled_num 0
END

Adica, are in cache peste 76% din rezultate! Serverul se misca acum, paginile se incarca, MySQL-ul nu mai taraie dupa el coada de 100 de query-uri.

Viva Memcache!

P.S. Atentie, sa nu puneti in cache valori prea mari sau care se perimeaza repede!