Оптимизация 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, так и автономно).