Оптимизация Centos MySQL 4 ГБ оперативной памяти
Я использую Centos 6 64bit на VPS с 4 ГБ оперативной памяти. 1 сайт WordPress и 2 сайта со скриптами обоев. У Wordrpess есть 10 000 посещений в день. Сайт работает медленно.
my.cnf
# Пример конфигурационного файла mysql для больших систем. # # Это для большой системы с памятью = 512M, где система работает в основном # MySQL. # # Вы можете скопировать этот файл в # /etc/my.cnf для установки глобальных параметров, # mysql-data-dir/my.cnf, чтобы установить специфичные для сервера опции (в этом # установка это каталог /usr/local/mysql/var) или # ~/.my.cnf для установки пользовательских параметров. # # В этом файле можно использовать все длинные опции, которые поддерживает программа. # Если вы хотите узнать, какие опции поддерживает программа, запустите программу # с опцией --help. # Следующие параметры будут переданы всем клиентам MySQL [Клиент] #password = your_password порт = 3306 socket = /tmp/mysql.sock # Здесь следуют записи для некоторых конкретных программ # Сервер MySQL [ТуздЫ] порт = 3306 socket = /tmp/mysql.sock пропустить блокировки set-variable = key_buffer=256M set-variable = max_allowed_packet=1M set-variable = table_cache=256 set-variable = sort_buffer=1M set-variable = record_buffer=1M set-variable = myisam_sort_buffer_size=64M set-variable = thread_cache=8 # Попробуйте количество процессоров *2 для thread_concurrency set-variable = thread_concurrency=8 лог-бен идентификатор сервера = 1 # Раскомментируйте следующее, если вы используете таблицы BDB # set-variable = bdb_cache_size = 64M # set-variable = bdb_max_lock = 100000 # Раскомментируйте следующее, если вы используете таблицы InnoDB #innodb_data_home_dir = /usr/local/mysql/var/ #innodb_data_file_path = ibdata1:10M: автоматическое расширение #innodb_log_group_home_dir = /usr/local/mysql/var/ #innodb_log_arch_dir = /usr/local/mysql/var/ # Вы можете установить.._buffer_pool_size до 50 - 80 % # ОЗУ, но остерегайтесь слишком большого использования памяти #set-variable = innodb_buffer_pool_size=256M #set-variable = innodb_additional_mem_pool_size=20M # Установите.._log_file_size на 25 % размера пула буферов #set-variable = innodb_log_file_size=64M #set-variable = innodb_log_buffer_size=8M # Innodb_flush_log_at_trx_commit = 1 # set-variable = innodb_lock_wait_timeout = 50 # Укажите следующие пути к различным выделенным дискам #tmpdir = /tmp/ #log-update = / путь к выделенному каталогу / имя хоста [ТуздЫшпр] быстрый set-variable = max_allowed_packet = 16M [MySQL] нет-авто-перепев # Удалите следующий символ комментария, если вы не знакомы с SQL # сейф-обновления [Isamchk] set-variable = key_buffer = 128M set-variable = sort_buffer = 128M set-variable = read_buffer = 2M set-variable = write_buffer = 2M [ЗатсЫс] set-variable = key_buffer = 128M set-variable = sort_buffer = 128M set-variable = read_buffer = 2M set-variable = write_buffer = 2M [Mysqlhotcopy] интерактивный тайм-аут
Это./mysqltuner.pl
-------- Общая статистика -------------------------------------------------- [-] Пропущенная проверка версии для скрипта MySQLTuner [OK] В настоящее время работает поддерживаемая версия MySQL 5.5.27-log [OK] Работа на 64-битной архитектуре -------- Статистика подсистемы хранения --------------------------------------- ---- [-] Статус: + Архив -BDB -Federated +InnoDB -ISAM -NDBCluster [-] Данные в таблицах MyISAM: 16 млн. (Таблицы: 61). [-] Данные в таблицах InnoDB: 4M (Таблицы: 34) [-] Данные в таблицах PERFORMANCE_SCHEMA: 0B (Таблицы: 17) [!!] Всего фрагментированных таблиц: 34 -------- Рекомендации по безопасности ------------------------------------------- [OK] Всем пользователям базы данных назначены пароли -------- Показатели эффективности ---------------------------------------- --------- [-] В течение: 9 м 53 с (40K q [68,862 qps], 3K conn, TX: 203M, RX: 4M) [-] Читает / пишет: 83% / 17% [-] Всего буферов: 432,0M глобальных + 6,4M на поток (максимум 151 потоков) [OK] Максимально возможное использование памяти: 1,4 ГБ (36% от установленной оперативной памяти) [OK] Медленные запросы: 0% (0/40K) [OK] Максимальное использование доступных соединений: 74% (113/151) [OK] Размер буфера ключа / всего индексов MyISAM: 256,0M/10,1M [OK] Коэффициент попадания в ключевой буфер: 97,9% (152K кэшировано / 3K считываний) [OK] Эффективность кеша запросов: 62,0% (17K кешируется / 27K выбирается) [OK] Запрос обрезки кеша в день: 0 [OK] Сортировки, требующие временных таблиц: 0% (0 временных сортировок / 224 сортировки) [OK] Временные таблицы, созданные на диске: 25% (71 на диске / 277 всего) [OK] Частота попаданий в кэш потоков: 77% (создано 831 / 3K соединений) [OK] Частота попаданий в кеш таблиц: 39% (открыто 135 / открыто 342) [OK] Используемый лимит открытого файла: 15% (162/1K) [OK] Столовые блокировки получены немедленно: 98% (13K немедленных / 13K блокировок) [OK] Размер данных InnoDB / пул буферов: 4,5M/128,0M -------- Рекомендации ----------------------------------------- ------------ Общие рекомендации: Запустите OPTIMIZE TABLE, чтобы дефрагментировать таблицы для повышения производительности. MySQL запущен в течение последних 24 часов - рекомендации могут быть неточными Включите медленный журнал запросов для устранения неисправных запросов
4 ответа
Попробуйте увеличить как innodb_buffer_pool_size (до 512M), так и размер кэша запросов (query_cache_type=1 и query_cache_size=256M).
Несколько простых общих рекомендаций: http://www.ilsistemista.net/index.php/linux-a-unix/26-mysql-performance-tuning.html?limitstart=0
У Percona есть довольно приличный мастер настройки, который выложит файл my.cnf, точно настроенный на ваш сервер и рабочую нагрузку: https://tools.percona.com/wizard
Это не даст вам идеальную конфигурацию, но вы можете сравнить с тем, что вы в данный момент используете, и посмотреть, почему они выбрали определенные настройки.
Почему mysql является узким местом? Я уверен, что проблема здесь в php, так как я управляю многими magento-сайтами с большим количеством посещений, чем 10 тыс. В день.
Wp на 100% совместим с php7, поэтому начните с него. Сделайте это сначала в среде разработки, затем вживую. Кроме того, плагин кэширования является хорошим стимулом, я предлагаю кеширование Redis просто супер быстро. Следующим шагом будет перемещение mysql/mariadb в другой vm. Так как вы накачиваете my.cnf, вы крадете cpu/ram к php, поэтому 1 vm для php и один для mysql должны сильно помочь
Попробуйте установить плагин кэширования для вашей установки WordPress. Я лично рекомендую W3 Super Cache:
http://wordpress.org/extend/plugins/wp-super-cache/
Вы также можете установить XCache и настроить PHP как FCGI для улучшения кэширования (WP Super Cache работает как с XCache, так и автономно).