Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да оптимизирате производителността на MySQL с помощта на MySQLTuner

Изпълнението на 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 инсталация и след това извежда предложения за повишаване на производителността и стабилността на вашия сървър.

  1. Изтеглете скрипта MySQLTuner:

     wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl
    
  2. Променете разрешенията на скриптовете, за да бъдат изпълними:

     chmod +x mysqltuner.pl
    
  3. Стартирайте mysqltuner.pl скрипт. Ще бъдете подканени да въведете администраторското си потребителско име и парола за MySQL:

     ./mysqltuner.pl
    
  4. Скриптът ще върне резултати, подобни на изхода по-долу:

    >>  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)
    MySQLTuner предлага предложения относно това как да се подобри производителността на базата данни. Ако сте предпазливи относно актуализирането на вашата база данни сами, следването на предложенията на MySQLTuner е един от по-безопасните начини за подобряване на производителността на вашата база данни.

Настройка на 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 стойност. За да определите тази стойност, използвайте:

1
SHOW STATUS LIKE 'open%';

Повече информация

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

  • Библиотека с документи на MySQL
  • Параметри на сървъра за настройка на MySQL
  • MySQLTuner

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:NULL срещу

  2. Използване на PHP за изпълнение на множество MYSQL заявки

  3. Мониторинг на Percona сървър за MySQL - ключови метрики

  4. Как да управлявате сесиите в Node.js с помощта на Passport, Redis и MySQL

  5. Конкатенация на низове в MySQL