Запитване за кеширане в MySQL
MySQL при работа с таблици с помощта на високо мащабируеми алгоритми, така че MySQL може да работи дори и с малки количества памет. Разбира се, за най-добро изпълнение имате нужда от повече RAM.
Първо, уверете се, че кеширането е активирана. променлив
- query_cache_type трябва да има стойност на ON (1) или търсенето (2) и
- query_cache_limit - определя максималния размер на резултата, който ще попадне в кеша
- query_cache_size да е различен от нула. Ако използвате кеширани ТЪРСЕНЕТО само ще заявки, които имат директива SQL_CACHE;
- query_cache_min_res_unit минимален размер на разпределените блок памет за съхраняване на кеширани резултатите от заявката. MySQL не съхранява в кеш паметта на едно голямо парче, вместо блокове, определени по поръчка с минимален размер на query_cache_min_res_unit (= 4KB подразбиране). Последният такъв блок, закрепен за размер на данните, както и свободната памет, той е оправдан.
И ако имате много малки заявки в кеш паметта, а след това може да доведе до фрагментация на паметта, поради големия брой на свободните блокове. Това, от своя страна, води до премахването на кешираните вписвания поради липса на памет. В този случай, че има смисъл да се намали стойността на query_cache_min_res_unit. Ако повечето от вашите заявки се получи страхотен резултат, увеличаване на този параметър може да подобри производителността.
Нека се опитаме да се оцени ефекта. Вижте как променящите четения хит броячи в кеша (Qcahe_hits), броят на исканията обявен за недействителен поради липса на памет (Qcache_lowmem_prunes), общият брой на SELECT заявка (веднага след като те са кеширани). правим:
За да следите кеш заявка използвате покажат състоянието:
- Qcache_free_blocks показва колко свободни блокове се кешират (ще се намали с увеличаването skeshirovannyh искания.);
- Qcache_total_blocks - брой на заетите блокове;
- Qcache_free_memory - показва безплатно "на разположение" памет за кеширане;
- Qcache_hits - броя на заявките, резултатите от които са взети от кеша, без в действителност да влезе в базата данни;
- Qcache_inserts - броят на молбите, които са били добавени към кеша;
- Qcache_lowmem_prunes - броят на заявките, които са били отстранени от кеша поради липса на памет;
- Qcache_not_cached - броя на исканията, които не са написани на кеша в резултат на използването на работните функции с течение на времето и др.;
- Qcache_queries_in_cache - броя на исканията, които са в кеша.
Оценка на ефективността на кеш препоръчвам разделяне на променливите Qcache_hits на Qcache_hits + Com_select, тъй като, когато плота заявка се увеличава Qcache_hits (ако заявката обработват от кеша) или Com_select (ако искането не е кеширана). Този метод се предлага в «Mysql оптимизация на производителността» О'Райли
В мрежата има и друг начин - qcache_hit_ratio = qcache_hits / (qcache_hits + qcache_inserts + qcache_not_cached)
Ако стойността е> 0.8, това означава, че 80% от заявките ви падне в кеш паметта, това е много добър показател.
Ако кеш% удари ниско, че е необходимо да се увеличи стойността на query_cache_size.
Текущата стойност може да се разглежда, както следва:
Отново възниква въпросът: как да изберете подходяща query_cache_size стойност?
Това ще ви помогне Qcache_lowmem_prunes. Тази променлива съхранява броя на заявките, които са били отстранени от кеша поради необходимостта за кеширане на нови запитвания. Необходимостта да се стремим към такъв размер на кеша, който Qcache_lowmem_prunes само ще се увеличава леко. За тази цел се препоръчва да се сравни разлика Qcache_lowmem_prunes стойност на час, а броят на получените искания за MySQL в един и същи час.
На практика, за да се изчисли query_cache_size да използвате един от 2-формули:
query_cache_size = (брой заявки за 10 минути) * (обем среден отговор на заявка) * 1,2
или
query_cache_size = (обем на трафика в продължение на 10 минути) 1,2 *
Това ще даде възможност на исканията кеш за 10 минути +, за да се даде допълнително 20% от кеша на фрагментация на паметта и по желание кеширане резерв
Преброяване на броя и средния обем на отговор на запитването, можете да използвате променливи Bytes_sent съответно
И така, ние увеличихме query_cache_size на стойност, тогава трябва да се обърне внимание на стойностите Qcache_total_blocks, Qcache_free_blocks и Qcache_queries_in_cache. MySQL съхранява всички кеш блокове. На 1 заявка блок трябва да е 2, по един за текста на искането, на втория резултат.
Ако се вгледаме в таблицата със стойностите Qcache%
Общият брой на кеш блокове Qcache_total_blocks - 28
6 Сега се кешира заявки и затова заети 6 * 2 = 12 Blocks
безплатни Qcache_free_blocks единици - 10. Колкото по-неизползван Qcache_free_blocks, толкова повече "раздробяването" на кеша.
Ако по-голямата част от исканията са една малка част от получените данни, е необходимо да се намали минималният размер на кеша блок query_cache_min_res_unit, който по подразбиране е 4 KB.
Ако повечето заявки връщат много данни - това е необходимо да се увеличи размера на кеша на блока.
Основното нещо - е да се постигне минимален Qcache_free_blocks.
Ако Qcache_not_cached метра висока, можете да увеличите променлива poproboavt query_cache_limit - това ще позволи да се увеличи лимита и да кешира резултатите от заявката, че "не са подходящи".
За използването на кеша на заявката отговаря на следните конфигурационни променливи:
- query_cache_size - размера на кеша за запитване. query_cache_size = 0 деактивира кеш;
- query_cache_limit - максималният размер на извадката се съхранява в кеш паметта;
- query_cache_wlock_invalidate - определя дали данните ще бъдат взети от кеша, ако на масата, до която те са заключени за четене.
За да се даде възможност заявка кеширане MySQL добави достатъчно линии в my.cnf (секция [Mysqld]):
И рестартирате услугата.
- Заявки с SQL_NO_CACHE
- Приготвени заявки (получен отчети);
- Заявка подзаявки, които са външна заявка;
- Заявки в съхранени процедури и функции;
- Заявки, които да се използват функциите:
Референтна стойност (), CONNECTION_ID (), CONVERT_TZ (), CURDATE (), CURRENT_DATE (), CURRENT_TIME (), CURRENT_TIMESTAMP (), CurTime (), база данни (), криптиране () с един аргумент, FOUND_ROWS (), GET_LOCK () , LAST_INSERT_ID (), LOAD_FILE (), MASTER_POS_WAIT (), NOW (), RAND (), RELEASE_LOCK (), SLEEP (), SYSDATE (), UNIX_TIMESTAMP () без аргументи, USER (), UUID (); - Заявки използват съхраняват функции, потребител променливи или връзка към маса в INFORMATION_SCHEMA на системата или основи MySQL;
- Заявки имат следните форми:
SELECT. На дела MODE
SELECT. ЗА АКТУАЛИЗАЦИЯ
SELECT. В OUTFILE.
SELECT. В DumpFile.
SELECT * FROM. КЪДЕ autoincrement_col е нула - Заявки с временни таблици или да не се използва маси;
- Заявка за генериране на сигнали (предупреждения);
Дефрагментиране на кеша с командата:
Clean - екип:
Най-важното
Никога не работете с настройките по подразбиране. Това ще доведе до неизползването на по-голямата част от ресурсите на сървъра. Правилно MySQL настройка може да подобри производителността на база данни от няколко пъти. Това не само ще ускори прилагането на работа, но и да се справи с тежкия товар.
Като пример за конфигурация, може също да използва примери за конфигурация MySQL (/usr/share/mysql/my-innodb-heavy-4G.cnf).
Прочетете други интересни статии
- UPDATE Синтаксис на командите
- MySQL полезни команди
- Оптимална настройка Mysql
- MySQL: "Отказан достъп за потребител" Debian-сис-Мейнт "@" Localhost "
- Как да разберете ненужни индекси в MySQL
- Tsung товар тестване
- MYSQL: изостанали RESPONSE
- Zabbix 2 - Monitor MySQL
- MySQL списък на маси и тяхната структура
- MySQL: Insert голям данни