= bubbalog =Дневникът на моето стадо

Ускоряване на заявките на MySQL

Friday 28.08.2009 01:01 EEST · Публикувано от в = FreeBSD =

Както при всеки друг процес, а особено и в интернет скороста е от особено значение за да се нарече една услуга качествена. Един от начините за ускоряване на зареждането на една уеб-страница е с кеширане. Специално за WordPress има плъгини които няма да разглеждам тук защото вече го направих в един предишен пост, а как става кеширането при сайтовете – нямам си идея засега защото още не съм се занимавал с това. Този начин е добър и работи доста бързо стига да имате впредвид, че това много бърка работата на динамичните елементи на страницата и ако имате нещо което често се променя или искате реален поглед върху някой елемент )например брояч на посещения на даден пост) това няма да ви свърши работа, тъй като самата система за кеширане предоставя вече генерирана статична страница… което от една или друга страна обезмисля цялата идея. Но ако това не ви е проблем тоова е вашето решение. Ако обаче е проблем… трябва да се намери друго решение. Именно тук се явява ускоряването на заявките в самия MySQL чрез кеширане на заявките (MySQL query cache).

Първото което трябва да се направи е да се копира подходящия за вашата система конфигурациоен файл за MySQL. Тъй като при FreeBSD няма заложен my.cnf файл за целта избираме и копираме един от следните предоставени файлове от /usr/local/share/mysql

#cd /usr/local/share/mysql/

самите файлове са предвидени за работа според вида и натоварването на машината на която ще работи сървъра:

  • my-small.cnf – за системи с много малко RAM (<=64MB), на които MySQL ще се използва от време на време и най-важното е mysql демона да не отнема много ресурси
  • my-medium.cnf – за системи с малко RAM (32MB-64MB), където MySQL играе важна роля или системи с минимум 128MB RAM, на които сървъра споделя системата с друг сървър – например уеб сървър
  • my-large.cnf – за системи с минимум 512MB RAM на които работи основно MySQL
  • my-huge.cnf – за системи с 1GB-2GB RAM на които работи основно MySQL

Изберете файла който ви е нужен, като всеки от файловете може да се копира в следните директории

  • /etc/my.cnf – за глобално конфигуриране на опциите
  • /var/db/mysql/my.cnf – за конфигуриране на специфични за сървъра опции
  • ~/.my.cnf – за конфигуриране на специфични оприи според потребителя

Горните 3 дестинации са грубо преведени от самия конфигурационен файл, затова може да има някои несъответствия. Аз лично ползвах първия път и my-medium.cnf

#cp /usr/local/share/mysql/mysql-medium.cnf /etc/my.cnf

Трябва да отбележа нещо много важно – файла my.cnf трябва да е задължително с мод 444 в противен случай няма да бъде използван. Затова профилактично сменяме мода

#chmod 444 the /etc/my.cnf

За проверка дали MySQL сървъра работи четейки вече копирания нов файл може да смените порта на който работи сървъра и да рестартирате MySQL, като проверите резултата с netstat:

#ee /etc/my.cnf
#/usr/local/etc/rc.d/mysql-server restart
#netstat -anp tcp

след което върнете порта по подразбиране и рестартирайте отново сървъра.

Самата конфигурация на кеширането представлява редактиране на вече копирания my.cnf файл и прибавянето на няколко реда. Първо се определя вида на кеширането: 0 – спрян/off, 1 – пуснат /on и  2 – при поискване

query-cache-type = 1

следва задаване на големината на кеша

query-cache-size = 20M

След рестартиране може да проверите дали кеша вече е включен като изпълните следната заявка в командния ред на mysql

mysql> show variables like “%query_cache%”;

ако всичко е наред трябва да видите нещо от сорта на

+——————————+———-+
| Variable_name                | Value    |
+——————————+———-+
| have_query_cache             | YES      |
| query_cache_limit            | 1048576  |
| query_cache_min_res_unit     | 4096     |
| query_cache_size             | 20971520 |
| query_cache_type             | ON       |
| query_cache_wlock_invalidate | OFF      |
+——————————+———-+
6 rows in set (0.03 sec)

За да проверите дали всичко работи добре просто трябва да изпълните следната заявка 2-3 пъти пак в командния ред на mysql

mysql> show status like “%qcache%”;

и да видите резултат подобен на този

+————————-+———-+
| Variable_name           | Value    |
+————————-+———-+
| Qcache_free_blocks      | 1        |
| Qcache_free_memory      | 20962744 |
| Qcache_hits             | 0        |
| Qcache_inserts          | 0        |
| Qcache_lowmem_prunes    | 0        |
| Qcache_not_cached       | 3        |
| Qcache_queries_in_cache | 0        |
| Qcache_total_blocks     | 1        |
+————————-+———-+
8 rows in set (0.01 sec)

Първия път когато изпълните заявката може да отнеме малко повече време в сравнение със следващите което именно показва, че кеширането работи.

Остави коментар

Писането на кирилица е задължително!
Коментари, които не са на кирилица ще бъдат изтрити без предупреждение.
Всеки коментари съдържащи 1 или повече линка, ще бъдат публикувани след одобрение.