Изпълнението на MySQL при оптимални настройки за конкретни ресурси помага за справяне с по-големи натоварвания на сървъра и предотвратява забавянето на сървъра. Като цяло, след настройване на Apache за обработка на по-големи товари, е полезно да настроите MySQL за допълнителни връзки.
Настройката на база данни е обширна тема и това ръководство обхваща само основите на редактирането на вашата MySQL конфигурация. Големите MySQL бази данни могат да изискват значително количество памет. Поради тази причина препоръчваме да използвате Linode с висока памет за такива настройки.
Забележка Стъпките в това ръководство изискват root привилегии. Не забравяйте да изпълните стъпките по-долу като root или с sudo
префикс. За повече информация относно привилегиите вижте нашето ръководство за потребители и групи.
Инструменти, които могат да помогнат за оптимизиране на MySQL
За да определите дали вашата MySQL база данни трябва да бъде преконфигурирана, най-добре е да погледнете как се представят вашите ресурси сега. Това може да стане с командата thetop или с услугата LinodeLongview. Най-малкото трябва да се запознаете с използването на RAM и CPU на вашия сървър, което може да бъде открито с тези команди:
echo [PID] [MEM] [PATH] && ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 20
ps -eo pcpu,pid,user,args | sort -k 1 -r | head -20
MySQLTuner
Скриптът MySQLTuner оценява вашата MySQL инсталация и след това извежда предложения за повишаване на производителността и стабилността на вашия сървър.
-
Изтеглете скрипта MySQLTuner:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
-
Променете разрешенията на скриптовете, за да бъдат изпълними:
chmod +x mysqltuner.pl
-
Стартирайте
mysqltuner.pl
скрипт. Ще бъдете подканени да въведете администраторското си потребителско име и парола за MySQL:./mysqltuner.pl
-
Скриптът ще върне резултати, подобни на изхода по-долу:
MySQLTuner предлага предложения относно това как да се подобри производителността на базата данни. Ако сте предпазливи относно актуализирането на вашата база данни сами, следването на предложенията на MySQLTuner е един от по-безопасните начини за подобряване на производителността на вашата база данни.>> MySQLTuner 1.4.0 - Major Hayden <[email protected]> >> Bug reports, feature requests, and downloads at http://mysqltuner.com/ >> Run with '--help' for additional options and output filtering Please enter your MySQL administrative login: root Please enter your MySQL administrative password: [OK] Currently running supported MySQL version 5.5.41-0+wheezy1 [OK] Operating on 64-bit architecture -------- Storage Engine Statistics ------------------------------------------- [--] Status: +ARCHIVE +BLACKHOLE +CSV -FEDERATED +InnoDB +MRG_MYISAM [--] Data in InnoDB tables: 1M (Tables: 11) [--] Data in PERFORMANCE_SCHEMA tables: 0B (Tables: 17) [!!] Total fragmented tables: 11 -------- Security Recommendations ------------------------------------------- [OK] All database users have passwords assigned -------- Performance Metrics ------------------------------------------------- [--] Up for: 47s (113 q [2.404 qps], 42 conn, TX: 19K, RX: 7K) [--] Reads / Writes: 100% / 0% [--] Total buffers: 192.0M global + 2.7M per thread (151 max threads) [OK] Maximum possible memory usage: 597.8M (60% of installed RAM) [OK] Slow queries: 0% (0/113) [OK] Highest usage of available connections: 0% (1/151) [OK] Key buffer size / total MyISAM indexes: 16.0M/99.0K [!!] Query cache efficiency: 0.0% (0 cached / 71 selects) [OK] Query cache prunes per day: 0 [OK] Temporary tables created on disk: 25% (54 on disk / 213 total) [OK] Thread cache hit rate: 97% (1 created / 42 connections) [OK] Table cache hit rate: 24% (52 open / 215 opened) [OK] Open file limit used: 4% (48/1K) [OK] Table locks acquired immediately: 100% (62 immediate / 62 locks) [OK] InnoDB buffer pool / data size: 128.0M/1.2M [OK] InnoDB log waits: 0 -------- Recommendations ----------------------------------------------------- General recommendations: Run OPTIMIZE TABLE to defragment tables for better performance Enable the slow query log to troubleshoot bad queries Variables to adjust: query_cache_limit (> 1M, or use smaller result sets)
Настройка на MySQL
Когато променяте конфигурацията на MySQL, бъдете нащрек за промените и как те засягат вашата база данни. Дори когато следвате инструкциите на програми като MySQLTuner, най-добре е да имате известно разбиране за процеса.
Конфигурационният файл на MySQL се съхранява на следното място:/etc/mysql/my.cnf
.
ЗабележкаПреди да актуализирате конфигурацията на MySQL, създайте резервно копие на
my.cnf
файл:cp /etc/mysql/my.cnf ~/my.cnf.backup
Най-добрата практика предполага да правите малки промени, една по една, и след това да наблюдавате сървъра след всяка промяна. Трябва да рестартирате MySQL след всяка промяна:
За дистрибуции, използващи systemd:
systemctl restart mysqld
За дистрибуции с различни системи за иницииране:
service mysql restart
При промяна на стойности в
my.cnf
файл, уверете се, че реда, който променяте, не е коментиран с лирата (#
) префикс.
key_buffer
Промяна на key_buffer
заделя повече памет на MySQL, което може значително да ускори вашите бази данни, ако приемем, че имате свободна памет. key_buffer
размерът обикновено трябва да заема не повече от 25 процента от системната памет, когато се използва машината за таблица MyISAM, и до 70 процента за InnoDB. Ако стойността е зададена твърде висока, ресурсите се губят.
Според документацията на MySQL, за сървъри с 256MB (или повече) RAM с много таблици се препоръчва настройка от 64M. Сървърите със 128MB RAM и по-малко таблици могат да бъдат зададени на 16M, стойността по подразбиране. Уебсайтовете с още по-малко ресурси и таблици могат да имат по-ниска стойност.
max_allowed_packet
Този параметър ви позволява да зададете максималния размер на пакет за изпращане. Пакетът е едно състояние на SQL, един ред се изпраща до клиент или дневник, който се изпраща от изходна база данни към реплика. Ако знаете, че вашият MySQL сървър ще обработва големи пакети, най-добре е да увеличите това до размера на най-големия си пакет. Ако тази стойност е твърде малка, ще получите грешка в регистъра на грешките си.
thread_stack
Тази стойност съдържа размера на стека за всяка нишка. MySQL взема предвид стойността по подразбиране на thread_stack
променлива, достатъчна за нормална употреба; обаче, трябва ли грешка, свързана с thread_stack
бъде регистриран, това може да бъде увеличено.
thread_cache_size
Ако thread_cache_size
е „изключено“ (настроено на 0), тогава всяка нова връзка, която се прави, се нуждае от нова нишка, създадена за нея. Когато връзките се разкачат, нишката се разрушава. В противен случай тази стойност задава броя на неизползваните нишки, които да се съхраняват в кеша, докато трябва да бъдат използвани за връзка. По принцип тази настройка има малък ефект върху производителността, освен ако не получавате стотици връзки в минута, като в този момент тази стойност трябва да се увеличи, така че по-голямата част от връзките да могат да се правят в кеширани нишки.
max_connections
Този параметър задава максималното количество едновременни връзки. Най-добре е да вземете предвид максималното количество връзки, които сте имали в миналото, преди да зададете този номер, така че ще имате буфер между това горно число и max_connections
стойност. Имайте предвид, че това не показва максималния брой потребители на вашия уебсайт наведнъж; по-скоро показва максималния брой потребители, които правят заявки едновременно.
table_cache
Тази стойност трябва да се поддържа по-висока от вашите open_tables
стойност. За да определите тази стойност, използвайте:
| |
Повече информация
Може да пожелаете да се консултирате със следните ресурси за допълнителна информация по тази тема. Въпреки че те са предоставени с надеждата, че ще бъдат полезни, моля, имайте предвид, че не можем да гарантираме за точността или навременността на външно хостваните материали.
- Библиотека с документи на MySQL
- Параметри на сървъра за настройка на MySQL
- MySQLTuner