кеширане MySQL

Първо, заявка за кеширане значително ускорява поколение страница. По същество, тъй като SQL-заявки са почти винаги е основната пречка.

От друга страна, интегрирана кеширане е много по-лесен за използване от кеширането на ниво приложение.
Посочването в довереник "query_cache_type = 1", ние включваме кеширането на всички заявки. В същото време ние не трябва да zaparivatsya кеш обезсилване - база данни се знае кога таблицата се променя и на кеш паметта се изтрива автоматично. Ето един пример.

Ако вместо от файловете, които използваме някакъв друг вид кеширане на ниво приложение, като например MemCache, това не променя нищо - ние все още трябва да се изпълнява чрез кода и го поставете, ако-друго.

С една дума, най-големият плюс кеш MySQL - нареди един от точката, в query_cache_type конфигурационния = 1 и след това заредете основата падна. Дори кодът не е необходимо да се докоснат.

Най-големият недостатък е, че анулирането на кеша се случва твърде прост алгоритъм: ако базовата таблица е променен външен вид, от който искате да направите запитване. Например тя изглежда така. Има 100 000 потребители, ние кеширана. Аз дойдох от и да се промени нещо в профила ви. Тя ще изглежда, че можете да загубите 1 кеш (само за потребителя, че нещо се е променило). Но MySQL изчиства целия потребителите кеш, тъй като не знае в коя потребителска информация се е променила - той вижда само от датата на промяната на маса.

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

Но ако имате данни рядко се промени, кеш MySQL - добро решение. Въпреки това, ако сървър с множество сайтове, кеширане е активиран за всички наведнъж. Ето защо, ако паметта е малък, можете ръчно да укажете исканията, които кеш, и кои не са. Ето как

  1. Намерени в конфигурационния query_cache_type = 2
  2. В искания, които те искат да кешират директива запис SQL_CACHE:
    "SELECT * FROM SQL_CACHE тагове"

Както се вижда, в този случай, ние все още имаме да стартирате код и ponastavlyat SQL_CACHE в искания.

кеширане MySQL

Сега погледнете статистиката (тя ме в продължение на 5 дни)

Добре дошли! Благодаря за статията.
Кажи ми как сте определили - ". Както можете да видите, 96% от заявките, взети от кеша".

Тук имам следните данни:
+-------------------------+----------+
| variable_name | Цена |
+-------------------------+----------+
| Qcache_free_blocks | 9 |
| Qcache_free_memory | 49016624 |
| Qcache_hits | 23509 |
| Qcache_inserts | 24011 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 863 |
| Qcache_queries_in_cache | 16557 |
| Qcache_total_blocks | 33157 |
+-------------------------+----------+

Как да се изчисли ефективни или не се използва?

[Mysqld]
DataDir = / Var / ПЬ / MySQL
гнездо = ​​/ Var / ПЬ / MySQL / mysql.sock
потребител = ****
# Деактивирането символични връзки се препоръчва за предотвратяване на разнообразни рискове за сигурността
символни връзки = 0

key_buffer_size = 16M
key_cache_division_limit = 70
tmp_table_size = 16M
max_heap_table_size = 16M

query_cache_size = 64M
query_cache_type = 1
query_cache_limit = 2М

long_query_time = 0.5
slow_query_log_file = /var/log/mysql-slow.log
slow_query_log = 0
пропуснете-InnoDB
thread_cache_size = 4
table_cache = 128

Qcache_hits 44614
Qcache_inserts 1396

(Qcache_inserts / Qcache_hits) * 100% = 3.1%, така.

Qcache_inserts - се случва, когато няма искане в кеша и данните на кеша са остарели, т.е. ние lezim в диска, ние получаваме данни и се съхранява в базата данни на кеш.

Qcache_hits - когато искането е в кеша и ние го получаваме от паметта.

Колкото по-малко съотношение (Qcache_inserts / Qcache_hits) - по-добре. Колкото по-малко данни са взети от диска, и колкото повече данни е взета от кеша.

Във вашия случай на 50% ефективност. В този случай, има достатъчно памет. Очевидно промените данните в таблицата, както и всички кеш за тази таблица се изчистват.

Например, таблица пост позиции.
Кешът куп тип данни
изберете * от пост където ID = 1
изберете * от пост където ID = 2
изберете * от пост където номер = 3
изберете * от пост където ID = N

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

Между другото, вие long_query_time = 0.5 - няма да работи. MySQL може само да влезете запитвания повече от 1 секунда. т.е., този параметър трябва да е по-голямо от 1.